|| 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.
||21 April 2002
- Added IdentityDictionary and IdentitySet to the
- Replaced Hashtable with HashMap as the default primitive
contents of Dictionary.
- The Bistro compiler now supports two new
||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
x) now generates
super( x ) as intended.
||8 November 2000
- IMPORTANT NOTE: All your Bistro classes must be
recompiled with the release 3.3 compiler as a result of the following
- 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
- 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
- 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
- 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
||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
- 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,
- The Bistro language now supports the use of certain
structured names, such as self.property 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
||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
- 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.
||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
- 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.
||6 April 2000
- IMPORTANT NOTE: All your Bistro classes must be
recompiled with the release 2.9 compiler to correct the following
- 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
framework as the smalltalk.test package.
- Included an interface for running tests similar to SUnit
- Added class hierarchy access methods to the behavior
- Fixed minor compiler defects related to some Java
- Fixed some minor defects in the SequenceableCollection
||20 March 2000
- Added TestExceptions to the smalltalk.example
- 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
- 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.
||25 February 2000
- IMPORTANT NOTE: All your Bistro classes must be
recompiled with the release 2.7 compiler to correct the following
- 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.
||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.
||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
- 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.
||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 smalltalk.stream 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
||2 January 2000
- Added TestServlet to the smalltalk.example package.
- Added LargeInteger and LongInteger classes to the
- 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
- Fixed the resolution of inherited instance variables in
- Fixed the references to inherited instance variables from
blocks and their inner classes.
- Fixed references to primitive, the factory in
- Fixed the implementation of instantiation using the
- Fixed some other minor coding errors in the
||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
- Added fixed point numbers to the compiler and the
- 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
- Fixed the PrimitiveFactory to eliminate a compiler
- Fixed the compiler generation of super sends from
inside inner classes.
- Identified a compiler
problem that I can't fix at this time.
||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
- Improved SequenceableCollection iteration performance by
||20 October 1999
- Added the remaining Streams to the smalltalk.stream
- 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
- Fixed the compiler to allow some missing keywords to be
used as method names.
- Fixed the compiler to generate messages to inherited
- Fixed equals, hash and hashCode for the various concrete
classes, especially the literals.
- Added stream regression tests -
||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 -
- Expanded collection regression tests -
||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
- Fixed the grammar and compiler to generate code for
- Replaced the test classes in the example package - e.g.,
smalltalk.example.TestMagnitudes now tests a much larger variety of
||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
- The Point class was added to the new geometry
- 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
in my original paper.
- Some minor compiler defects were fixed, including literal
||23 September 1999
- Fixed the compiler to generate message cascades
- Fixed the compiler to automatically import the most
common literal classes.
- Fixed the method cache to resolve some common block
- Fixed the numeric comparisons.
- Added the smalltalk.example package and moved the test
classes into it.
- Added the smalltalk.stream package with a draft
- 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.
||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
- 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.
||10 September 1999
- Released the Smalltalk to Bistro
conversion utility for Visual Smalltalk,
VisualWorks Smalltalk, Squeak Smalltalk, and Dolphin Smalltalk.
||24 August 1999
- Fixed instantiation protocols (new, new:).
- Added optimization of Boolean junctions - and: and
- Added minimal collection classes, enough to support
simple (initial) smalltalk.collection.String.
- Fixed references to super from inner class
||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++.
||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
- Compiler now generates a default constructor if one is
not defined for a class.
- Added synchronization protocol to Object.
- Added initial exception handling to
- Added some batches to build and rebuild the compiler and
- Updated the documentation.
||15 August 1999
- Released first draft of Bistro compiler and Smalltalk
behavior and magnitude classes.