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