There is quite a difference in the raw
amount of code required to do the exact same job. In the Java example,
the code must repeat itself numerous times to ensure the compiler
understands and does not flag a type error.
The Smalltalk example does not ask
for an Iterator or implement any looping code as in the Java example
since Smalltalk uses internal itera-tors. Because Smalltalk allows
the modification or inheritance of any class within an image, it is
much easier to put functionality where it belongs instead of orphaning
such code where needed.
Another common situation is dealing
with primitive data types, items such as Integer, Double, or Byte.
In Java, there are two type systems to deal with, as this example
int j = 100;
double d = 3.14568;
Map aMap = (Map)new HashMap();
aMap.put( "AnInteger", new Integer( j ) );
aMap.put( "ADouble", new Double( d ) );
Notice that, to place the primitive
values into an object collection, they had to box them in wrapper
Let us now try to take them out and
add them together:
Double aDouble = (Double)aMap.
get( "ADouble" );
Integer anInteger = (Integer)aMap.get(
double d = aDouble.doubleValue();
double i = anInteger.doubleValue();
System.out.println( "d + i = " + (d + i) );
This process of constantly boxing
and un-boxing primitive data types adds significant code, development
effort, and increase the possibility of software defects. Notice that
the Double and Integer classes do not have any methods to perform
arithmetic, only to hold onto a primitive data types and convert between
Here is the same example in
|| aDictionary |
|aDictionary := Dictionary new.
|aDictionary at: 'AnInteger' put:
|aDictionary at: 'ADouble' put:
||show: 'AnInteger + ADouble = ';
||show: ((aDictionary at: 'AnInteger')
||(aDictionary at: 'ADouble'))
Obviously, the Smalltalk example
uses less code and handles types in a more homogenous fashion. Notice
that no explicit conversion code is required to add the SmallInteger
to the Double.
Another Cup of Espresso?
Lets briefly discuss the most popular Smalltalk products on the
market today and the niche I perceive each one to fill. These categoriza-tions
are my own and not intend to be rigid. Every Smalltalk on the market
today is full-featured and capable of developing almost any application
This is the granddaddy of all Smalltalks descending directly from
Xerox Parc. It has a huge class library covering desktop, web, network,
and distributed programming such as CORBA. It is cross-platform
at the binary level and uses an emulated user-interface, so it behaves
consistently on each platform it supports.
VisualWorks is the most mature, but also the most legacy ridden,
Smalltalk on the market. Cincom has done an excellent job moving
it into the future with its own multi-user Software Configuration
Management (SCM) tool called StORE. The current release, version
7 incorporates the new refactoring browser from Refactory, Inc.
This tool further improves programmer productivity and enables many
automated methods for managing Smalltalk code, including a Lint-type
tool that makes suggestions on code reorganization and possible
Cincom's pricing models are varied and fair. If the goal is developing
cross-platform Smalltalk solutions in a corporate environment then
this is the best bet. While it can develop desktop applications,
VisualWorks lack some more modern GUI features found in other Smalltalks
that more tightly integrate with Windows.
VisualWorks enjoys an extremely active programming community with
developers' constantly creating additional class libraries and help
for the entire Smalltalk community. Cincom offers another Smalltalk
called ObjectStudio, originally called Enfin, which is more tightly
integrated with Windows and delivers a robust class library. Cincom
is working to merge the technology between ObjectStudio and VisualWorks.
VisualAge for Smalltalk (VAST)
VAST is IBM's Smalltalk, containing a tremendous class library that
compares favorably with VisualWorks' class library. VAST has several
IBM specific class libraries that allow quick integration with CICS,
MVS, AS/400, and other IBM specific technologies. IBM offers a SCM
called ENVY, which is easy to install and use in a team environment.