Blogs
Fun with Cairo and libsdl
Changing the variable search order
GST, and Smalltalk in general, has many more places in which to search for variables than most programming systems. Besides instance variables, in-class and inherited, the compiler has to search a number of pools:
- All inherited namespaces and their superspaces
- All inherited class pools
- All inherited shared pools
Traditionally, GST's search order has been somewhat idiosyncratic. This isn't a problem, of course, until you start making name clashes.
Seaside development with GNU Smalltalk
The next release of GNU Smalltalk will include support for Seaside. This blog post is a short tutorial, which will show how to make your first Seaside component.
To follow this tutorial you need GNU Smalltalk 3.0a (which will be available from ftp://alpha.gnu.org/gnu/smalltalk/smalltalk-3.0a.tar.gz later today) or a later version.
One of the new features in 3.0a and later is the ability to run an image in the background and control it from the shell. For example, you can try these commands:
$ gst-remote --daemon $ gst-remote --eval '100 factorial' $ gst-remote --kill
Sake = Rake for Smalltalk
A while ago I tried looking at how an object model for a Rake-tool would look like in Smalltalk. Here are the somewhat polished results of that experiment.
One area where Ruby fares definitely better than Smalltalk is in creating DSLs. This is mostly because of the "implied self" of Ruby's syntax, which however is also a major source of complication in parsing Ruby. Therefore, the Sake object model is also an experiment in using class extensions creatively to implement Smalltalk DSLs.
Swazoo runs on GST!
That's it! Swazoo runs on GNU Smalltalk! Code is not yet committed, but it works and passes the entire testsuite.
This script for example will start a web server on http://localhost:8888/
PackageLoader fileInPackage: 'Swazoo'.
Swazoo.Resource subclass: MyResource [
answerTo: aRequest [
| response |
response := Swazoo.HTTPResponse ok.
response entity: '<h1>Hello World!</h1>'.
^response
]
]
site := Swazoo.Site new name: 'test'. "name is just for convenience"
site host: 'localhost' ip: '127.0.0.1' port: 8888.
