Walter Bright:

>The problem is D already has a lot of syntax. More syntax just makes the 
>language more burdensome after a certain point, even if in isolation it's a 
>good idea.<

This is an interesting topic in general (the following are general notes, not 
specific of the complement to $). I agree that what can be good in isolation 
can be less good for the whole syntax ecology of a language.

Some times adding a syntax reduces the language complexity for the programmer. 
When you have added struct constructors to D2 you have removed one special 
case, making classes and structs more uniform, removing one thing the 
programmer/manual has to remember.

Some other times a syntax can mean an about net zero complexity added, because 
it increases some complexity but reduces some other complexity in the language. 
For example named function arguments add a little complexity to the language, 
but they are very easy to learn and if used wisely they can make the code (at 
the calling point of functions) more readable, and reduce mistakes caused by 
wrong arguments or wrong argument order. So I see them as good.

There are languages like the Scheme family that have very little amount of 
syntax. And other languages as C# and C++ that have tons of syntax. There was a 
time Lisp when was common, but today in practice quite syntax-rich languages 
seem to have "won". D too is syntax-rich.

So many things show me that programmers are able to use/learn good amounts of 
syntax (especially when they already know a language with a similar syntax), so 
syntax is not an evil thing. Yet, today C++ usage is decreasing, maybe even 
quickly. I think the cause is that not all syntax is created equal. 

This is the C++ syntax for an abstract function:
virtual int foo() = 0;
The same in D:
abstract int foo();

Both have a syntax to represent this, but the D syntax is better, because it's 
specific, it's not used for other purposes, and because it uses a readable word 
to denote it, instead of of arbitrary generic symbols.

So I think just saying "lot of syntax" as you have done is not meaningful 
enough. In my opinion programmers are able to learn and use lot of syntax 
(maybe even more than the amount of syntax currently present in D) if such 
syntax is:
- Readable. So for example it uses a English word (example: abstract), or it's 
common in normal matematics, or it's another example of the same syntax already 
present in another part of the language (example: tuple slicing syntax is the 
same as array slicing syntax). This makes it easy to remember, easy/quick to 
read, and unambiguous. If a syntax is a bit wordy this is often not a problem 
in a modern language used with a modern monitor (so I don't care if 'abstract' 
is several chars long and a symbol like ^? can be used for the same purpose 
saving few chars. It's not a true gain for the programmer).
- Specific. Using the same syntax for several different or subtly different 
purposes in different parts of the language is bad. A specific syntax is 
something that can't be confused with anything else in the language, it's used 
for just one purpose and does it well.
- Safe. There is a natural enough way to use it, and the compiler catches all 
improper usages of it. There are no subtly wrong usages that do something very 
bad in the program. (This is why I have asked for the compiler to enforce the 
presence in the code of only the correct symbol strings in the new D2 operator 
overloading regime. It's too much easy to write something wrong, in my opinion).

Bye,
bearophile

Reply via email to