On Sat, Feb 23, 2013 at 06:42:43PM +0000, Russel Winder wrote: > On Sat, 2013-02-23 at 22:24 +0400, Dmitry Olshansky wrote: > […] > > It doesn't help *reading* this verbosity. > > Very, very true. > > Sadly, D has some arcane bits that make it equally difficult to read D > code. For example: > > example.filter!isLongEnough().array() > > Why ! in one place and . in the others, it is all just calling a method > on something. [...]
One of the worst offenders in D is the is-expression. Not only are the meaning of the arguments mysterious and manifold, they also have non-obvious intents: void myGenericFunction(T,U,V)(T t, U u, V v) if (is(T) && is(typeof(T.a)) && is(U : int) && is (V _ : W[X], W, X) && is(typeof(T.expectedMember)) && is(typeof(T.expectedMember())) && is(typeof(T.expectedMember() : V)) // ^ Completely opaque unless you stare at it // long enough. ) { // Lisp fans would love the level of parentheses in this // next line: static if (isInputRange!(typeof(T.expectedMember()))) dotDotDotMagic(t,u,v); else moreDotDotDotMagic(t,u,v); } T -- "Holy war is an oxymoron." -- Lazarus Long