English is not my first language, there might be some misleadings. "code" may refer to "native code" in assembly, also "source code" as utf-8 string. I meant "source code". And yes it generates "native code". :)
On Mon, Jun 22, 2015 at 1:23 AM Kevin Squire <[email protected]> wrote: > Thanks for adding some details. > > I'm a CoffeeScript programmer, and programming languages is like a hobby. >> I've looked into several languages to see how AST works, Ruby does that, >> Elixir does that. Julia's AST is acutally quite similar to them, but not >> the same, it does not generate code from AST. >> > > Hmmm... I hope I didn't give that impression (or maybe I'm not > understanding your statement). Julia generates code from the AST as soon > as the AST is evaluated. So, for example, if I can do > > julia> e = :(inc(x) = x + 1) > :(inc(x) = begin # none, line 1: > x + 1 > end) > > julia> typeof(e) > Expr > > julia> eval(e) > inc (generic function with 1 method) > > julia> inc(2) > 3 > > In this case, I created the Expr directly, using quote syntax, but I could > also create it using > > julia> e2 = Expr(:(=), Expr(:call, :inc2, :x), Expr(:call, :+, :x, 1)) > :(inc2(x) = x + 1) > > julia> eval(e2) > inc2 (generic function with 1 method) > > julia> inc2(3) > 4 > > which is more cumbersome manually, but probably easier programmatically. > > >> I'm interested in indentation-based syntax and started my project. I >> tried to pull out Julia's AST as a compiler backend and use my project >> named Cirru as the frontend. Which can be see at >> https://github.com/Cirru/CirruSepal.jl#usage CirruSepal.jl will generate >> Julia AST from my syntax. >> > > It sounds like all you need to do is call eval() on your generated AST. > > So if there's an approach to generate Julia code from AST, then there's >> another interesting way to write Julia. Like we always do in JavaScript. >> Julia is great from my view that it's like a dynamic language, but >> internally it generates LLVM IR, which is far more interesting than >> JavaScript. JavaScript is like a compling target, and JavaScript AST is >> also a very good one. Compared to JavaScript AST, Julia's AST is >> interesting but lack of such features. >> > > Hopefully the above clears some things up, but post again if you still > have thoughts/questions. Good luck on your Cirru project! > > Cheers! > Kevin > > > > > >> >> >> On Sun, Jun 21, 2015 at 11:52 PM Kevin Squire <[email protected]> >> wrote: >> >>> There is no such function right now. In Julia, the common paradigm for >>> manipulating code is to manipulate the expression itself. >>> >>> You can, of course, output the expression, and it often looks better >>> than what David posted above (e.g., this is what parse outputs). >>> >>> Perhaps you can discuss a little more about what you're trying to do, >>> and someone here can tell you how (or if) it's typically done in Julia? >>> >>> Cheers, >>> Kevin >>> >>> >>> On Sunday, June 21, 2015 at 8:04:21 AM UTC-7, Jiyin Yiyong wrote: >>>> >>>> No. I'm looking for a function that takes in Julia AST Expr and returns >>>> Julia code in string, a opposite of the function `parse`. >>>> >>>> On Sun, Jun 21, 2015 at 10:55 PM Peter Brady <[email protected]> >>>> wrote: >>>> >>>>> Are you looking for 'eval'? >>>> >>>>
