Skip to content

Releases: vygr/ChrysaLisp

Starbug

09 Mar 11:07

Choose a tag to compare

This release brings significant native mathematical enhancements to the Virtual Processor (VP), a brand-new centralized image format library, vast improvements to the Regular Expression engine, and a host of quality-of-life updates across the GUI and command-line tools.

✨ Core & Language Features

  • Lazy Quantifiers: The Regexp class now fully supports lazy quantifiers (*?, +?, and ??).
  • CScript Types: Added support for real and fixed types in CScript variables.
  • Smarter Array Pushing: (push array ...) is now significantly smarter. It will push object references for :list, but will flatten object data for any other type. For example, you can now push data directly from a :str into a :reals array, which is excellent for handling message data.
  • Stream Seeking: The String stream class now supports the :seek method, enabling the use of the (stream-seek) Lisp-level function.

🚀 Virtual Processor (VP) Improvements

  • Native Matrix Math: Added native VP support for mat4x4-mul, mat4x4-inv, mat4x4-vec4-mul, and mat4x4-vec3-mul.
  • Long Vectors: :reals :mat4x4_v4_mul and :reals :mat4x4_v3_mul now support long vectors.
  • Stream Operations: Added new VP functions for low-level stream manipulation:
    • (fill-bits stream (array bit_pool bit_pool_size) data num_bits cnt) -> stream
    • (copy-bits wstream rstream (array bit_pool bit_pool_size) (array bit_pool bit_pool_size) num_bits cnt) -> wstream
  • Graphics: Added native VP versions of the pixmap-read and pixmap-write functions.

🖼️ Graphics & Image Formats

  • New Image Library Structure: Created a new lib/image/ directory to centralize image format handlers.
  • .cwb Support: Introduced a new loader for the Whiteboard application format (.cwb). Added (CWB-info stream) and (CWB-load stream [scale]). You can now load and view .cwb files directly in the Images app or via any command using canvas-load.
  • TGA & CPM Improvements:
    • The TGA loader has been moved to a pure Lisp library.
    • CPM-load and CPM-save now utilize the RLE library, which has been improved with a new sliding window algorithm.
    • Both formats have been updated to use canvas-tile and string-stream line buffers.
    • Note: A VP helper function for faster Canvas writes during image imports is planned for the future.
  • Canvas Tiling: Promoted the Raymarch tile helper to a generic (canvas-tile canvas data x1 y1 x2 y2) -> area function. The Mandelbrot demo has been updated to use this new generic function.
  • Vector Library: Added (vector-bounds-2d paths) and (vector-point-in-polygon p paths winding_mode) to the vector lib.

📱 Apps & UI

  • Whiteboard: Added a new move mode with snap-to-grid functionality. Left-clicking draws in the front, while right-clicking draws in the back.
  • Strokes Widget: Added the :set_snap x y method.
  • Editor (cmd/edit.lisp): Added a new quiet mode (triggered via the -q option).

🐛 Bug Fixes

  • Regex Engine: Fixed a typo in the Regexp :search method ((const bind) -> (const bfind)) to properly enable the execution fast-path.
  • Regex & Editor: Updated the Buffer class, Regexp class, and the Editor app to handle blank line $ matches correctly.
  • Zero-Length Matches: Fixed the Edit class so it correctly highlights zero-length matches (which are now possible due to the new lazy quantifiers).
  • Buffer Cursor: Fixed the Buffer class :next_found_cursor method so it correctly moves the cursor to the start of the next line if a match occurs at the end of a line (i.e., includes \n).
  • Pixmap Conversion: Fixed the premul alpha format type test in :pixmap :as_argb, and resolved an issue with the pixel conversion cache in :pixmap :as_premul.

⚠️ API Changes & Tooling

  • Function Renames: pixmap-save and pixmap-info have been officially renamed to canvas-save and canvas-info.
  • CPM Save: Replaced the VP version of CPM-save with a new pure Lisp implementation: (CPM-save pixmap stream format) -> pixmap.
  • Windows Scripts: Updated all Windows .ps1 launch scripts to utilize the latest available options, bringing them fully inline with their .sh counterparts.

Enjoy

Chris

Gutenberg

16 Feb 10:01

Choose a tag to compare

This release brings a massive architectural overhaul to the text manipulation stack, introducing the Parallel Programmable Editor and a unified focus management system. It also significantly hardens the system with a new Runtime Validation build mode, implements Kernel signals for pipeline control, and refactors the Virtual Processor class definitions for better modularity.


Key Highlights

📝 The Parallel Programmable Editor & Text Stack Refactor

The Edit widget now delegates all focus region management to the underlying Buffer (Model), removing UI-specific logic. This enables the new edit command-line tool, which exposes the full power of the editor engine for batch processing and scripting.

  • Focus & Regions: Added :focus field to Buffer with methods to filter cursors and restrict editing to specific regions (:set_focus, :filter_cursors).
  • New Logic: Search navigation (:next_found_cursor, :find_add_next, etc.) now respects focus boundaries.
  • New Commands: Added proxy commands for whitespace selection, bracket selection, and focus management (e.g., edit-select-ws-left, edit-focus-cursors).
  • Unified UI: Editor, Viewer, and Hexview updated to use the new cursor-based API; update-find-toolbar logic unified across apps.

🛡️ Runtime Validation Mode

A new build mode (*build_mode* 2, "validate") has been introduced to catch errors earlier.

  • Stack Protection: Every function (excluding sys/) now performs entry-point stack validation. Out-of-bounds access triggers a dump with script name and repl info.
  • Memory Safety: obj-get and obj-set now perform range and alignment checks in debug builds.
  • Error Context: Lisp error objects now carry the initial script name and repl info at the point of the throw.

⚡ Kernel Signals & Pipeline Control

Implemented Kernel signals to manage task pipelines from the TUI and Terminal.

  • Ctrl+D: Immediately aborts the pipeline.
  • Ctrl+d: Sends EOF into the pipeline for orderly shutdown (aborts after 2 seconds if tasks hang).

🏗️ VP Architecture & Macros

  • Class/Struct Separation: Separated VP code into class.inc (methods) and struct.inc (data layout). struct.inc is now shared with Lisp for getf/setf access, eliminating replication.
  • Macro Unification: Replaced def-struct/def-enum with unified structure, enums, and bits macros, featuring stricter field redefinition testing.
  • VP64 EMU: Aggressively refactored src/host/vp64.cpp.

Detailed Changelog

System & Kernel

  • API: (mail-send mbox str) now enforces :str type for payloads.
  • Info: task-flags function added.
  • Debug: Enhanced :sys_task :dump to include Lisp launch script name, repl stream, and line number.
  • Stats: stats command now traces :list, :str, and :nums allocation to help optimize static environment usage.
  • Renaming: *debug_mode* settings renamed to *build_mode*.

Library & Lisp

  • Strings: Added VP :str :unescape and Lisp (unescape str) function.
  • Reader: Lisp read now handles basic string escapes (\r, \n, \t, \q, etc.).
  • Streams: Buffer load/save methods switched to a streams-based API.
  • Collections: Added missing :empty? method to Emap.

User Interface (TUI & GUI)

  • TUI: Added Tab completion.
  • TUI: Prompt now defaults to the user login name.
  • GUI: Fixed drag issue in Boing/Freeball action-mouse-motion.
  • Files: Files app and Whiteboard updated to use :str payloads for RPC.

Bug Fixes

  • Fixed condn failure to detect error values correctly.
  • Fixed :str :slice logic for reversed strings.
  • Fixed toolbar state consistency in Editor/Viewer.

Testing

  • Added comprehensive unit tests for text editing, focus, and search (tests/test_buffer_new.lisp, tests/test_edit.lisp).
  • Added suite of simple unit tests runner: ./run_tui.sh -n 1 -f -s tests/run_all.lisp.

Enjoy

Chris

Jantrit

27 Jan 15:17

Choose a tag to compare

Splice Primitive, Text Processing Overhaul & Editor Upgrades

This release introduces a powerful new sequence manipulation primitive, significantly overhauls text replacement logic for better performance, and adds new navigation features to the Editor and Viewer applications.

✨ New Features

Core Primitives

  • New splice primitive: Added (splice seq1 seq2 idxs) -> seq. This is a powerful vector-based operation. idxs is provided as a :nums vector; slices are taken from the source sequences in turn based on these indices.
    • Note: You can provide the same source sequence for both arguments. The returned sequence maintains the type of the sources.
  • Macro Safety: Added (msafe? %0) -> :t | :nil predicate to check if a parameter is macro-safe (i.e., ensures it will not lead to double evaluation).
  • Text Compression: Added (compress str tab_width) -> str to complement the existing expand function.

Editor & Viewer

  • Form Selection: Added support for selecting Lisp forms.
    • New method: :select_form added to Document.
    • New actions: action-select-form, action-copy-form, and action-cut-form.
  • Whitespace Navigation: Added ability to jump over whitespace.
    • New methods: :left_white_space and :right_white_space added to Buffer.
    • New actions: action-left-white-space and action-right-white-space.

🚀 Improvements & Refactoring

Text Processing & Search

  • Replace Compiler: Implemented a suite of text replace compiler functions. These generate a single splice command to perform entire text replacement operations efficiently.
    • Functions: replace-compile, replace-matches, replace-edits, replace-regex-edits, replace-str-edits, replace-regex, and replace-str.
  • Adoption: The Editor app, sed, and grep commands have been updated to utilize the new replace compiler.
  • Reflow: Moved :reflow method out of Syntax class and into root.inc utils. Signature is now (reflow words line_width) -> lines.

System & TUI

  • TUI Upgrades: The TUI now shares command history with the GUI Terminal app and includes improved line editing handling.
  • Sequence Operations: erase, insert, replace, and rotate have been converted to macros that utilize the new splice primitive.
  • Installer: The install process now utilizes 10 VP nodes (updated to reflect current hardware capabilities).
  • Document Class: Tidied up multi-cursor merging logic on floored operations.
  • List Class: Added :ref_all method. Moved several list methods to inline s-calls ending with a jump to :ref_all.

⚠️ Breaking Changes & API Cleanups

  • Slice Reversal: Removed the :rslice method. The standard :slice method now detects and handles slice reversal automatically. :slice now strictly returns a new slice object.
  • String Cleanup: Removed :str :append, :str :init1, and :str :init3 methods during a rewrite of :str :cat.
  • Search Signatures: The signatures for Search classes, :search, and :match? have changed. They now take the pattern (or compiled meta data) as a single non-optional argument.
  • Renames: lisp-elem-index has been renamed to seq-elem-index.

Enjoy

Chris

Ombey

21 Jan 16:36

Choose a tag to compare

Summary: Text Stack Architecture

The Text Stack has undergone a comprehensive rewrite to implement native multi-cursor support. The Buffer class has been refactored to handle low-level character and cursor management, while a new Document class inherits from it to handle high-level structural mutations (words, paragraphs, blocks). The Edit widget, Editor, and Viewer applications have been updated to leverage this new architecture, introducing new keybindings and mouse behaviors for simultaneous multi-location editing.


📝 Text Stack & Editor

  • Multi-Cursor Support: Complete rewrite of the Buffer class to support multiple cursors.
  • New Document Class: Introduced to handle high-level structure (lines, paragraphs, words) and mutation, inheriting from Buffer which remains focused on characters and cursors.
  • Mouse Controls: The Edit widget now supports adding additional cursors via Right Click and setting the primary cursor via Left Click.
  • New Actions & Keybindings:
    • cntrl-g (action-set-cursors): Sets cursors for all current search matches (respects focus region).
    • cntrl-G (action-add-cursors): Adds cursors for all search matches to the existing set.
    • cntrl-F (action-add-next): Adds the next found instance to the cursor list.
  • Configuration Flags: The Buffer class now accepts flags (e.g., +buffer_flag_syntax, +buffer_flag_undo) instead of a mode argument.
  • Logic Migration: Moved selection methods (:select_word, :select_line, :select_paragraph) into the Buffer class.
  • Native Optimization: Implemented VP assembly versions of cursor logic (csr-sort, csr_cmp, csr-map-delete, csr-map-insert) for performance.
  • Refactoring:
    • Renamed Edit class methods :get_find/:set_find to :get_focus/:set_focus.
    • Document class :select_block updated to handle multiple cursors.

🖥️ UI & Widgets

  • New Mask Widget: Introduced for drawing the opaque region of a view; now used by the Edit class to render selection layers.
  • Rendering Optimization: The :region :paste_rect method now checks for area merges to reduce :draw context calls.
  • Scroll Widget: The :visible method now accepts optional flags to control +scroll_flag_vertical and +scroll_flag_horizontal (defaults to +scroll_flag_both).
  • Files Widget: Added a horizontal scroll bar (set to 75% :min_width).
  • Bug Fix: Fixed an issue with the right-button mouse handler.

⚙️ Language & Core

  • Symbol Binding: The & symbol is now the official syntax for ignoring single arguments in bind or function signatures. This skips the binding entirely, meaning bind now returns the last bound value, not the ignored value.
  • Method Definitions:
    • Added (defproxymethod :<name> ([arg ...]) :<field>) to pass calls through to an object stored in a specific field.
    • Updated defgetmethod and defsetmethod to utilize : key symbols.
  • Memory & Storage:
    • Increased minimum allocated cell size to 24 bytes (size of a :num). As a result, :array objects now store up to 8 elements locally before requiring external blocks.
    • :set_cap now auto-generates code to transfer local array elements to external storage.
    • str_gap size is now auto-generated based on :sys_mem cell info.
  • Assembler: lib/asm/scopes.inc now uses an environment to hold the symbol map for each scope.
  • Build System: Fixed make-info to correctly handle relative function paths during file product creation.
  • Profiling: Added (time-it heading body) macro to root.inc for simple code timing without full profiling setup.

Enjoy

Chris

Valisk

03 Jan 10:26

Choose a tag to compare

Release Notes

🆕 New Applications

  • Slider: Added a simple sliding puzzle game (apps/games/slider/app.lisp).
  • Pairs: Added a memory matching puzzle game (apps/games/pairs/app.lisp).
  • Solitaire: Added a peg solitaire puzzle game (apps/games/solitaire/app.lisp).

🛠 Core Architecture & VM

  • VP Class Names: VP class names are now key symbols (e.g., list is now :list).
  • Optimization: Reworked num, fixed, and real classes to significantly reduce stack and register usage.
  • Optimization: Reworked nums, fixeds, and reals classes to use improved vector inline helpers.
  • VTable Storage: Reworked lib/asm/class.inc to use environments for vtable storage, resulting in faster method lookups. VP class vtable and super info are now stored in compiler variables *vtables* and *supers*.
  • New Instructions: Added support for (vp-cpy-df) and (vp-cpy-fd) instructions in the VM.
  • Structure Types:
    • Added support for real structure types (replacing the redundant ulong type).
    • Added support for fixed structure types.
    • Reworked field type codes to be a simple enum.
  • Native Functions: Lowered starts-with and ends-with to VP functions for improved performance.

📂 File System & Organization

  • User Data: Moved all user environment and application state files to a new usr/ directory.
  • GUI Apps: Arranged GUI applications into subfolders. Updated Launcher and pathing logic to utilize relative paths.

🔨 Build System

  • Partial Builds: Added make apps option to build only the application-level JIT native code.
  • Build Modes: Added release and debug options to the make command to set build modes for it and apps actions.
    • Default: Native platforms build in debug mode; VP64 builds in release mode.
    • These settings override defaults when specified.

🔌 API & Libraries

  • Pathing: New (path-to-file) function returns the path containing the current file (derived from (first (repl-info))).
  • Environment: Exposed (env-copy env num_buckets) -> env to application code; simplified VP and Lisp class construction using env-copy.
  • Constants: New (fn-consts c ...) for creating a list of constant offsets.

🐛 Fixes & Refinements

  • Editor: Fixed load-depends bug when used on the scratchpad buffer.
  • UI: Swapped the copy/paste icons for better UX.
  • Font App: Now copies the lowercase version of the character code.
  • Demos: Updated Mandelbrot and Raymarch demos to utilize the new real fields in messages.

Enjoy

Chris

Eden

22 Dec 14:12

Choose a tag to compare

This release brings a massive performance overhaul to floating-point arithmetic with the introduction of hardware-accelerated IEEE 64-bit floats, alongside significant optimizations to list operations and various quality-of-life improvements for the Editor and Virtual Processor assembler.

🚀 Major Enhancements

  • Hardware Accelerated Floats: A major overhaul to the real data type. It is now a 64-bit IEEE float with native hardware support, resulting in an approximate 1000x performance boost.
  • Updated Demos: The Raymarch and Mandelbrot demos have been recoded to utilize the new IEEE real support.

✨ New Features & API

  • Inequality Check: Added the (nql obj1 obj2) -> :t | :nil built-in function (Not EQL).
  • Equality Method: Added a new 'obj :eql virtual method to the base object class.
  • Quantization: Added :quant methods to real and reals classes.
    • (quant real tol) -> real
    • (reals-quant reals tol [reals]) -> reals
  • Math Methods: Added (ceil fixed) and (vec-ceil ...) support methods.

🛠 Virtual Processor & Assembler

  • Register Definitions: Renamed vp-def to vp-rdef. Added vp-fdef for defining float registers.
  • Constant Pools: Added (fn-const c) -> offset function and the 'fn_consts label to simplify the creation of VP function constant pools.
  • Register Binding: Updated list-bind-args to accept an optional destination register list, improving the extraction of real register values from objects.
  • Architecture Cleanup: Removed the use of task-level storage.

⚡ Optimizations & Refactoring

  • List Operations:
    • Optimized 'list :lisp_merge' to run faster and eliminate stack variable usage.
    • Optimized 'list :lisp_match' to eliminate stack variable usage.
  • Math Consolidation:
    • Consolidated all sin operations to use r_sin.
    • Consolidated all sqrt operations to use vp-sqrt-ff.
  • Namespace Cleanup: Renamed application-level vec-xxx functions to vector-xxx to prevent naming collisions with the sys_math class.

🖥️ Applications & Editor

  • Editor Usability: The editor now supports a sticky cursor X position (cursor remembers its preferred column when moving vertically through shorter lines).

🐛 Bug Fixes

  • Sequence Searching: Fixed a bug regarding the optional start index value in both (find elm seq [idx]) and (rfind elm seq [idx]).
  • Rendering: Fixed a bug in 'canvas :ftri (filled triangle) that became apparent when rendering denser Meshes.

Enjoy

Chris

Tranquility

29 Nov 12:40

Choose a tag to compare

Big bag of changes for everyone.

🚀 Release Notes

✨ New Features & Apps

  • New Todo App: Added a simple Todo application.
  • New sed App: Introduced a simple sed command-line tool. Includes -x mode for matching and replacing submatches using $0-$9 syntax.
  • Editor Debugging:
    • Added Service RPC actions to the Editor. The Debug app can now request file loading and display the current breakpoint.
    • Added rudimentary auto-debug breakpoint helpers: Launch debug, toggle breakpoint, remove, enable all, disable all, and remove all. Note: This only removes auto-named breakpoints, preserving user-named ones.
  • Files Widget: Introduced a new Files widget.
  • Includes Tool: New includes command for auto-creation of .vp file header includes to save time and improve checking.
  • Memory Streams: New class/mstream/class.inc VP class for in-memory stream buffers (a seekable list of string objects). Lisp binding: (memory-stream) -> stream.

🛠 UI & Widget Improvements

  • Stack Widget: Now uses the Radiobar widget for tab navigation.
  • UI Macros: Added the ability to erase a property from a widget using the :erase value.
  • Images App: Upgraded to include file selection capabilities.

⚡ Core, VM & Performance

  • Native VP Implementations:
    • Lowered hex-encode and hex-decode to VP functions (replacing all uses of id-encode and id-decode).
    • Lowered (split str [cls]) to VP code, serving as the basis for improved file scanning.
    • Moved vp-min, vp-max, and vp-abs into the VP VM proper. Note: ARM64/x64 native cmov and csel operations can be used to implement these.
  • File Encoding: Smarter string encoding for .tre files.

📚 API & Language Changes

  • New Builtins & Macros:
    • New (read-blk stream bytes) -> :nil | str and (write-blk stream str) -> bytes builtin VP functions.
    • New (getf-> obj field|(field offset) ...) -> (val ...) macro (counterpart to setf->).
    • Added (path-to-relative target [current]) -> path to complement path-to-absolute. Defaults to (first (repl-info)) if current is not provided.
    • Fleshed out (set-xxx str idx val) macros to match (get-xxx str idx).
    • Fleshed out (read-xxx stream) -> val and (write-xxx stream val) -> stream macros.
  • Object & Class Handling:
    • Updated (obj-get ...) and (obj-set ...) to treat sub-struct members as strings. Updated getf and setf macros to support this API.
    • Added (type-of obj) support to all classes in class/.
  • Stream & IO:
    • (read-char stream [width]) update: Now defaults to unsigned byte. Positive widths imply signed values; negative widths imply unsigned.
    • New generic file line scanner: (scan-files files handler [split_class comment_char]) -> files.
  • CLI Options:
    • New -c codebook option for huff and unhuff commands to select static codebook mode.
    • New -s script_name option for batch/shell files to ease LLM tests (e.g., ./run_tui.sh -n 1 -f -s script_name).

🐛 Bug Fixes

  • Editor: Fixed an off-by-one issue in the Edit buffer left bracket matching.
  • Terminal: Fixed an issue causing one extra line to appear in the history buffer.
  • Audio Service: Now properly shares and reference counts resource handles.

Enjoy

Chris

Iasius

05 Nov 11:33

Choose a tag to compare

Lots of goodies this release.

  • New opt-tail-call VP optimization.

  • New vpstats command. After a make it you could run it on the obj/vp/ folder etc with files obj/vp/ | vpstats.

  • Used the vpstats information to frequency order the vpopts.inc tests.

  • None recursive negamax implementation for the Chess child task. Also took the time to restructure the move generation to take better advantage of the alpha/beta cutoff optimisation.

  • options functions now uses callback to invoke the user option function. Plus added some basic option generators. (opt-flag opt_var), (opt-str opt_var) and (opt-num opt_var).

  • Fix bug in the (merge dlist slist) -> dlist function when used with none symbol lists.

  • Updated Calculator app with some basic programmer modes and operators.

  • Updated Launcher app with user configurable catorgories and ordering. State is saved to launcher.tre in the users home folder.

  • New Eyes GUI application. Bit of silly fun with the AI.

  • Fixed a few Editor (some (# (unless ...))) undefined issues. Switched to using the bskip functions where possible.

  • New (read-bits stream (array bit_pool bit_pool_size) num_bits) -> (data|-1) and (write-bits stream (array bit_pool bit_pool_size) data num_bits) -> stream Lisp bindings.

  • Rename of (write-line stream str) to (write-line-lf stream str) and (write stream str) to (write-line stream str) in order to match the (read-line stream) naming.

  • New lib/streams/rle.inc module. (rle-decompress in_stream out_stream token_bits run_bits) and (rle-compress in_stream out_stream token_bits run_bits) functions.

  • New cmd/rle.lisp and cmd/unrle.lisp command line apps for rle/unrle use.

  • Better 'num :hash method. Does some bit mixing rather than just returning the value unchanged.

  • New lib/streams/huffman.inc module. huffman-compress huffman-decompress huffman-build-freq-map huffman-write codebook huffman-read-codebook huffman-compress-static and huffman-decompress-static functions.

  • New cmd/huff.lisp and cmd/unhuff.lisp command line apps for adaptive huff/unhuff use.

  • New cmd/hbook.lisp command for scanning and optionally creating Huffman static code books.

  • Editor app now saves and restores position and size to its state file.

  • New Hexview app, which uses the Viewer app as a base but just pipes the file
    loading through the dump -c 16 command.

Enjoy

Chris

Oenone

09 Oct 09:59

Choose a tag to compare

  • *Lock service added. This still requires further work, but it removes the idea
    of lock files within the file system during Jit worker compilation. It should be
    one such service per file system plus it has other serialization issues ATM.

  • (bskip cls str idx) -> idx and (bskipn cls str idx) -> idx can now take the
    input index as a negative value like the (slice seq start end) function.

  • New docs command app. Used to scan source files for documentation. This is now
    used by the make docs command to scan documents in parallel.

  • rfind changed to use slice end index compatible style.

  • New (rbskip cls str idx) -> idx and (rbskipn cls str idx) -> idx functions,
    uses slice end index compatible style.

  • Fix for the Editor open files tree layout problem.

  • Fix for the Editor action-find-function problem, due to the change in ffi
    syntax.

  • New 'str :bfind VP class method. All the binary search char functions now call
    down to this low level search.

  • Clipboard service now integrated with the HOST text clipboard.

  • Generate improved VP classes reference documentation via scanning for the ffi
    inline documentation.

Enjoy

Chris

Udat

16 Aug 15:45

Choose a tag to compare

Udat

Mainly work on some ease of use extras, and some reworking of a few areas that improves the reader throughput.

  • Terminal app fix for user input.

  • New (bit-mask mask ...) -> val function and
    (bits? val mask ...) -> :t | :nil macro predicate defined to go with the
    (bits) bitmask definition function.

  • New (eval-list list [env]) -> list inplace list element evaluation primitive.
    This is making the :repl_eval_list method available at the user level.

  • Improvements to the case macro. Lots of new features since this was first
    written !

  • New (macrobind) macro.

  • New (static-qqp) macro that only does a prebind pass, no static macroexpand !
    GUI UI macros now use this.

  • Major tidy up of the lib/asm/vp.inc file. Use of static-q* where possible
    and removal of redundant type conversions.

  • Reference counted netid object for temp mailboxes. Create one via
    (mail-mbox) and no need to explicitly free anymore. (free-select) call is
    now gone, and (alloc-select) is replaced by the (task-mboxes) function which
    creates the select list using (task-mbox), for the first entry, and
    (mail-mbox) for the rest.

  • Reworked the lib/task/local.inc class. Added a few more options as well as
    tidying up the code. As a result the build times have improved again. Worth
    spending some of this gain on new VP optimisation checks.

  • opt-redundant-branch test added to vpopt.inc. This test looks to see if a
    constant based branch is being done when we already loaded a constant into that
    register that we can static eliminate. This can happen with inline code
    embedding, AND as branch instructions are a KILL op for other searches, it's
    worth checking for.

  • Rework of the symbol interning system for the entire OS and Lisp engine. Removed
    redundant methods and streamlined the base method used by lisp :read_sym to
    operate directly from the stream buffers without intermediate copies or string
    object churn.

Enjoy

Chris