Pharo in the Browser with WebAssembly
massimo-nocentini.github.io
massimo-nocentini.github.io
Trying out various Smalltalk-family systems in recent years showed the advantages of implementing the entire system in one language and running it in one image. There's a refreshing coherence and predictability to everything, and pervasive simplicity instead of fractal complexity.
You can browse the entire codebase in a single window - language/compiler, math operations (except for the base primitives I believe), data structures, graphics, window system, all nicely organized. Methods, even critical ones, are mostly small, straightforward, and cruft-free. Many are just a line or two.
Smalltalk gives the developer immense power. You work directly "in the code"; your changes are live instantly. You can trivially modify the system itself - just go there and start typing. All in the same browser window. You can easily look inside any running program, change its data and even its code, and just keep going. Even now it feels futuristic.
You get powerful graphics and a window system out of the box instead of the usual story where you select OpenGL/Vulkan/GUI/DOM libraries and configure tools like make/rpm/docker/pip/npm. That's probably the most "science fiction-y" aspect by far.
In short, this was the "Jetsons" future that seemed possible back when I was getting started. The future we actually got, of course, is far less elegant and unified, and far more messy and practical. That's probably for the best. But I still love Smalltalk.
[0] https://archive.org/details/byte-magazine-1981-08
[1] https://archive.org/details/byte-magazine-1985-05/page/155 (At the time I was sad because we didn't have the extra memory it needed. Now I'm more impressed that it was even possible.)
I really _really_ like environments where rapid and immediate iteration is possible, especially for any project with any artistry or exploration in its construction. One thing is that (in some cases) you see intermediate, emergent, or unintended results you'd not have seen otherwise.
Although not a particularly interesting unintended result, a logic problem (iirc) had the Minesweeper expand happen with each action (i.e. propagating cleared cells with each step rather than in an instant).
So I assume this is the byte code interpreter compiled with Emscriptem? Didn’t Squeak have a similar try it out page?
I would assume there’s no attempt at Jitting or pre-compiling some of the image code, which would be a feat given Smalltalk dynamic nature and webassembly limited execution model.
I was hopping to have something like this to play with. How can you build the code?
Much as I admire Wirth and his languages, and I understand the uses and necessity of a structured programming, live-programming is the better and more creative approach not least because it feels like writing an essay-- you start and let your ideas take you where they would, instead of forcing yourself to seek your ideas out of your subconscious one by one.
It is like telling someone that "C went into UNIX" after learning it using Code::Blocks on Windows.
Did a quick check in their manual (https://books.pharo.org/pharo-by-example9/pdf/2022-03-26-ind...) and on page 9 it confirms as much.
Use with caution.
Several of my friends love it.