Bistro Release Notes

Version Date Description
3.6 14 October 2010
  • Replaced the build batch files with Ant build.xml.
  • Upgraded Bistro to use ANTLR v3.2. The Bistro grammars and compiler classes have been migrated to v3.2.
  • Upgraded the Bistro compiler to use JDK 1.6. This allows the Bistro java compiler invocation to change from a shell command to usage of the integrated JDK compiler class. As a result, the Bistro compiler now requires and depends on the JDK rather than the JRE.

3.5 21 April 2002
  • Added IdentityDictionary and IdentitySet to the smalltalk.collection package.
  • Replaced Hashtable with HashMap as the default primitive contents of Dictionary.
  • The Bistro compiler now supports two new assertion idioms.

3.4 10 December 2000
  • Both OrderedCollection and SortedCollection now wrap Lists instead of Vectors. This allows for more general interaction between these Bistro collections and primitive Java code. The support for Lists is similar to that which Dictionary already provides for Maps.
  • The Bistro compiler now supports the wrapped annotation for methods. The Bistro compiler will automatically generate an appropriate wrapper method for a wrapped method if it needs one. See the Number class in the smalltalk.magnitude package for examples of its use. Wrapper methods have arguments with erased types. They are used for dynamic method resolution, i.e., to support the perform: protocols.
  • The SmallInteger class now provides a range of flyweight instances. The default range includes 16 bits of precision. However, you can customize the range using the system property named smalltalk.flyweight.integers. Flyweights improve SmallInteger math about 10% by reducing instance creation.
  • As a result of the above enhancement, all update operators (+=, -=, *=, /=) have been removed from the SmallInteger class and moved into a new class named FastInteger (derived from SmallInteger). FastInteger math is about 20% faster than operations on slow SmallIntegers - i.e., those that are not flyweights.
  • Methods with result type annotations were losing their comments. This Bistro compiler defect has been corrected.
  • The Bistro compiler now correctly translates the idiom (self super: x) now generates super( x ) as intended.

3.3 8 November 2000
  • IMPORTANT NOTE: All your Bistro classes must be recompiled with the release 3.3 compiler as a result of the following change.
  • The Bistro compiler no longer uses primitive.$nil(), but uses primitive.literalNil() instead for accessing the singleton nil instance. A similar change also applies to the singleton true and false instances.
  • The PrimitiveFactory, MethodExit, MethodCache, and exception classes in the behavior package have been recoded as Bistro classes. Thus, they are now compiled normally during a rebuild of the behavior package.
  • Bistro now allows the metaclass: section to be optional. This allows programmers to define ordinary Java classes without requiring metaclasses. However, a new class derived from a base class that has a metaclass will automatically be given a metaclass if none is specified explicitly. This prevents the metaclass inheritance chain from being broken accidentally.
  • The Bistro compiler has been upgraded to use ANTLR 2.7.1. This allowed the elimination of the customized classes the compiler used to track column numbers for error reporting.
  • All previously deprecated methods have been removed from the abstract syntax tree classes.
  • The SimpleHanoi example class has been improved to more accurately reflect the performance of dynamic method resolution versus direct method invocation.

3.2 28 October 2000
  • The Bistro compiler message optimization has been improved. When it can resolve message receiver types, it now generates direct method invocations. See the class smalltalk.example.TestSends for some examples.
  • The Bistro compiler now supports a new idiom (asPrimitive) for optimizing the unwrapping of the following kinds of literal constants: Boolean, Character, SmallInteger, Float, String, Symbol.
  • The Bistro language now supports the use of certain structured names, such as and System.out.
  • The smalltalk.magnitude.Fixed class now supports conversion to the Java™ java.math.BigDecimal class.
  • A few cosmetic defects in the Bistro compiler have been corrected.

3.1 17 September 2000
  • The ANSI Smalltalk protocols have been defined as types in the org.ansi.smalltalk package.
  • A number of missing ANSI methods have been added to the class library. These were discovered during the development of the org.ansi.smalltalk package.
  • The Bistro compiler code generator was redesigned using the Visitor pattern.
  • The new formatting of the Java™ code generated by the Bistro compiler has greatly improved the readability of the code.
  • The batch files for building the classes libraries were revised to use and update the bistro.jar.

3.0 20 July 2000
  • The Bistro class files have been archived. The archive file bistro.jar has been added to the bistro\lib folder and the class files have been eliminated from the source release archive (
  • The build and test batches have been updated to use the new bistro.jar file in the bistro\lib folder.
  • The Bistro compiler now issues a warning when it cannot resolve a reference to a class name or an interface name. This situation usually indicates that an import is missing. If the warning reflects such a coding error and the problem is not corrected, a NullPointerException will usually be thrown at runtime.
  • By popular demand, exclamation marks (!) have been deprecated in favor of vertical bars (|) for block signature delimiters. This makes the syntax of Bistro blocks more similar to that of Smalltalk blocks. The Bistro compiler will still continue to support exclamation marks for a few releases, but it is recommended that Bistro developers replace them with vertical bars in their code.
  • The Smalltalk to Bistro conversion utility has been updated to reflect the above change. It now generates code with vertical bars instead of exclamation marks.
  • Also, the syntax used to declare anonymous inner classes has changed. Instead of being a syntactic variation of a block, the compiler now recognizes a new message idiom (asNew:) and maps it to an anonymous inner class in the generated Java code. Here's an example code template for the new idiom: ( SomeInterface asNew: [ "... class members ..." ] ). See the TestApplet for an example of the new idiom used in the context of a button event handler.
  • IMPORTANT NOTE: Any Bistro classes that use the old anonymous inner class idiom must be changed and recompiled with the release 3.0 compiler as a result of the above change.

2.9 6 April 2000
  • IMPORTANT NOTE: All your Bistro classes must be recompiled with the release 2.9 compiler to correct the following defect.
  • Fixed a dynamic method resolution problem related to selector mapping. Accessor methods were not being handled correctly in the method cache. It was confusing getters and setters.
  • Added a variation of Kent Beck's SUnit test framework as the smalltalk.test package.
  • Included an interface for running tests similar to SUnit (see test.tests.bat).
  • Added class hierarchy access methods to the behavior classes.
  • Fixed minor compiler defects related to some Java reserved words.
  • Fixed some minor defects in the SequenceableCollection enumeration methods.

2.8 20 March 2000
  • Added TestExceptions to the smalltalk.example package.
  • Added ANSI exception classes and exception handling, including support for the standard exception block idiom [ "..." ] on: Exception do: [ "..." ].
  • Added the Message and MessageSend classes, as well the MessageNotUnderstood exception class. Unresolvable dynamic messages now signal MessageNotUnderstood.
  • Added the ZeroDivide exception class. Attempts to divide by zero now signal ZeroDivide.
  • Added array factory methods to PrimitiveFactory.
  • Fixed a minor compiler defect related to the block idiom [ "..." ] ensure: [ "..." ]. Final blocks are now force to return void so they don't interfere with exceptions thrown by their protected blocks.

2.7 25 February 2000
  • IMPORTANT NOTE: All your Bistro classes must be recompiled with the release 2.7 compiler to correct the following defect.
  • Fixed a defect in both the compiler and the runtime system. Method exits were sometimes being dropped because they did not identify the method scope they exit.
  • The MethodExit class now takes the name of the method to be exited as an argument in its constructor. This is used to determine whether the MethodExit returns its exitValue or the MethodExit is rethrown when caught.
  • See the letter filtering in smalltalk.example.TestStreams. The vowels were not being filtered out of the test alphabet because of this defect.

2.6 24 February 2000
  • Completed support for a throws: clause on block signatures. See the smalltalk.example.TestStreams for an example. Also, see the new page about exceptions.
  • Fixed a minor compiler defect - code for a statement which contained only a primary was not being generated correctly.

2.5 15 February 2000
  • Completed integration of the compiler. The compiler now generates class files by invoking javac. The compiler now makes three passes: 1) parse all Bistro files, 2) write all Java™ files, 3) compile all the generated Java™ files into class files.
  • Changed the compiler command interface to specify an output basepath for generated class files.
  • Changed the package build batches to match the new compiler interface.
  • Fixed a compilation dependency problem. The compiler now orders code generation based on dependencies between class files.
  • Fixed inherited instance variables. The compiler now resolves instance variables inherited from superclasses more efficiently when compiling a class hierarchy.

2.4 8 January 2000
  • IMPORTANT NOTE: This release completely replaces any prior release. Do not attempt to use this release in conjunction with any prior release. Do not overwrite a prior release. Start over with a fresh working directory.
  • Changed the metaclass naming convention to make the names more readable. All metaclasses now have a suffix of .mClass instead of reiterating the class name.
  • Rebuilt API documentation with class usage pages.
  • Added ElementaryInputStream and ElementaryOutputStream to the package. These are Smalltalk compatible wrappers for Java™ Readers and Streams. See the smalltalk.example.TestStreams class for an example of their usage.
  • Fixed some minor defects in LongInteger.
  • Updated the software license to conform with Open Source guidelines.

2.3 2 January 2000
  • Added TestServlet to the smalltalk.example package.
  • Added LargeInteger and LongInteger classes to the smalltalk.magnitude package.
  • Added thread and synchronization support - i.e., [ "..." ] fork. See the smalltalk.example.TestThreads class for example usage.
  • Added support for a throws: clause on method signatures. See the smalltalk.example.TestServlet for an example.
  • Removed extraneous (atrophied) literal array classes from the compiler.
  • Fixed the resolution of inherited instance variables in the compiler.
  • Fixed the references to inherited instance variables from blocks and their inner classes.
  • Fixed references to primitive, the factory in class smalltalk.behavior.Object.
  • Fixed the implementation of instantiation using the new message.
  • Fixed some other minor coding errors in the compiler.

2.2 7 November 1999
  • Improved the error reporting provided by the Bistro compiler. It now reports the location of the error in the source code and indicates the column position on the source line at which the error was detected.
  • Added fixed point numbers to the compiler and the library.
  • Generalized the arithmetic in the number classes to reduce the number of methods.
  • Added the smalltalk.Smalltalk runtime class to fix a compiler dependency problem.
  • Added a method to OneArgumentBlock to support exception handling.
  • Fixed the PrimitiveFactory to eliminate a compiler dependency problem.
  • Fixed the compiler generation of super sends from inside inner classes.
  • Identified a compiler problem that I can't fix at this time.

2.1 24 October 1999
  • Added support to compiler for casting with as: idiom, including message optimization, e.g., ( 5 @ 6 as: Point ).
  • Added benchmark tests to the smalltalk.example package - SimpleHanoi and SticBenchmark.
  • Fixed a compiler defect related to code generated for empty blocks.
  • Improved SequenceableCollection iteration performance by ~20%.

2.0 20 October 1999
  • Added the remaining Streams to the package.
  • Added ByteArray to the smalltalk.collection package.
  • Fixed method exits. Exits from dynamically dispatched methods were not being returned correctly. They were blowing out of the code as a thrown exception instead of returing a value from the performed method.
  • Fixed literal imports and the code generated for literal symbols.
  • Fixed the compiler to allow some missing keywords to be used as method names.
  • Fixed the compiler to generate messages to inherited variables correctly.
  • Fixed equals, hash and hashCode for the various concrete classes, especially the literals.
  • Added stream regression tests - smalltalk.example.TestStreams.

1.9 11 October 1999
  • Improved support for primitives, including basicNew for direct instantiation of primitive classes.
  • Extended the block syntax to support the definition of anonymous inner classes, especially those derived from interfaces. See the ActionListener in smalltalk.example.TestApplet.
  • Added the smalltalk.geometry.Rectangle class.
  • Added geometry regression tests - smalltalk.example.TestGeometry.
  • Expanded collection regression tests - smalltalk.example.TestCollections.

1.8 5 October 1999
  • Some of the binary operator renaming conventions were changed to improve readability.
  • Added support for ** (raiseTo:), >> (associateWith:), and % (modulus:).
  • Added support for @ to create Points.
  • Fixed String >> #at:put: and OrderedCollection >> #at:put:.
  • Fixed the grammar and compiler to generate code for assignments correctly.
  • Replaced the test classes in the example package - e.g., smalltalk.example.TestMagnitudes now tests a much larger variety of behaviors.

1.7 3 October 1999
  • All the magnitudes are largely code complete, except for fixed point numbers. However, all the classes need more testing. If anyone knows of a source for an ANSI Smalltalk compliance test suite, please contact me.
  • The Point class was added to the new geometry package.
  • The naming convention used for metaclasses has changed. The compiler now uses a lower case "m" rather than a dollar sign ($) as the prefix for metaclass names. This should fix the problems with VisualAge for Java that were reported.
  • In conjunction with the revised metaclass naming convention, support for the static Java reserved word has been added for variables and methods. For example, this supports the inclusion of a static main() in a class definition. See the classes in the example package.
  • Support for Java exceptions has been added to the compiler. See the updated section on exceptions in my original paper.
  • Some minor compiler defects were fixed, including literal characters.

1.6 23 September 1999
  • Fixed the compiler to generate message cascades correctly.
  • Fixed the compiler to automatically import the most common literal classes.
  • Fixed the method cache to resolve some common block idioms automatically.
  • Fixed the numeric comparisons.
  • Added the smalltalk.example package and moved the test classes into it.
  • Added the package with a draft Transcript class.
  • Added a draft Time class to the smalltalk.magnitude package to support performance testing.
  • Removed the API docs from the web site. Bistro is getting big and the docs are included in the source release.

1.5 20 September 1999
  • IMPORTANT NOTE: Because the Bistro collection classes depend on the new Java™ collection framework, Bistro now requires a compilation environment compatible with JDK 1.2 or later.
  • Added substantially to the smalltalk.collection package. It now includes Array, Bag, Dictionary, Interval, OrderedCollection, Set, SortedCollection, String, Symbol, and their various superclasses and supertypes. Most still need thorough testing, but should work to a large extent.
  • Fixed some minor bugs in the compiler. It now generates all the collection literals, including Arrays, Strings, and Symbols.
  • The build scripts have been updated to support recompilation of individual classes.

1.4 10 September 1999
  • Released the Smalltalk to Bistro conversion utility for Visual Smalltalk, VisualWorks Smalltalk, Squeak Smalltalk, and Dolphin Smalltalk.

1.3 24 August 1999
  • Fixed instantiation protocols (new, new:).
  • Added optimization of Boolean junctions - and: and or:
  • Added minimal collection classes, enough to support simple (initial) smalltalk.collection.String.
  • Fixed references to super from inner class methods.

1.2 20 August 1999
  • Added support for a target directory specification to the Bistro compiler.
  • Fixed the rebuild and build batches to use the new compiler feature.
  • Eliminated a forward reference that generated a compiler error in MS J++.

1.1 19 August 1999
  • Improved dynamic dispatch performance. It's now only ~20 times slower than primitive method invocation!
18 August 1999
  • Improved Bistro compiler interface to support a relative source basepath.
  • Compiler now generates a default constructor if one is not defined for a class.
  • Added synchronization protocol to Object.
  • Added initial exception handling to ZeroArgumentBlock.
  • Added some batches to build and rebuild the compiler and other classes.
  • Updated the documentation.

1.0 15 August 1999
  • Released first draft of Bistro compiler and Smalltalk behavior and magnitude classes.

Oracle and Java™ are registered trademarks of Oracle and/or its affiliates.
SourceForge™ is a trademark of Geeknet, Inc.

Permission is granted to copy this document provided this copyright statement is retained in all copies.
Copyright 1999-2002 Nikolas S. Boyd.