digitalmars.D - [debate] About D's pretension for homoiconicicity
- Justin Johansson (10/10) Oct 21 2010 Nothing about this subject line is purported to be
- Ellery Newcomer (37/47) Oct 21 2010 Doo de doo.. *google homoiconic*... program representation is data
- Nick Sabalausky (6/12) Oct 21 2010 I'd love to see D do that (like Nemerle does), although I think the best...
- Simen kjaeraas (25/29) Oct 21 2010 Hardly true. While it may be possible to Greenspun together
- Andrei Alexandrescu (5/15) Oct 21 2010 Heh, interesting. I don't think D can claim it's homoiconic in any close...
Nothing about this subject line is purported to be true or false or otherwise conjectured; the subject is simply proposed as a topic for debate. The formal subject proposed for debate is "D's advanced meta-programming capabilities essentially makes it (D) as if it were a homoiconic language, and brings with it all the advantages of homoiconic languages." Hoping this is a nice topic for all to enjoy and to participate in. Cheers Justin Johansson
Oct 21 2010
Doo de doo.. *google homoiconic*... program representation is data structure of primitive type of language or somesuch Hm. templates are advance metaprogramming capabilities, string mixins are quite primitive, and ctfe is too immature to say one way or the other. In my mind, the advantage of a homoiconic language is not so much the ability to generate code (though it is pain when your language doesn't have that) as it is the ability to manipulate code. First, that presupposes a real data structure which can be manipulated. Second, since your code is represented the same way as any other data, your meta programming code isn't any different from other code. Two strengths: 1) you're working with the language; given the operators and syntactic support your meta programming should be fairly eloquent. 2) you get to use the same libraries as you do for everything else. You can probably see where I'm going. Strings are an able medium for generating code. They're pretty fundamental and generating code-as-string is a snap. However, once you have that string, you really can't do anything with it except pass it to the compiler. You can't even insert or replace some piece of code with another (with special cases you can, but special cases are fragile and break quickly whenever you want to do something slightly different). This limits how you can perform string generation. Whereas with templates, you see the top level code with some small pieces which get customized, with string generation you have to generate those small pieces first, and then progressively concatenate things around them. In terms of string operations, that may be eloquent, but in terms of code, it is rather unreadable. Then there's the fact that the compiler doesn't represent code as strings. If the compiler exposed the AST, all this might be less of an issue. ASTs aren't a primitive type, but D's library capabilities are strong enough that you might be able to design an AST such that AST manipulation doesn't suck as much as in other c-style languages. It wouldn't be much more readable than string generation, though. At best, its an implementation issue, as is ctfe (unless something's changed recently, you can't program ctfe in idiomatic D. bad.) In short, D isn't there yet. On 10/21/2010 09:51 AM, Justin Johansson wrote:Nothing about this subject line is purported to be true or false or otherwise conjectured; the subject is simply proposed as a topic for debate. The formal subject proposed for debate is "D's advanced meta-programming capabilities essentially makes it (D) as if it were a homoiconic language, and brings with it all the advantages of homoiconic languages." Hoping this is a nice topic for all to enjoy and to participate in. Cheers Justin Johansson
Oct 21 2010
"Ellery Newcomer" <ellery-newcomer utulsa.edu> wrote in message news:i9pnta$21d$1 digitalmars.com...Then there's the fact that the compiler doesn't represent code as strings. If the compiler exposed the AST, all this might be less of an issue. ASTs aren't a primitive type, but D's library capabilities are strong enough that you might be able to design an AST such that AST manipulation doesn't suck as much as in other c-style languages. It wouldn't be much more readable than string generation, though.I'd love to see D do that (like Nemerle does), although I think the best time to do it would be after DDMD becomes the official DMD. That would eliminate a lot of extra work since the compiler's AST-related types could be made to double as part of the user API.
Oct 21 2010
Justin Johansson <no spam.com> wrote:The formal subject proposed for debate is "D's advanced meta-programming capabilities essentially makes it (D) as if it were a homoiconic language, and brings with it all the advantages of homoiconic languages."Hardly true. While it may be possible to Greenspun together a hacky attempt at homoiconicity in D, Doing so would bring but a few of the benefits compared to a language designed from the beginning with homoiconicity in mind. That said, some of the use cases for homoiconicity may be covered by D's capabilities, and this may be closer to what you intended by the above paragraph. Certainly D does not allow one to execute arbitrary strings as if they were D code (D does however allow the execution of arbitrary strings). There certainly are ways to do that, but such could be said for any language. It would certainly be possible to create a system for manipulating ASTs at compile time in D, be they generated by library code or the compiler itself. Converting such a representation to a mixin string should prove no big challenge. However, even such a system would likely lack the elegance of lisp's macros, and I find it unlikely it would find much use. Another problem with this is that it's useless at runtime, unless an interface to the compiler is offered as a library for D. This has been discussed numerous times, and I believe most on this list agree it would a Good Thing=E2=84=A2. -- = Simen
Oct 21 2010
On 10/21/10 9:51 CDT, Justin Johansson wrote:Nothing about this subject line is purported to be true or false or otherwise conjectured; the subject is simply proposed as a topic for debate. The formal subject proposed for debate is "D's advanced meta-programming capabilities essentially makes it (D) as if it were a homoiconic language, and brings with it all the advantages of homoiconic languages." Hoping this is a nice topic for all to enjoy and to participate in. Cheers Justin JohanssonHeh, interesting. I don't think D can claim it's homoiconic in any close meaning of the term. In wake of the duck incident - if anyone on this group says so, naysayers will put it on News at 11. Andrei
Oct 21 2010