groovy-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Schalk Cronjé <ysb...@gmail.com>
Subject Re: "External" closures, why?
Date Wed, 02 Dec 2015 08:47:47 GMT
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 <alessino@gmail.com 
> <mailto:alessino@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


Mime
View raw message