Releases: vygr/ChrysaLisp
Starbug
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
Regexpclass now fully supports lazy quantifiers (*?,+?, and??). - CScript Types: Added support for
realandfixedtypes 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:strinto a:realsarray, which is excellent for handling message data. - Stream Seeking: The String stream class now supports the
:seekmethod, 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, andmat4x4-vec3-mul. - Long Vectors:
:reals :mat4x4_v4_muland:reals :mat4x4_v3_mulnow 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-readandpixmap-writefunctions.
🖼️ Graphics & Image Formats
- New Image Library Structure: Created a new
lib/image/directory to centralize image format handlers. .cwbSupport: 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.cwbfiles directly in the Images app or via any command usingcanvas-load.- TGA & CPM Improvements:
- The TGA loader has been moved to a pure Lisp library.
CPM-loadandCPM-savenow utilize the RLE library, which has been improved with a new sliding window algorithm.- Both formats have been updated to use
canvas-tileandstring-streamline 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) -> areafunction. 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
movemode 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 ymethod. - Editor (
cmd/edit.lisp): Added a new quiet mode (triggered via the-qoption).
🐛 Bug Fixes
- Regex Engine: Fixed a typo in the
Regexp:searchmethod ((const bind)->(const bfind)) to properly enable the execution fast-path. - Regex & Editor: Updated the
Bufferclass,Regexpclass, and the Editor app to handle blank line$matches correctly. - Zero-Length Matches: Fixed the
Editclass so it correctly highlights zero-length matches (which are now possible due to the new lazy quantifiers). - Buffer Cursor: Fixed the
Bufferclass:next_found_cursormethod 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-saveandpixmap-infohave been officially renamed tocanvas-saveandcanvas-info. - CPM Save: Replaced the VP version of
CPM-savewith a new pure Lisp implementation:(CPM-save pixmap stream format) -> pixmap. - Windows Scripts: Updated all Windows
.ps1launch scripts to utilize the latest available options, bringing them fully inline with their.shcounterparts.
Enjoy
Chris
Gutenberg
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
:focusfield toBufferwith 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-toolbarlogic 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-getandobj-setnow perform range and alignment checks in debug builds. - Error Context: Lisp
errorobjects 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) andstruct.inc(data layout).struct.incis now shared with Lisp forgetf/setfaccess, eliminating replication. - Macro Unification: Replaced
def-struct/def-enumwith unifiedstructure,enums, andbitsmacros, featuring stricter field redefinition testing. - VP64 EMU: Aggressively refactored
src/host/vp64.cpp.
Detailed Changelog
System & Kernel
- API:
(mail-send mbox str)now enforces:strtype for payloads. - Info:
task-flagsfunction added. - Debug: Enhanced
:sys_task :dumpto include Lisp launch script name, repl stream, and line number. - Stats:
statscommand now traces:list,:str, and:numsallocation to help optimize static environment usage. - Renaming:
*debug_mode*settings renamed to*build_mode*.
Library & Lisp
- Strings: Added VP
:str :unescapeand Lisp(unescape str)function. - Reader: Lisp
readnow 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 toEmap.
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
:strpayloads for RPC.
Bug Fixes
- Fixed
condnfailure to detect error values correctly. - Fixed
:str :slicelogic 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
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
spliceprimitive: Added(splice seq1 seq2 idxs) -> seq. This is a powerful vector-based operation.idxsis provided as a:numsvector; 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 | :nilpredicate 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) -> strto complement the existingexpandfunction.
Editor & Viewer
- Form Selection: Added support for selecting Lisp forms.
- New method:
:select_formadded toDocument. - New actions:
action-select-form,action-copy-form, andaction-cut-form.
- New method:
- Whitespace Navigation: Added ability to jump over whitespace.
- New methods:
:left_white_spaceand:right_white_spaceadded toBuffer. - New actions:
action-left-white-spaceandaction-right-white-space.
- New methods:
🚀 Improvements & Refactoring
Text Processing & Search
- Replace Compiler: Implemented a suite of text replace compiler functions. These generate a single
splicecommand to perform entire text replacement operations efficiently.- Functions:
replace-compile,replace-matches,replace-edits,replace-regex-edits,replace-str-edits,replace-regex, andreplace-str.
- Functions:
- Adoption: The Editor app,
sed, andgrepcommands have been updated to utilize the newreplacecompiler. - Reflow: Moved
:reflowmethod out ofSyntaxclass and intoroot.incutils. 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, androtatehave been converted to macros that utilize the newspliceprimitive. - 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_allmethod. Moved several list methods to inlines-calls ending with a jump to:ref_all.
⚠️ Breaking Changes & API Cleanups
- Slice Reversal: Removed the
:rslicemethod. The standard:slicemethod now detects and handles slice reversal automatically.:slicenow strictly returns a new slice object. - String Cleanup: Removed
:str :append,:str :init1, and:str :init3methods 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-indexhas been renamed toseq-elem-index.
Enjoy
Chris
Ombey
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
Bufferclass to support multiple cursors. - New
DocumentClass: Introduced to handle high-level structure (lines, paragraphs, words) and mutation, inheriting fromBufferwhich remains focused on characters and cursors. - Mouse Controls: The
Editwidget 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
Bufferclass now acceptsflags(e.g.,+buffer_flag_syntax,+buffer_flag_undo) instead of amodeargument. - Logic Migration: Moved selection methods (
:select_word,:select_line,:select_paragraph) into theBufferclass. - Native Optimization: Implemented VP assembly versions of cursor logic (
csr-sort,csr_cmp,csr-map-delete,csr-map-insert) for performance. - Refactoring:
- Renamed
Editclass methods:get_find/:set_findto:get_focus/:set_focus. Documentclass:select_blockupdated to handle multiple cursors.
- Renamed
🖥️ UI & Widgets
- New
MaskWidget: Introduced for drawing the opaque region of a view; now used by theEditclass to render selection layers. - Rendering Optimization: The
:region :paste_rectmethod now checks for area merges to reduce:drawcontext calls. - Scroll Widget: The
:visiblemethod now accepts optional flags to control+scroll_flag_verticaland+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 inbindor function signatures. This skips the binding entirely, meaningbindnow 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
defgetmethodanddefsetmethodto utilize:key symbols.
- Added
- Memory & Storage:
- Increased minimum allocated cell size to 24 bytes (size of a
:num). As a result,:arrayobjects now store up to 8 elements locally before requiring external blocks. :set_capnow auto-generates code to transfer local array elements to external storage.str_gapsize is now auto-generated based on:sys_memcell info.
- Increased minimum allocated cell size to 24 bytes (size of a
- Assembler:
lib/asm/scopes.incnow uses an environment to hold the symbol map for each scope. - Build System: Fixed
make-infoto correctly handle relative function paths during file product creation. - Profiling: Added
(time-it heading body)macro toroot.incfor simple code timing without full profiling setup.
Enjoy
Chris
Valisk
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.,
listis now:list). - Optimization: Reworked
num,fixed, andrealclasses to significantly reduce stack and register usage. - Optimization: Reworked
nums,fixeds, andrealsclasses to use improved vector inline helpers. - VTable Storage: Reworked
lib/asm/class.incto 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
realstructure types (replacing the redundantulongtype). - Added support for
fixedstructure types. - Reworked field type codes to be a simple enum.
- Added support for
- Native Functions: Lowered
starts-withandends-withto 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 appsoption to build only the application-level JIT native code. - Build Modes: Added
releaseanddebugoptions to themakecommand to set build modes foritandappsactions.- 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) -> envto application code; simplified VP and Lisp class construction usingenv-copy. - Constants: New
(fn-consts c ...)for creating a list of constant offsets.
🐛 Fixes & Refinements
- Editor: Fixed
load-dependsbug when used on the scratchpad buffer. - UI: Swapped the
copy/pasteicons for better UX. - Font App: Now copies the lowercase version of the character code.
- Demos: Updated Mandelbrot and Raymarch demos to utilize the new
realfields in messages.
Enjoy
Chris
Eden
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
realdata 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 | :nilbuilt-in function (Not EQL). - Equality Method: Added a new
'obj :eqlvirtual method to the base object class. - Quantization: Added
:quantmethods torealandrealsclasses.(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-deftovp-rdef. Addedvp-fdeffor defining float registers. - Constant Pools: Added
(fn-const c) -> offsetfunction and the'fn_constslabel to simplify the creation of VP function constant pools. - Register Binding: Updated
list-bind-argsto accept an optional destination register list, improving the extraction ofrealregister 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.
- Optimized
- Math Consolidation:
- Consolidated all
sinoperations to user_sin. - Consolidated all
sqrtoperations to usevp-sqrt-ff.
- Consolidated all
- Namespace Cleanup: Renamed application-level
vec-xxxfunctions tovector-xxxto prevent naming collisions with thesys_mathclass.
🖥️ 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
Big bag of changes for everyone.
🚀 Release Notes
✨ New Features & Apps
- New Todo App: Added a simple Todo application.
- New
sedApp: Introduced a simplesedcommand-line tool. Includes-xmode for matching and replacing submatches using$0-$9syntax. - 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
includescommand for auto-creation of.vpfile header includes to save time and improve checking. - Memory Streams: New
class/mstream/class.incVP 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
:erasevalue. - Images App: Upgraded to include file selection capabilities.
⚡ Core, VM & Performance
- Native VP Implementations:
- Lowered
hex-encodeandhex-decodeto VP functions (replacing all uses ofid-encodeandid-decode). - Lowered
(split str [cls])to VP code, serving as the basis for improved file scanning. - Moved
vp-min,vp-max, andvp-absinto the VP VM proper. Note: ARM64/x64 nativecmovandcseloperations can be used to implement these.
- Lowered
- File Encoding: Smarter string encoding for
.trefiles.
📚 API & Language Changes
- New Builtins & Macros:
- New
(read-blk stream bytes) -> :nil | strand(write-blk stream str) -> bytesbuiltin VP functions. - New
(getf-> obj field|(field offset) ...) -> (val ...)macro (counterpart tosetf->). - Added
(path-to-relative target [current]) -> pathto complementpath-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) -> valand(write-xxx stream val) -> streammacros.
- New
- Object & Class Handling:
- Updated
(obj-get ...)and(obj-set ...)to treat sub-structmembers as strings. Updatedgetfandsetfmacros to support this API. - Added
(type-of obj)support to all classes inclass/.
- Updated
- 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 codebookoption forhuffandunhuffcommands to select static codebook mode. - New
-s script_nameoption for batch/shell files to ease LLM tests (e.g.,./run_tui.sh -n 1 -f -s script_name).
- New
🐛 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
Lots of goodies this release.
-
New
opt-tail-callVP optimization. -
New
vpstatscommand. After amake ityou could run it on theobj/vp/folder etc withfiles obj/vp/ | vpstats. -
Used the
vpstatsinformation to frequency order thevpopts.inctests. -
None recursive
negamaximplementation for the Chess child task. Also took the time to restructure the move generation to take better advantage of the alpha/beta cutoff optimisation. -
optionsfunctions now usescallbackto 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) -> dlistfunction 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.trein 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 thebskipfunctions 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) -> streamLisp 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.incmodule.(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.lispandcmd/unrle.lispcommand line apps for rle/unrle use. -
Better
'num :hashmethod. Does some bit mixing rather than just returning the value unchanged. -
New
lib/streams/huffman.incmodule.huffman-compresshuffman-decompresshuffman-build-freq-maphuffman-write codebookhuffman-read-codebookhuffman-compress-staticandhuffman-decompress-staticfunctions. -
New
cmd/huff.lispandcmd/unhuff.lispcommand line apps for adaptive huff/unhuff use. -
New
cmd/hbook.lispcommand 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 thedump -c 16command.
Enjoy
Chris
Oenone
-
*Lockservice 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) -> idxand(bskipn cls str idx) -> idxcan now take the
input index as a negative value like the(slice seq start end)function. -
New
docscommand app. Used to scan source files for documentation. This is now
used by themake docscommand to scan documents in parallel. -
rfindchanged to use slice end index compatible style. -
New
(rbskip cls str idx) -> idxand(rbskipn cls str idx) -> idxfunctions,
uses slice end index compatible style. -
Fix for the Editor open files tree layout problem.
-
Fix for the Editor
action-find-functionproblem, due to the change inffi
syntax. -
New
'str :bfindVP 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
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 ...) -> valfunction and
(bits? val mask ...) -> :t | :nilmacro predicate defined to go with the
(bits)bitmask definition function. -
New
(eval-list list [env]) -> listinplace list element evaluation primitive.
This is making the:repl_eval_listmethod available at the user level. -
Improvements to the
casemacro. 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.incfile. Use ofstatic-q*where possible
and removal of redundant type conversions. -
Reference counted
netidobject 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.incclass. 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-branchtest added tovpopt.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 bylisp :read_symto
operate directly from the stream buffers without intermediate copies or string
object churn.
Enjoy
Chris