D and the world
Walter Bright
newshound1 at digitalmars.com
Tue Apr 24 15:26:48 PDT 2007
Don Clugston wrote:
> I think Nemerle will suffer from this. IMHO, being able to define 'for'
> in the language itself, has no benefit in practice; the set of useful
> control constructs is very well known. If it's useful to everyone, it
> should be rigidly controlled by the language; otherwise you get
> confusion and incompatibility.
> I suspect that in D, metaprogramming will be used almost exclusively for
> domain-specific languages.
I agree that too much flexibility in a language is a bad thing. Imagine
if you could redefine everything in D. Taken to the limit, that means
that every random sequence of characters could be a valid program! This
is just not useful.
C++ suffers from this problem somewhat with the preprocessor. The
problem is recognized, and C++ programs that do things like:
#define BEGIN {
#define END }
are frowned upon.
Back in the 80's when people wrote a lot of assembler, MASM had a fairly
powerful preprocessor. Lots of people essentially invented their own
languages, that preprocessed down to assembler. Microsoft shipped one of
these as an include file with MASM.
Lots of people found it impenetrable. A friend of mine had a lot of
difficulty with it, and finally resolved the problems by assembling the
code with MASM, running OBJ2ASM on the result, and then using OBJ2ASM's
output as his new source code. *Then* he understood what was going on <g>.
A language needs to have common reference points, some reliable
touchstones that people can look at and say "I understand that". It's
why D, for example, has the debug statements. Sure, you can do the same
thing with version and other constructs. But if you've managed C++ code
for a while, everybody comes up with a different way of doing #ifdef
DEBUG, all different, but all functionally about the same. It just
causes problems when combining projects. So by wiring a debug statement
in to the compiler, one encourages a common way of doing the common task.
The same goes for unit tests.
More information about the Digitalmars-d
mailing list