Exactly!
Good DSLs are charactetised by semantic expressiveness and readability.
DSLs are either external (custom, dedicated parser) or internal (relying
on the parse of the underlying programming language). Programming
languages that enforces too much structure, lead to less readable DSLs.
That is why languages such as Groovy and Ruby are excellent for DSLs,
but C++, Java & C# are not.
On 02/12/2015 10:16, Cédric Champeau wrote:
I don't think any discussion that is centered around this topic of
being possible to put the closure out of the parens will ever bring
anything. Groovy had it for a long time, and it's one of the main
things that make it suitable for human readable DSLs. Just compare the
readability of builders. If we had to write:
html({
head({ title('Damn ugly' )})
body({
div([class:'main'], { p('foo') })
})
})
instead of what we can do today:
html {
head { title 'Groovy' }
body {
div(class: 'main') { p 'foo' }
}
}
No doubt I would never have chosen Groovy to build DSLs.
2015-12-02 1:14 GMT+01:00 alessio <aless...@gmail.com
<mailto:aless...@gmail.com>>:
>
> yes
Thanks.
>
> the problem simply is that while(x, {doSomething()}) looks quite
ugly ;)
It absolutely does, agreed (but then all these inlined functions do in
most languages :) ).
Nonetheless, while visually maybe not appealing, I'd argue it makes
semantically more sense to have it in that place than "suddenly"
outside of the function call.
And yes, I understood that the regular way is still possible, my
"complaint" was rather about this additional alternative, which really
left me staring at the screen for a good while today (possibly
similarly as when I discovered Angular's insanity of using the
argument names for dependency injection - different subject though).
Anyhow, thanks for having taken the time to explain the details.
>
> if ultimate means last argument, then yes ;)
It does :)
Thanks for the clarification.
So, just for yet another better understanding, whenever there is a
code block (-> closure) after a function call, it automatically gets
appended as additional argument?
--
Schalk W. Cronjé
Twitter / Ello / Toeter : @ysb33r