[squeak-dev] Spry update: Spry goes visual!
goran at krampe.se
Thu Sep 8 08:21:38 UTC 2016
Just wanted to give a quick update on where I am (<hint>only me
still</hint>) on the Spry project. I am taking the liberty to post on
squeak-dev since I hope Squeakers find it interesting, especially the
small movie below :) I also have some ideas on Squeak<->Spry interop, if
anyone is interested - catch me on chat.
I am right now trying to nail down a few language level things, and
finish the manual. The manual is up on the site and is fairly complete
now (although needs a few rounds of polish):
...along with other things, like an article about "Smalltalk vs Spry"
which I have only just started:
But... the most interesting part to tell about is probably the fact that
Spry is taking its first steps with a user interface! Unless you count
the command line REPL Spry has had for a long time. Or the "spry REPL in
a browser page" that you can also find on the website (that is actually
the real Spry VM compiled to js).
A short 2 min movie I made is here:
I hope you found that movie intriguing!
Because it shows a truly *live* experience, just like traditional
Smalltalks offer. The code we type in is parsed and evaluated live and
the IDE itself *is written in Spry* (not Nim). This makes it just as
malleable as a Smalltalk environment.
To make this I have selected the excellent C library called libui:
There is already a wrapper in Nim (auto generated) for libui which made
it easy for me to create a Spry VM module with primitives using it, the
primitives and node types so far are here:
The OO mechanism including polymorphism in Spry is still being worked on
- so naming for some of those things are needlessly messy (to make each
unique), but apart from that it's very straight forward.
NOTE: There is also a Nim wxWidgets wrapper, a gtk2 wrapper and a gtk3
wrapper. But... I wanted native on all 3 desktops and libui looks MUCH
easier and lightweight than wx.
With that VM module included, we can finally look at the code for the
IDE shown in the movie:
That's 57 lines of Spry code! ...and a big part is constructing the menu
which the movie doesn't even show.
Also note how I attach Spry code blocks as handlers for the click
events, menu items etc, for example:
So what we have are Spry code blocks (they are closures) that gets run
as callbacks called from the C library. Those of you with a bit of
history knows this has been a truly sore part of Squeak through the years.
And yes, this means we run in libui's event loop which we enter at the end:
And finally... this runs *natively* in Windows, OSX and Linux (Gtk3).
The movie was recorded on my Ubuntu so its gtk3 that you see. I have
tried it on OSX too, looks great!
PS. I am on #squeak and #sprylang on freenode, but also on gitter which
I kinda prefer: http://gitter.im/gokr/spry
More information about the Squeak-dev