Is metaprogramming useful?

Brad Anderson brad at dsource.org
Wed Nov 29 13:28:29 PST 2006


Steve Horne wrote:
> On Wed, 29 Nov 2006 14:11:01 -0500, Brad Anderson <brad at dsource.org>
> wrote:
> 
>> Steve Horne wrote:
>>> On Wed, 29 Nov 2006 11:47:10 -0500, Brad Anderson <brad at dsource.org>
>>> wrote:
>>>
>>>> I don't think this is the primary reason.  As mentioned before, syntax is a
>>>> part of it, but so is the total power given to the programmer.  This power
>>>> leads to a lack of standard or cohesive libs, b/c it's so easy to make it
>>>> exactly the way you want it.  I imagine that if some of the D power users
>>>> wrapped themselves in Lisp for a while, they'd be able to do for themselves
>>>> what they beg Walter to do for them in D.
>>> Not really.
>>>
>>> There are things you just can't do with Scheme macros. Associativity
>>> and precedence, for instance. This means that if you want to do these
>>> things, you have to go the Von Neumann route - treat code as data and
>>> manipulate it at compile time using Scheme functions.
>> I'm not following.  Do you have definitions or examples of these?  I did find
>> this...
> 
> Sorry, I'm being stupid. On reflection, you're asking for examples of
> things you can't do with Scheme macros.
> 
> Well, it's hard to provide examples of things that can't be done
> beyond listing them. Disproof by example is much stronger than proof
> by example. If your link gives examples of precedence and
> associativity using macros, well, that just makes me twice stupid.
> 
> The claim about associativity and precedence, though, just fell out of
> my reading of the Scheme manual. At the time, I could see no way to do
> it.
> 
> I'm aware that it is possible to build them in by creating an
> unambiguous set of BNF rules for a grammar (as opposed to the more
> normal approach of using disambiguating rules) but I couldn't see a
> way to do either. I had the distinct impression that the matching is
> always from left to right.
> 
> Based on that, you can write (1 + 2 * 3) if you want, but the result
> will be 9, not 7.
> 

in a Lisp-like language, using prefix notation, this is:

(+ 1 (* 2 3)) => 7

or

(* (+ 1 2) 3) => 9

> On a quick scan through that, there doesn't seem to be anything to say
> that Scheme macros can do associativity and precedence. That's fine by
> me, as I don't feel quite as stupid as I did a minute ago  ;-)

There's no need for precedence, because it's always explicit.

This thing is a dead horse.  I suspect we are confusing each other, as you
say.  You should look at Common Lisp a bit, esp. the link I posted to Peter
Seibel's book.  Even a brief read may help you understand a bit of what I'm
saying about metaprogramming.

BA



More information about the Digitalmars-d mailing list