digitalmars.D - Re: Compile-time AST manipulation API
- oldrev <oldrev gmail.com> Nov 25 2007
- Dejan Lekic <dejan.lekic gmail.com> Nov 25 2007
- 0ffh <frank frankhirsch.youknow.what.todo.net> Nov 25 2007
- =?ISO-8859-1?Q?Ma=ebl?= <someone somewhere.com> Nov 25 2007
- 0ffh <frank frankhirsch.youknow.what.todo.net> Nov 25 2007
0ffh Wrote:Ma�l wrote:Take a look at OCaml / CamlP4, this is exactly what you are looking for, and this is done in a truely nice and (extremely) fast (as always when it comes to OCaml ...) way. In my opinion, CamlP4 is one of the biggest advantage of OCaml, because it truly permits to implement full DSL, or to couple a DSL to OCaml code in a transparent way, so for instance you can define a logic DSL, and have things like [...] and this certainly is useful in many ways
Thanks for the tip. I took a look at O'Caml earlier, but to be frank, functional languages turn me off... =) I have been imperating since I was a small boy, and I'm reasonably good at it. But when I look at, say Haskell, Clean, Caml, the syntax alone is enough to turn me off. I find those even more repulsive than Lisp. That's not to say that I do not appreciate how powerful those languages are. But it's perfectly possible to have metaprogramming in an imperative languages with C-style syntax, you don't need to go functional for that. regards, frank
Anonymous AST macro is the ultimate way to solve it: macro(args, "=>", expr) { mixin("delegate(" ~ args.stringof ~ ")" ~ "{ return " ~ expr.stringof ~ "; };"); } void foo(int delegate(int, int)){ ... } foo(int x, int y => x + y); Hope it's helpful :) Regards, Wei
Nov 25 2007
Why would anyone need this in a general-purpose, OO language, is beyond me...
Nov 25 2007
Dejan Lekic wrote:Why would anyone need this in a general-purpose, OO language, is beyond me...
A few examples of what would be possible to add to any program you have the source of, by just including an appropriate module: - Stack backtraces - Runtime statistics & profiling - Array access range checking - Integral overflow checks - New numeric types that behave like primitive types without any need for syntax overloading - Anything regards, frank
Nov 25 2007
Plus, if it is implemented as a pre-processor (CamlP4-like) you could make powerful domain-specific languages and directly embbed them in D programs
Nov 25 2007
Maël wrote:Plus, if it is implemented as a pre-processor (CamlP4-like) you could make powerful domain-specific languages and directly embbed them in D programs
You wouldn't even need CTFE for it, if you'd just add a compiler switch to output the AST in some text format (say, in Annotated Term Format), and a possibility to feed those files back to the compiler, instead of D source. Hacking the compiler would become a breeze. =) regards, frank
Nov 25 2007