Well it would seem very messy coming from Scheme!
Scheme is a small language which achieves expressiveness by allowing you great freedom to push the language into bold new forms.
Ruby (especially with Rails which should almost be considered a separate language) is a big language where simplicity is maintained by informal convention.
Ruby has lots of muddles and messy features, good Ruby code bypasses them.
Re:Crystal Programming Language
by threatofrain on Friday September 02, 2022 @12:40AM
(#32686664)
Ruby was among the first languages I learned, back when there was the possibility of Ruby being a general purpose language and not just Rails. My joy was the result of being able to guess syntax and be right. Nowadays I value reading documentation and IDE level support, so guessing syntax is no longer a joy.
Re:Crystal Programming Language
by zelphirkalt on Friday September 02, 2022 @07:52AM
(#32689508)
When I saw it, I felt the same way (also using Scheme a lot) and I still feel it is messy. However, what I think might be the reason for it, is that it is difficult to store a lambda in Scheme including its whole environment in an object and send that over the wire somewhere else, on a different machine to run. Perhaps distinguishing between Proc, block and lambda gives Ruby a possibility to treat one of them specially, so that it can do these things easily?
Re:Crystal Programming Language
by straight-shoota on Friday September 02, 2022 @06:44AM
(#32689090)
I can gladly point out that Crystal has a much cleaned up syntax for blocks and procs (compared to Ruby): https://crystal-lang.org/reference/1.5/syntax_and_semantics/...
> Personally, I thought the muddled Proc, block, and lambda situation a mess
Why not use one (probably just block) for everything? Coming from ruby 10 years ago.
Blocks can't be stored in variables.
Yes, I don't store them in variables, but I can expand them in generators and yield them. To me, that is much more useful than storing them.
I guess those things are a compromise. Being able to use that concept easily is a joy. The implementation prioritises developer convenience over syntactic purity. It’s a shame we can’t have both, but I accept the trade-off.
Personally, I thought the muddled Proc, block, and lambda situation a mess, coming from Scheme 30 years ago to Ruby 20 years ago.