Slate and Agora; building the Slate VM

Brian Rice water at tunes.org
Tue Dec 28 08:37:47 PST 2004


On Dec 28, 2004, at 12:07 AM, Shaping wrote:

> Greetings:
>
> I seek a comparison of the relative merits of Slate and Agora.  Have 
> any of you used Agora?  I don't think it has been developed actively 
> since 1997-98.

I don't think I've thought about Agora (see 
http://prog.vub.ac.be/research/agora/ ) since then. We do have 
Self-style delegation, although more and more we are abstracting over 
it, since Self's style is pretty much unsound. Our gradual goal is to 
shape it into a system of behavior composition (think of safe mixin 
operators). More importantly, Slate has object-based multiple dispatch, 
which changes the character of the language a bit, but makes it more 
powerful in return.

Slate also has a lot of very powerful core libraries, more powerful 
than Smalltalk's or Self's for collections and streams, for example. 
Much of the reason of developing this new language was so that many 
more powerful infrastructure libraries could be built, to allow a kind 
of continuous and propagating elimination of design complexity. So far 
this has exceeded our expectations, so much so that we won't go back to 
those old languages.

> Several years ago I developed a passion for Agora, but was not able to 
> make use of it at the time.  Recently I've begun studying it again.  
> There are three versions available, Agora94 on VW Smalltalk, Agora96, 
> a C++ app, and Agora98 in Java.  I'm experimenting with each of these 
> now.

I stopped messing around with it a few years ago once I decided on 
Slate features (which I had to revise a few times before it became 
usable, admittedly).

> Having developed almost exclusively in Smalltalk (VW mostly) for the 
> last decade, I lean toward Agora94.  I want something I can carry 
> forward easily with browsing tools I know, but I'm willing to consider 
> new directions.  About when will there be a basic GUI framework for 
> Slate?

It already exists, but is not entirely complete. See src/ui/* in the 
Slate distribution. It's a hybrid of the Morphic and CLIM frameworks - 
design documents are at http://slate.tunes.org/doc/ui/ . There are 
backends (abstractions over portable subsets of various bindings, could 
also include PostScript and HTML) in progress for X11 and SDL, although 
they aren't complete. There's also code for the console which is just 
now being developed and may be a backend soon.

Now, the question you /really/ want answered is when a browsing 
framework will exist within this. I have already intended to port the 
OmniBrowser framework from Squeak, but right now my main concern is to 
make Slate a safely-concurrent language, using the influence of E (see 
http://erights.org/ ). Note: it's a limit right now that Slate is 
single-threaded.

Right now the development focusses are to enhance the basic REPL and 
debugger and in-image editing capabilities, which all the basic 
facilities exist for. And our resident systems programmer is working on 
the direct-to-native dynamic compiler framework (see 
src/mobius/optimizer/ although there is a super-simple PIC-using 
compiler which might see the light of day much sooner).

> I'm concerned mostly about performance and expression.  Footprint 
> matters least to me.  I do a lot of math-modeling and 3D graphics.  I 
> have a large, novel, OpenGL framework I spent 2.5 years developing in 
> VW, and performance-tuning for both run-time speed and develop-time 
> speed (clarity), but not size (it's bloated!), and it's giving me a 
> headache as I try to refactor it for space-efficiency, while 
> maintaining the same high level of expression/clarity I'm used to.  I 
> have a minimal, consistent, natural-language grammar I've evolved and 
> used with moderate success in Smalltalk for many years.  I want to 
> implement that grammar more completely, and I think that Agora/Slate 
> will let me do so.

Slate is strictly more expressive than Agora, and the syntax is more 
flexible, so I don't see the point of an Agora layer atop it if that is 
what you mean. However, if it convinces you of this, or informs you on 
how to extend Slate with whatever Agora features remain outstanding, 
then perhaps it is a worthwhile exercise. ;)

Alternatively, the OpenGL experience would be interesting for the guys 
working on UI backends, since OpenGL (well, significantly, 3d shapes 
and embedding) is a valid backend. Please look at the UI code if the 
interest tickles you, and feel free to ask more questions.

> Regarding both languages, I'm concerned about browser support for 
> organizing, finding, and viewing prototypes, their evolution, and the 
> mixins themselves.  I don't have enough experience with either to 
> fully appreciate what is required, but I'm fairly
> certain that working with large nested blocks of Agora code will 
> become awkward, eventually unproductive, and likely cause a 
> disconnection and return to Smalltalk.

Hopefully you've tried Self out, at least. It has a decidedly 
anti-browser focus, forcing everything into direct representation 
exploration, but that's because Self is a /demo/ of these ideas, and 
not anything serious. However, it does demonstrate many (but by no 
means all!) of the basic elements of a prototype-oriented development 
system.

> Right now I'm trying to build the vm with VC++ 6.0. I've seen problems 
> with this approach in the archives, but I thought I'd try, anyway.  
> I'm getting "long followed by long" errors, for starters.  Is there 
> any easy way to take all of the needed .c and .h files from the 
> provided directory tree, copy them to the top-level Slate 0.3 
> directory, create a project (.dsp) for all of these, tweak the 
> compiler options, use __int64 for "long long", and get this to 
> compile?  Has someone already worked this out cleanly on Windows XP 
> with VC++?  I'm very Windows-centric (not by choice), and haven't used 
> Linux for development yet, unfortunately.

Under src/mobius/vm/platforms/windows/ there is a .sln and .vcproj but 
no .dsp. Please see if these work for you. If not, adjust them or do 
what you need, and send us what does work and we will incorporate them. 
Isn't 6.0 a really old version?

> Or should I install Cygwin 1.5.12-1 (the latest)?  This was suggested 
> in the installation notes, and GCC seems to produce a faster .exe.  Is 
> this consistently true?

You should only need MinGW (see http://www.mingw.org/ ), which is a 
much lighter setup, if you just need the GCC support.

--
Brian T. Rice
LOGOS Research and Development
http://tunes.org/~water/




More information about the Slate mailing list