Comment by vinceguidry
3 months ago
Ruby isn't Smalltalk. The only thing Ruby inherited from it is the pure object model. Everything else was cribbed from other languages. Ruby doesn't have what makes Smalltalk great, the image-based development model.
I'm making my own text editor in Ruby now, as I'm wishing for a more Smalltalk-like experience with it. There's just so much missing. Ruby has the reflective capability to enjoy a Smalltalk-like IDE, but Rails took over and drove Ruby in that direction long before anyone could cook one up.
Which is a shame, IDEs that aren't Smalltalk / Lisp haven't graduated past the need for static analysis despite having 50 years to do so. Now it's the red-headed stepchild of languages due to no fault of its own.
It wouldn't be too hard to code a Smalltalk-like IDE for Ruby (compared to building a normal IDE), but the Ruby files would have to be structured in a specific way. It would not be possible to edit them using another IDE or text editor, unless you preserve the structure, but it would work well with Git.
Another issue is that the developer would have to use two IDE's, one for Ruby and one for the rest.
Everytime you access a class in the IDE, it could read the class's Ruby file into memory and split it into protocols (a protocol could just be a comment above the method name in the output Ruby file) and methods so that you can visualize them one by one the Smalltalk way.
Or - I don't recommend it but - if you really want the Smalltalk experience then: - your code would be running in the same Ruby process as the IDE - any code change would be made in the live running process - store code in a database instead of files - version control from the database instead of git
Yeah, I'm looking at having my text editor handle much of the formatting of my Ruby files, I've already got a serviceable indenter. My text editor will eventually be able to handle more than one language, so I won't need any more IDEs, and I can handle other languages the usual way, with language servers. I've thought about keeping the work source in the same process as the editor, but I think it would be better to have a separate process like emacs does with robe. Then I could reload the entire system every time I save a file without having to worry about editor state.
As someone that used Smalltalk via Smalltalk/V back in the day, I would nonetheles vouch that dev environments with direct connection to Smalltalk, like Java and .NET, are the closest we get to it in mainstream languages.