I used to develop with Smalltalk which is totally interactive in the way that you can change code in any browser (including the debugger) and the change becomes immediately effective in the application (without restart or anything). My question is whether there any other languages that have this. I know of none except maybe Self, but Self is really dead I fear.
Java has hot code replacement which only works partially (as long as public methods don't change). JRebel makes it better. But I'm looking for a language that supports interactive development from the beginning like Smalltalk. Note, that I don't mean a REPL. A REPL is still separated from the application, so what is executed in the REPL is not immediately effective in the application as with an interactive programming language or development environment.
You say you "used to develop with Smalltalk". My response is, perhaps you should revisit that! Both the open-source versions and the commercial versions of Smalltalk have come a long way in terms of support for modern application areas and environments.
As far as I can tell, nothing available will give you the equivalent environment to Smalltalk - except Smalltalk.
But Smalltalk can also give you client-side web programming with Amber or PharoJS (both of which give you a version of the debugging you describe), server-side web programming with Seaside (and several alternatives), mobile applications (with PharoJS), software and legacy application analysis, embedded programming, stand-alone servers, as well as the more traditional desktop programming.
Pharo is perhaps the easiest place to start (and the base for PharoJS), although Squeak and CUIS have their attractions, too. If you want to look at commercial support, there is GemTalk with its transactional object database, Cincom and Instantiations
how is a REPL separate from the application?
in common lisp, if you load an application into the REPL and interact with it, every action in the REPL is immediately effective in the application. you can save your state and reload that next time you start the REPL.
related, jupyter notebooks can also be saved and executed. they support many languages. i don't know if they support an actively running application though like smalltalk and common lisp do.
finally, there is pike. the language supports reloading code at runtime. it does that by replacing the compiled classes and instantiating new object instances from the replacement classes.
pike has been used to create a platform called open-sTeam where code of existing objects can be changed at runtime similar to smalltalk. it achieves that by wrapping the actual objects in proxy objects. (normal code only interacts with proxy objects, and those point to the latest version of the real object)
i believe zope version 2 written in python is also able to replace code at runtime.
none of these alternatives do have a convenient browser and debugger like smalltalk though. you may get close with common lisp if you use emacs to control your common lisp image, and i guess zope 2 had a webinterface to manage its code.
I would stick with Smalltalk.
You may want to try the Smalltalk/X-jv branch. I call it the best unknown Smalltalk :).
Just my 2c.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With