Some Smalltalk about Ruby Loops
tech.stonecharioteer.com
Some Smalltalk about Ruby Loops
1–10 of 59 posts
Re: Some Smalltalk about Ruby Loops
#2Re: Some Smalltalk about Ruby Loops
#3Author here, I'd already shared it here. https://news.ycombinator.com/item?id=45644349
Re: Some Smalltalk about Ruby Loops
#4No, it's an absolutely horrible way to "add side-effects" which, usually, is already a horrible idea in its own right.
> Asking an object to iterate over itself allows objects to develop interfaces that dictate how to iterate.
That's true in pretty much any language? And since you need to know which iteration interface you need to use, it's not that much of an advantage.
> And now, when I see: `10.times { |i| puts "i = #{i}" }` I do not see a loop anymore.
Yeah, because it's not a loop: it may or may not run that block 10 times. Seriously, when a programmer's intention is "run something 10 times", the resulting expression arguably should not be "send that something to someone who, hopefully, will execute it 10 times".
Re: Some Smalltalk about Ruby Loops
#5I don't think Ruby's "message passing" is fundamentally different from Python's "method calls". Ultimately, both languages implementations are very similar: both look up methods by name in a hash table and then call them.
IMO "message passing" is just an alternative metaphor for what Ruby does when you type `object.name`. The metaphor fits Ruby but not Python, because the languages do three things differently:
- Ruby only looks for `name` in `object.class` (and its superclasses), whereas Python first looks in `object` itself
- If Ruby finds `name`, it's guaranteed to be a method whereas in Python it could be a different kind of value
- Ruby immediately calls the method once it's found, whereas Python (generally) doesn't - instead it returns a binding to be called later
This means that in Ruby, `object.name` is always calling a method defined on `object.class`, with `self` set to `object`. That can be re-interpreted as "sending a message" to `object.class`.
In Python, `object.name` is a more general value lookup - maybe the result will be callable, maybe not.
Re: Some Smalltalk about Ruby Loops
#6[0] https://lists.squeakfoundation.org/pipermail/squeak-dev/1998...
Re: Some Smalltalk about Ruby Loops
#7So imagine my delight when I found Ruby in 2005. It took the best of Perl and the best of Smalltalk and gave it a much better syntax than either, plus it had a massively growing community.
Ruby breaks a lot of the rules for what people claim they want (or should be allowed) from a programming language these days, but for me there’s still no more joyful and easy programming language to express my ideas.
Re: Some Smalltalk about Ruby Loops
#8Like Alan Kay himself said, it wasn't about objects, but about messaging. [0] [0] https://lists.squeakfoundation.org/pipermail/squeak-dev/1998...
Re: Some Smalltalk about Ruby Loops
#9> But Python also looks up methods at runtime. Does that mean Python also does message passing? Not quite. I don't think Ruby's "message passing" is fundamentally different from Python's "method calls". Ultimately, both languages implementations are very similar: both look up methods by name in a hash table and then call them. IMO "message passing" is just an alternative metaphor for what Ruby does when you type `obj…
Re: Some Smalltalk about Ruby Loops
#10Example: Swift and Kotlin can do `Int#times` and don't need message passing to get it done.