"uri" <f...@languages.org> wrote in message news:iks9jb$127g$1...@digitalmars.com... > Jonathan M Davis Wrote: > >> On Friday 04 March 2011 17:05:57 Simon Buerger wrote: >> > It is often said that D's grammar is easier to parse than C++, i.e. it >> > should be possible to seperate syntactic and semantic analysis, which >> > is not possible in C++ with the template-"< >" and so on. But I found >> > following example: >> > >> > The Line "a * b = c;" can be interpreted in two ways: >> > -> Declaration of variable b of type a* >> > -> (a*b) is itself a lvalue which is assigned to. >> > >> > Current D (gdc 2.051) interprets it always in the first way and yields >> > an error if the second is meant. The Workaround is simply to use >> > parens like "(a*b)=c", so it's not a real issue. But at the same time, >> > C++ (gcc 4.5) has no problem to distinguish it even without parens. >> > >> > So, is the advertising as "context-free grammar" wrong? >> >> Umm. How could a * b be assigned to? It's definitely not an lvalue. Do >> you mean >> that an overloaded opBinary!"*" is used which returns a ref? It certainly >> can't >> be done normally. > > Explain why (a*b) is lvalue in bearophile's second example. This is one of > the weird things in D. The language is too complex. It takes years to find > out about the corner cases. I wouldn't use it for anything reliable
Corner cases are certainly a PITA in certain corner cases. But simplistic languages are a PITA in most everyday cases. If I felt that simpler languages were better I'd use Brainfuck as my primary language.