- GNU Smalltalk
Infobox Software
name = GNU Smalltalk
caption =
developer = Paolo Bonzini
latest_release_version = 3.0.4
latest_release_date =August 10 ,2008
latest_preview_version = 3.0c
latest_preview_date =August 10 ,2008
operating_system =Unix (Linux ,Cygwin , Mac OS X/Darwin)
platform =
genre =Programming language
license = GPL + LGPL
website = [http://smalltalk.gnu.org/ http://smalltalk.gnu.org/]GNU Smalltalk is an implementation of the
Smalltalk programming language by theGNU Project .The implementation, unlike other Smalltalk environments, uses text files for program input and interprets the contents as Smalltalk code. In this way, GNU Smalltalk acts more like an interpreter rather than an environment in the traditional Smalltalk manner.
GNU Smalltalk includes bindings for many free software libraries including
SQLite ,libSDL , cairo,gettext .Examples
These examples only work on GNU Smalltalk 3.0 and later versions. Classic
Hello world example:Some basic Smalltalk code:
Collections
Constructing and using an
array :Constructing and using a hash:
Blocks and iterators
Parameter-passing a block to be a closure:
Returning closures from a method:
Using block to send info back to the caller:
Iterating over enumerations and arrays using blocks:
A method such as "inject:into:" can accept both a parameter and a block. It iterates over each member of a list, performing some function on while retaining an aggregate. This is analogous to the
foldl function infunctional programming languages . For example:On the first pass, the block receives 10 (the argument to inject) as sum, and 1 (the first element of the array) as element, This returns 11. 11 then becomes sum on the next pass, which is added to 3 to get 14. 14 is then added to 5, to finally return 19.
Blocks work with many built-in methods:
Using an enumeration and a block to square the numbers 1 to 10:
Classes
The following code defines a class named Person. By deriving from Magnitude, it automatically defines all comparison methods except one (
<
). With the addition of that one,asSortedCollection
can sort by age. Note that we can override the way the object is printed/displayed (the default is to share the programmer-print and user-display representation) by overridingprintOn:
.The above prints three names in reverse age order:
Exceptions
An exception is raised with a
halt
call:An optional message can be added to the exception; there's also
error:
which raises a different kind of exception:These are actually wrappers for the actual exception raising method,
signal>:
Exceptions are handled by
on:do:
blocks.Of course you can catch only particular exceptions (and their subclasses):
It is possible to use the exception object, which is made available to the handler clause, to exit or resume the first block:
See also
*
Smalltalk
*GNU Project External links
* [http://www.gnu.org GNU]
* [http://smalltalk.gnu.org/ GNU Smalltalk]
Wikimedia Foundation. 2010.