Release / Change Notes:

Slate-current:

- Added a noviceMode switch slot on the REPL which suppresses the Debugger
  for errors encountered as a result of REPL expressions.
  "repl noviceMode: False" disables it.
- Extended the Parser's error reporting with check: token is: {types} and
  expected:butFound: to standardize and clarify Parser error-reporting.
- Added a Converter abstraction with >> support, as well as a Base64
  encoder/decoder in converter.slate.
- Added a `math macro to handle convential precedence assumptions in arithmetic
  code. It however will not handle non-arithmetic code within yet.
- Fixed the QuickSort algorithm in Sequence sortFrom:to:by: to not require
  two executions to reach final sorted state.
- Added String 'sorted' method.
- Added Method "adverbial" (called so after their APL/K language origins)
  methods: reducer, collector, acrosser, selecter, tracer, injector,
  converger which turn their respective Collection method normal variants
  into blocks with the argument block filled-in with the receiver.
- Added Root converge: which takes a block and runs it on the object and
  results until there is a fixed-point or cycle of values.
- Added Collection trace: which acts like inject:into: but returns all the
  intermediate values.
- Added Method across: Collection which applies the block to matching
  elements of collections in the argument. If it's a binary block, it
  works like reduce:, otherwise the block's arity should be the same as
  the number of collections in the argument.
- Added a Namespace 'new' method.
- Added &slots: to ensureNamespace: and ensureDelegatedNamespace: for the
  simple construction case of a Namespace of simple (immutable) values.
- Added define:&parents:&builder:&slots: to wrap the varying ways to define
  immutable and well-known objects and derivations (&builder: triggers
  define:using: but the other two optionals are suitable for derivation
  customization).
- Cleaned up define:using:.
- Added ExternalPrimitivesHolder as a facade for ExternalLibrary facilities
  that are reasonably regular.
- Cleaned up and simplified the SDL backend, also turning it into a plugin.
- Fixed/cleaned-up AutoLoader database code.
- Added LineStream R/W/RW variants as attributes / wrappers of R/W/RWStreams;
  each LineStream takes/emits whole lines as elements. The generic accessor
  "lines" on a Stream instantiates an appropriate type. Reading from this
  Stream type will auto-detect line endings.
- Added Everything and Nothing as PredicateCollections.
- Made Sequence rotate/rotated efficient, and added shiftFrom:by:count:,
  replaceFrom:with:, and reverse (in-place variant of reversed).
- Fixed Sequence first:/last: to work for N > sequence size.
- Added Sequence endsWith:, includesSubSeq:.
- Added UniqueNumber to refactor Infinities and Epsilons.
- Fixed the SourceWriter's usage of parentheses, and the Parser's output of
  them (this did not affect compilation).
- Added a default grow method for ExtensibleSequences.
- Added E-style language concurrency, using % to prefix message selectors or
  expressions as a whole for deferred-resolution, with dependency management
  for nested-eventualness. See concurrency.slate; the initial Process used is
  currently REPL-driven.

Slate-0.3.4:

- Fixed Symbol intern calls so that it would not return an un-interned copy.
- Added support for standalone Windows executable-building using MinGW with
  top-level Makefile support.
- Fixed bit-rot in the BeOS build setup.
- Changed print to perform a printOn: Console and altered existing print calls
  to the more appropriate underlying call, printString.
- Added "help" messages for the context in the REPL and Debugger.
- Added &mode: optional to File sessionDo:.
- Added escaped/unescaped to Strings.
- Added readFrom: for Strings and File Locators.
- Added length method to Sequence (aliasing size).
- Fixed upToAnyOf: for Streams.
- Fixed off-by-one bugs in copyAfter:/copyAfterLast:/copyUpTo:/copyUpToLast:.
- Fixed indexOfSubSeq: method and its kin.
- Improved File Locator parsing and printing to automatically detect Windows-
  style path conventions and to parse drive letters as well as hostnames.
- Added probablistic isPrime method to Integer.
- Added atRandom to Integer (restricted in randomness by a deterministic seed).
- Fixed parentheses-usage in source-printing.
- Added `match:with: macro for dispatch on elements of a Sequence.
- Added support for optional keywords in macros.
- Factored delegation slots into maps to save space.
- Much more efficient stack unwinding in the VM.
- VM bug-fix for resending with optional keywords.
- Added the FFI and most of the src/lib/ contents to the AutoLoad database
  and added a step in post-bootstrap to read it in.
- Added an optional AutoLoad database to the bootstrap files list so that
  file parsing for auto-loading need be done only occasionally.
  The controller AutoLoader object is documented in the manual under "modules".
- This loads Modules when any definition of the module is mentioned.
  The auto-loaders are method stubs that call the Module to load itself and
  then answer whatever the method should have answered once the Module has
  defined everything.
- Rewrote the `>> and `withSlotsDo: macros to be more efficient.
- Many bug fixes for macro expansion to ensure variables and closures
  are properly captured by the scopes they are embedded in.
- Improved the debugger to allow inspection of lexical variables via
  arbitrary expressions in the method frame context.
- Fleshed out the MR generation code and an x86 backend.
- Added a macro `swapWith: for swapping values of variables local to a Method.
- Renamed Number with: to of: for UnitValue creation.
- Made named-Unit creation result in methods of that name/abbrev. to be
  defined as constructor messages on Number (e.g. "1 km").
- Aliased remove: as exclude: for NoDupicatesCollection.
- Added Method signature and roleHolders as well as Symbol findRoleHoldersOn:
  and findSignatureOn: for finding the signature of a (named) Method.
  (these all take an &in: namespace parameter).
- Added unlessCompletes: to complement ensure: for failure-only blocks.
- Added Integer raisedTo:mod: to optimize (raisedTo:)mod:.
- Added Integer inverseMod: to take the inverse modulus of a pair of numbers.
- Added String plural which returns a pluralized form of the contents of the
  String considered as a noun. (Modulo English lexicon weirdness.)
- Added String/Sequence methods concatenateAll:&separator: (alias ;*),
  toCamelCase, fromCamelCase, split (using whitespace default for optional
  &separators:), capitalize.
- Added combinationsDo:, combinationsCollect:, combinationsSelect:,
  combinationsInject:into: to perform combinatorial iteration over Collections.
- Added the `cache macro which takes an expression and expands into a setup
  where it is stored into a local variable in the given Method context, after
  which all occurrences of that expression in the same context is replaced
  with accessing that variable's value. So the expression is evaluated
  exactly once. `cacheAs: performs the same function, using a Symbol as the
  variable name and allowing it to be referred-to safely in pre-macroExpand'd
  source code.
- Added currying features as <-, <-1, <-2, <-3, ... <-* messages which curry
  the N'th argument, (* for the last). Currying answers a new Method based on
  the argument that has one less argument and the missing argument being one
  filled in with the other value given. The bytecode compiler also has
  generation rules for it to be efficient.

Slate-0.3.3:

- Added addVariable&name: and addInputVariable&name: to generate default
  non-intersecting variable names (for macros that work on Methods).
- Added implicit-context "here" method for Namespaces to return the current
  enclosing Namespace.
- Fixed macroExpand to avoid circularity of `macroExpand
  (`() macroExpand works instead).
- Added an optional &environment: parameter for all macros using the
  macroExpand mechanism. It answers the current surrounding Method.
- Made the default printing for Syntax Nodes to be pretty-printing.
- Added indexFirst and indexMiddle to Sequence for complete index-based
  start abstraction.
- Fixed SmartConsole/SmartREPL to work across image saves, and added Ctrl-c
  handler to clear the line. Also, there are a number of cleanups.
- Fixed FilterStream (stream select:) bugs.
- Fixed startupActions handling so that individual errors would not cause
  skipping all remaining actions.
- Added Float as: Fraction using continued fractions.
- Added Stream traversal (Order) object types, and a TraversalStream which
  can do depth-first and breadth-first traversal and parametrizable
  specification of what constitutes an object's children.
- Added GeneratorStream and generate:(until:) to allow arbitrary unfolding
  of objects as a Stream.
- Added not-boolean checking and error-signalling to the VM for the
  bytecodes used for logical operations within bytecode methods.
- Enabled Tab-completion for the SmartREPL.
- Numerous general SDL binding improvements.
- Added handling for SDL input events, with a demo Paint/Scribble application.
- Added Image startup, shutdown, and save action hooks, using Dictionaries.
- Improved ExtensibleArray handling, using makeGapAt: and other changes.
- Added #implementations and #callers methods to Symbol to return methods
  implementing and calling given message selectors. &in: allows searching from
  a given Root object-as-namespace.
- Added methodsNamed:, methodsNamed:at:, and methodsCalling: to all objects.
- Added isAbstract to Method, checking for overrideThis.
- Removed traitsless objects from the image and bootstrap, including the
  special but unused Raw Oddball. This also involved a type inference system
  cleanup, and removal of sendto:through: calls in root.slate.
- Added commentTemplate to Root, ansering a simple explanation structure.
- Added ArrayMD pretty-printing.
- Added ArrayMD Streams, with a default row-major traversal order.
- Improved addPrototype: further so that the existing traits object will
  be directly re-used if an existing prototype is found. This eliminates
  a previous difficulty in reloading library definitions where attribute types
  are defined in separate units.
- Fixed the VM to not allocate an Array of negative size, instead using 0.
- Added allSlotsDo:(withSeen:) to Root - recursively traverses slot values.
- Improved sessionDo: so that open/close actions would not happen if already
  open. This allows for nesting calls. Also, sessionDo: now works on streams.
- Renamed MapComposition to MapOverlay and the improved the Mapping code.
- Improved File RelativeLocators parsing and printing.
- Added FlattenedReadStream which allows the use of the flatten message to
  create a recursive traversal of all contained ReadStreams.
- Added a common implementation basis ArrayBacked between ExtensibleSequence
  and ExtensibleArray so the other array-backed Sequence variants can re-use
  the same simple methods.
- Refactored RingBuffer into Queue which is resizable and RingBuffer as
  derived version which overwrites the other end when full and adding.
  It also follows the Stack push/pop protocol.
- Added REPL access via "repl", command result history, and hooks for
  extension.
- Fixed a bug in bootstrapping where True and False were created as Oddball
  instances, not Boolean instances, confusing all Oddballs including Nil.
- Added copyWithoutDuplicates to Collection using Set (in set.slate).
- Bootstrapping was slightly cleaned up. pre/post-load.slate were renamed to
  pre/post-bootstrap.slate.
- Renamed src/lib/ordered.slate to extensibleSeq.slate (fixes legacy name).
- Added an &in: Namespace optional parameter to load: to allow "sandbox"
  installation of code. import:from: was also added to Namespace but probably
  needs more utilities for this functionality to be easy and useful.
  load:/requires:/provides: can also be called directly on any namespace.
- Improved the quotation mechanism so that macros within `unquote nodes
  are expanded properly.
- Added addPrototype:&parents: which makes the default parent Cloneable.
- Fixed an addPrototype:derivedFrom: bug where re-running it on a type where =
  was redefined would cause an error trying to apply = to the traits.
  Now, == is used per parent.
- Altered/fixed the semantics of `>> so that if the top-most method is not
  unary, the left-most argument is altered to use the cascade object as its
  implicit argument as necessary.
- Extracted the Message type from MethodNotFound.
- Began the incorporation of SDL UI backend code.
- Added Directory current and enter/current: methods to get and set the current
  Slate Directory. This wraps existing primitives in directory.c.
- Added Regex library based on Vassili Bykov's portable Smalltalk-80 version.
- Added rotate/rotated methods to Sequence with a &step optional. Rotated is
  non-destructive. They "rotate" the elements around by the given amount.
- Added equality (=) methods to Syntax Nodes to ease building pattern-matchers
  on source.
- Added `commutatively which expands a method definition two with mirrored
  signatures of each other.
- Moved license.txt to LICENSE.
- Migrated repository to DARCS.

Slate-0.3.2:

- Added darcs repository test.
- Added Method composition ** which works on any blocks or named methods,
  and any valid argument arity (not just 1-1 as with functional languages).
  See comments in src/lib/method.slate and the manual under Methods.
- Added a macro-message `er for Symbol expressions, expanding into a
  literal block which takes the number of arguments the symbol supports as
  a selector and sending the message. (E.g. #= `er => [| :x1 :x2 | x1 = x2])
- Extended backtick (`) support so it can preface any expression and have
  the same effect as macro-sending `quote. (E.g. `4 = 4 `quote)
- Abstract socket layer and BSD socket layer implemented as a plugin,
  including a select() interface. This still needs work and better tests.
  See src/lib/net/socket.slate, src/plugins/socket/, and the manual.
- Destructive stable merge-sort added (Sequence destructiveStableSort(By:)).
- Added a BUGS file to track long-term issues and a CREDITS file for
  attribution/blame.
- Added radix-specification for Floats. E.g. the syntax 2r0.1 yields 0.5.
- Added readFrom: for Numbers to read from strings or arbitrary streams,
  which checks for the parsed-value's type.
- Added ExternalLibrary support for different calling conventions and
  accessing C structs with the help of CStruct, which is a ByteArray with
  member accessors generated from a Types C Structure definition.
- Added a SmartREPL which provides command history and simple line-editing.
- Added src/plugins directory and a SmartConsole plugin for console
  applications.
- SkipList data aggregations were added with unit tests.
- Windows (VC) builds were brought in sync with the Makefile conventions.
- Makefile portability and robustness enhancements.
- Fixed various bugs in ExtensibleArray and InsertionSequence.
- Added a defaultElement selector to Sequences so they can vary on their
  underlying Array safely (removes bugs where Nils were inserted into
  Strings/ByteArrays).
- Modified the parser to accomodate optimistic / interactive parsing. This may
  be toggled with interactiveMode/pasteMode at the REPL.
- Added an ncurses plugin with cross-platform support.
- Refactored traits to be composed in the traits window and only delegate to
  one parent. External derivation protocols are unchanged.
- Augmented addDelegateNamed: with addDelegate:before: and addDelegate:after:
  to handle delegation precedence control to a slot name.
- Visiting shared-behavior objects during lookup will no longer repeat; this
  avoids "Traits traits"-style leakage of behavior. It relies on a flag bit
  in an object's map being set from userland.
- Overhauled delegation and traits organization to use traitsWindows to
  mediate / compose traits.
- Renamed select: methods which preserve key-value mappings to mapSelect:.
  Sequence select: methods will now reposition / "compress" their results.
- Added a stream-iteration protocol over all objects in the image, all
  delegating to a given one, and all referring to a given one.
- Renamed addProtectedSlot:in:valued: to addDynamicSlot:valued:.
- Added an ExternalLibrary library and primitives for interacting with
  external dynamically-linked libraries.

Slate-0.3.1:

- Fixed a serious bug that prevented the VM from properly handling message
  resends in nested blocks.
- Added project: and project:into: idioms that allow one to easily project a
  collection of keys onto a method result and thus easily construct 
  Mappings/Dictionaries.
- Added `>> and `withSlotsDo: macros that allow "cascading" messages to objects
  and using their slots in a convenient way.
- Fixed various Sequence bugs, involving hashes, sorting. The methods
  sort and sortBy: were renamed to destructiveSort(By:).
- Added with:sessionDo: for easy pair-wise file operations.
- Added user-land access to the map object along with a role introspection API
  in src/mobius/vm/interp/map.slate.
- Fixed the Makefile so that building modified VM's with different names
  did not result in a broken image by re-using old header files.
- Saving an image no longer requires shutdown. saveImageNamed: is now wrapped
  with Image save &name: where the name is stored persistently. This allows
  for further extension as well.
- Added an exception handler specifically for printing errors under the REPL,
  to avoid resulting infinite recursions.
- Added an internationalization framework under src/i18n/ with much left to be
  done, but basic UTF-8 encoding and decoding are provided with initial tests.
- Added a library for object-paths in src/lib/path.slate with tests
  under tests/path.slate.
- Optimized BigInteger printing using quoRem:.
- Added define:using: to aid in making reloading of code reliable for basic
  cases.
- Consolidated derive- methods into derive &mixins: &rejects:.
- Fixed a VM bug where resends within method invocations with optional arguments
  would not pass the optionals on.
- /\ and \/ overrides' blocks are now inlined.
- Added inject:into: for streams.
- Added an install-target to the Makefile.
- and: and or: were renamed as overrides of /\ and \/, and core libraries and
  Mobius code were refactored to use them.

Slate-0.3:

- The bootstrap/ source tree has now become the main src/ tree, and the old 
  Lisp bootstrapping code has been removed. 
- Many fixes to the C generator so that the C compiler can properly inline 
  code.
- Global selector caching was added to speed up dispatch.
- Closures are now stack allocated if they do not contain any blocks or 
  methods.
- The VM and image are totally bootstrapped, and can generate themselves.
- Portable file primitives were added. Image-saving in the VM was finished.
- File protocols were refactored to support persistent re-opening of files
  and further separation of resource from stream logic in accordance with Flow.
- Many many bugs were eliminated from the VM and garbage collector. In the
  process, the GC has become a mark-sweep-compact allocator with card-marking
  to objects only referred-to from the C stack. It also helps handle object-
  forwarding ("become" operations).
- Assertions were added to Pidgin and the VM source to enable early detection
  of consistency errors. (assert: expr -> assert(expr);)
- atEnd renamed to isAtEnd for streams.
- Collection protocols were enhanced for Streams as much as possible, e.g.
  do:, collect:, select:, reject:.
- A separate bootstrap/ source tree was made for VM-supported development.
- A working VM and image were generated.

Slate-0.2.3 aka Pre-Smalltalk Solutions 2004:

- init.slate is now loaded by build.lisp, due to the refactoring of printing,
  so the initial Slate image now has the standard libraries already.
- Printing was totally refactored out of Lisp into Slate.
- Specialized method-caching was established for array access and slot access,
  as well as an optimization to cut short lookup when the first found method
  was provably the correct one. The overall speedup was several- to a dozen-
  fold due to these being key slow points previously.
- Bytecode and object format changes were made to improve resulting space
  considerations for the image and its code.
- VM source and header files are now producible, though not final or complete.
- The pidgin C-generator is now debugged and usable.
- value,value:,values:, etc. for invoking blocks on arguments have been renamed
  to do, applyWith:, applyTo:, for consistency with do:

Slate-0.2.2:

- addPrototype:derivedFrom: was modified to not replace the existing slot
  value if the new definition were the same as the old, as compared by
  delegations and their order. This makes it more robust to reload sources.
  Also, addPrototype: was added which just makes a Cloneable.
- The evaluate interface was made less dependent upon ByteCompiler, and
  the compilation interface was refactored into a separate compileAndRun.
- newWith: for descriptive errors was renamed to newDescription:. Also, a
  general breakOn: method was added to Method.
- SUnit methods were made more robust and bugs were fixed.
- The external stream interfaces were enhanced: File streams now perform in
  newOn: stringPathName the required file-opening in the appropriate mode.
  Also, signalling Exhaustion errors for external streams was fixed.
- Compiler SyntaxNode and kin were refactored to Syntax Node. Other source
  files only related to Syntax were also moved into this namespace.
- Number ceiling was added.
- src/group.slate was added, which has a Grouping type and groupBy: constructor
  for collections.
- Bugs in various collections methods and streams were eliminated.
  Notably: Dictionary, which now also has a unit-test suite.
- The emacs mode was improved with better comments and corrected character
  syntax and highlighting for block headers and type annotations. C-h is
  also no longer treated as backspace.
- Removed src/build-libs.slate. This mode of compiling files is deprecated.
- An init.slate was created for the VM directory which loads the Slate-side
  relevant sources, including the self-hosted interpreter.
- Method was refactored into LispMethod and abstract Method.
- Work on Beziers, Quadratic, and other kinds of curves was added to the
  repository, already with basic functionality tested.
- Fixed a bug preventing the use of optionals while debugMode is True (when
  the libraries are loaded) and for the Slate-hosted parser.

Slate-0.2.1:

- High Lisp compiler optimization settings were added to the interpreter's
  component files, so release speeds should be faster "out of the box".
- File Stream's PositionableStream interface was corrected, via the fix to
  removeSlotNamed:.
- The VM code was rounded out based on the new memory-management framework,
  and a couple of code groups were added for object utilities and native
  methods (primitives corresponding to a method). See src/mobius/vm/.
- The object heap and GC code were adapted from Squeak, with refactorings just
  about everywhere, but there are still some design differences that need to
  be resolved to complete it.
- The C translation code was rounded out and debugged a bit, but still very
  much a work in progress.
- Shearing operations were added to the display transform library.
- The Matrix libraries were filled out and tested on all basic operations.
- Numerics were extended with sine/cosine primitives, and the DisplayTransforms
  can now perform rotations and such properly as a result.
- Collection is no longer primitively-defined, and the array primitive
  bootstrapping was cleaned up.
- Console was made a full ExternalResource. No user-visible changes were
  involved.
- The File and File Locator code were refactored and bugs were fixed.
  Also, both File and Socket resource types were refactored from the primitive
  handle types to keep the library code independent from the implementation.
- The X11 primitives were made usable, and connected to the X11 Port library.
- src/namespace.slate was added to the standard libraries, and every file was
  refactored to use ensureNamespace: and ensureDelegatedNamespace: for
  Namespace setup.
- A general debugging sweep was made on every Slate file, weeding out the
  fundamental bugs that prevented loading or caused poor interactions with
  other libraries.
- Numeric operations were made more robust, sound, and generic, thanks to
  kirtai.

Slate-0.2:

- Condition-handling, restarts, and a basic interactive (non-REPL) debugger
  were added. See src/condition.slate and src/debugger.slate.
- Method dispatch BUG fixed, where the delegate-traversal order was reversed
  for all but the most-recently-added delegate slot.
- Subjective dispatch added, with two options: interleaved-dispatch Subjects
  or layered-dispatch "advisors" (Layers). Notes are provided in the manual.
- deriveWith: BUG fixed. The new traits object was delegating to the given
  prototypes and not their traits objects.
- addRolesFrom: was added to enhance mixin-style derivation.
- Optional keyword message-sends are now implemented in the interpreter.
- The streaming framework was refactored to support the ideas of the Squeak-
  related Flow framework by Craig Latta.
- CLISP shell support added, hooked on Shell and Environment globals.
- All methods in prims.lisp which were not needed initially or could be defined
  in terms of other primitives were moved to the standard libraries, notably
  src/root.slate. Methods included just for bootstrapping were annotated.
- atSlot:, atSlot:put:, and removeSlot: were replaced with atSlotIndex:,
  atSlotIndex:put:, and removeSlotNamed: for clarity's sake about the argument
  (and for later Slot meta-object protocols).
- The lexer/parser/IR-generator combination were combined in a stream-based
  Compiler interface, which loads the necessary libraries itself.
- An addPrototype:derivedFrom: protocol was set up and the libraries refactored
  to use this more-automated method for setting up prototypes+traits.
- A Slate-based inspector facility was introduced, a basic one that can be
  run just with the primitives, or a full one that makes use of other Slate
  libraries. Notes are on the Swiki and in the comments - both are one-page
  implementations: inspect.slate and src/inspect.slate
- The Emacs mode was improved to support dynamic syntax-highlighting. Also
  a Slate workspace buffer setup was created.
- A simple formatted printer was added in src/print.slate.
- Buffer renamed to RingBuffer, and Read/WriteBufferStreams were finished.

Slate-0.1:

- An initial named release of Slate, with an included documented build
  procedure for producing stand-alone executables (and loadable binary
  libraries out of Slate sources).
- Slate's implementation is still based upon Common Lisp, although it
  performs some compilation, so has acceptable performance for basic
  testing and evaluation.
- The current libraries include file access, extensive collection and stream
  support, and many other basic libraries.
- There is no support yet for concurrency or system event-handling.
- The manual covers all language features and issues in sufficient detail now
  for beginners to grasp, and covers all libraries which are not subject
  to design changes.
- The graphics / interface architecture is included in outline form, but is
  not yet functional.
- The bootstrap process is incomplete, but in a presentable state so that
  you can see the intended run-time architecture and optimizations.
