Release / Change Notes: Slate-current: - 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.