Thanks for this pointer, Lucas - it looks as if I could learn a lot from 
Kibit - I'll have a good look at it.

Jules

On Saturday, 28 November 2015 18:54:11 UTC, Lucas Bradstreet wrote:
>
> Kibit (https://github.com/jonase/kibit 
> <https://www.google.com/url?q=https%3A%2F%2Fgithub.com%2Fjonase%2Fkibit&sa=D&sntz=1&usg=AFQjCNGd-LmdGTKLu8-azmxnx-jlketLjA>)
>  
> does many of the things that 
> you describe, though it doesn't go as far you dream. It also uses 
> core.logic to suggest equivalent substitutions. 
>
> I'd be happy to see more work in this area. 
>
> Lucas 
>
> On 29 November 2015 at 02:01, Jules <jules....@gmail.com <javascript:>> 
> wrote: 
> > Guys, 
> > 
> > I've had pieces of this idea wandering around my head for years now and 
> have 
> > finally decided that the time might be right for putting them together 
> in 
> > the context of Clojure. I'm sure that others have had similar ideas 
> before : 
> > 
> > Imagine my Clojure program which reads in your Clojure program and spits 
> out 
> > a smaller, simpler, faster Clojure program which does exactly what yours 
> > did... 
> > 
> > Of course, you are such a good programmer that your program could not be 
> > improved ? In which case we need you writing my Clojure program :-) 
> > 
> > This is opening the door onto a very large but very interesting problem 
> > space. 
> > 
> > Starting the project off in a language that is homoiconic should deliver 
> > enormous benefits straight away as the language itself provides a 
> reader, an 
> > Abstract Syntax Tree (itself) , a macro language (itself) etc... 
> > 
> > I have some initial ideas - 
> > 
> > - I was thinking of looking at core.logic to see if I might be able to 
> use 
> > it to match code to which refactorings might be applied. 
> > 
> > - I was wondering whether analysing a class/methods transitive bytecode 
> > might be enough to decide whether a function/method was effectively pure 
> or 
> > not. 
> > 
> > - I was wondering whether a simple initial approach would be to inline 
> all 
> > but the recursive macros and functions in a program and then work 
> backwards 
> > from the fully expanded program applying refactorings to extract shared 
> code 
> > etc. 
> > 
> > - I was thinking that some of this machinery would be a nice thing to 
> have 
> > in a Clojure IDE, advising you about potential refactorings and applying 
> > them as you type. 
> > 
> > - I was imagining that ultimately the inputs might not be have to be 
> > Clojure, but maybe anything that compiled down to Java bytecode. 
> > 
> > - I was wondering whether there was much synergy with core.typed. 
> > 
> > - I was wondering whether you could work out how many cpu cycles a 
> function 
> > might take to run by inspecting its bytecode or optimise for mechanical 
> > sympathy if your system knew a bit about the right things. 
> > 
> > - I was wondering whether my program could benchmark functions then 
> rewrite 
> > them and benchmark them again to confirm that they were faster. 
> > 
> > - i was considering which metrics should be used to decide that a 
> program 
> > was simpler, 
> > 
> > - I was wondering whether a Clojure program could learn much about 
> writing 
> > Clojure programs from analysing all the Clojure programs stored on e.g. 
> > GitHub. 
> > 
> > - I am dreaming of the day when programs are written by more abstract 
> > programs which are written by more abstract programs... which are 
> written by 
> > AIs :-) 
> > 
> > 
> > I guess I am talking about writing an Expert System whose problem domain 
> is 
> > Clojure [and Java bytecode], which encodes a set of rules for 
> transforming 
> > one form of its input into another form that in some way satisfies some 
> sort 
> > of [sub]goal. A system which can plan refactorings from an initial state 
> to 
> > an 'improved' goal state. 
> > 
> > I haven't written any code yet. I realise that this is a huge subject 
> and 
> > that the best thing to do would be to talk to lots of people much 
> smarter 
> > than myself about it - so here I am. 
> > 
> > What does everyone think ? 
> > 
> > Is this worth discussing or just pie in the sky ? 
> > 
> > Looking forward to hearing your thoughts, 
> > 
> > 
> > Jules 
> > 
> > -- 
> > You received this message because you are subscribed to the Google 
> > Groups "Clojure" group. 
> > To post to this group, send email to clo...@googlegroups.com 
> <javascript:> 
> > Note that posts from new members are moderated - please be patient with 
> your 
> > first post. 
> > To unsubscribe from this group, send email to 
> > clojure+u...@googlegroups.com <javascript:> 
> > For more options, visit this group at 
> > http://groups.google.com/group/clojure?hl=en 
> > --- 
> > You received this message because you are subscribed to the Google 
> Groups 
> > "Clojure" group. 
> > To unsubscribe from this group and stop receiving emails from it, send 
> an 
> > email to clojure+u...@googlegroups.com <javascript:>. 
> > For more options, visit https://groups.google.com/d/optout. 
>

-- 
You received this message because you are subscribed to the Google
Groups "Clojure" group.
To post to this group, send email to clojure@googlegroups.com
Note that posts from new members are moderated - please be patient with your 
first post.
To unsubscribe from this group, send email to
clojure+unsubscr...@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/clojure?hl=en
--- 
You received this message because you are subscribed to the Google Groups 
"Clojure" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to clojure+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to