- Ported universal formatting facility from Common Lisp and made it available via library
(lispkit format)
- Library
(lispkit records)
now supports extensible records compatible to SRFI 131 - New procedures in library
(lispkit system)
:available-region?
,region-flag
,available-language?
,available-currencies
,available-currency?
,currency-name
,currency-code
,currency-numeric-code
, andcurrency-symbol
- New procedures in library
(lispkit port)
:display-format
,write-formatted
- New procedures in library
(lispkit bitset)
:fixnum->bitset
,bitset->fixnum
- New procedures in library
(lispkit system)
:terminal-size
,make-uuid-string
,make-uuid-bytevector
- New procedure in library
(lispkit draw)
:clear-drawing
- New procedures in library
(lispkit draw turtle)
:arc
,turtle-x
,turtle-y
,turtle-angle
,turtle-pen-down?
- New procedure
load-program
in library(lispkit core)
supports executing programs in an empty environment - Procedure
type-of
of library(lispkit type)
now returns a list of type tags (from most specific to least specific type) - Renamed library
(lispkit system os)
to(lispkit system call)
- Renamed
object
in library(lispkit type)
toobj
to prevent conflicts with other libraries - Extend library
(lispkit bytevector)
with proceduresbytevector=?
,bytevector->hex
, andhex->bytevector
- Reimplementation of procedure
open-file
in library(lispkit system)
supporting custom application paths - Enforce that imported (immutable) definitions cannot be mutated, unless it's in the REPL;
export-mutable
in library definitions enable mutability - Allow configuration of REPL output via format config
repl-format-config
of library(lispkit format)
- Improved display of OS-level exceptions and errors in REPL
- New libraries:
(lispkit format)
,(lispkit crypto)
,(lispkit archive tar)
,(lispkit list set)
,(srfi 239)
,(srfi 235)
. - New sample code:
Blockchain.scm
- Handle assets correctly in the LispKit REPL
- Improved R7RS regression tests
- Bugfixes in library
(lispkit bytevector)
for proceduresbytevector-copy
andbytevector-copy!
- Revamp of library
(lispkit graph)
with new procedures:graph-topological-sort
,graph-graph-weakly-connected-components
,graph-strongly-connected-components
, andgraph-shortest-paths
- New libraries:
(srfi 228)
,(srfi 233)
, and(srfi 236)
- Fixed bug leading to deadlocks when using text ports
- Fixed bug allowing to execute empty lists
- Fixed serious bug leading to an infinite loop when iterating through stack traces
- Limit stack size to prevent application crashes
- New procedure in library
(lispkit thread)
:thread-max-stack
- Major revamp of all type-related functionality: each type is now represented by a type tag/symbol; procedure
type-for
from library(lispkit type)
can be used to determine the type tag of a given object; breaking change formake-type
, which now returns 5 values (the first is a new type tag) - Support complex numbers for trigonometric and inverse trigonometric functions in library
(lispkit math)
:sin
,cos
,tan
,asin
,acos
, andatan
- Bug fixes in library
(lispkit draw chart bar)
and(lispkit enum)
- New library:
(lispkit math matrix)
- Fixed bug preventing LispKit to correctly determine the maximum number of threads
- Optimized display of objects of custom types
- Optimized code generation for lambdas without captured expressions
- Revamped code disassembly
- Fixed division by zero issues with truncate and floor procedures
- Removed duplicates in results of procedures
available-fonts
andavailable-font-families
in library(lispkit draw)
- Changed defaults for procedure
string-insert!
of library(lispkit string)
- Made procedure
open-file
of library(lispkit system)
work on iOS - Reimplemented and extended library
(lispkit enum)
making it compatible with SRFI 209 - Major revision of library
(lispkit clos)
- New procedures in library
(lispkit draw)
:bytevector->image
,draw-styled-text
,styled-text-size
- New procedure in library
(lispkit core)
:procedure-rename
- New libraries:
(srfi 118)
,(srfi 141)
,(srfi 149)
,(srfi 232)
,(lispkit bitset)
,(lispkit draw chart bar)
,(lispkit styled-text)
- New example code:
ObjectOrientation.scm
,DrawBarCharts.scm
,StyledTextDoc.scm
- Multi-threaded evaluator, executing multiple virtual machines in parallel
- Go-inspired channels for synchronizing threads
- Revamp of math libraries, addressing incompatibilities and fixing numerous bugs:
- Don't crash on division by zero for
fx/
- Fix bug making
exact
work also for negative numbers - Improved
inexact
when used with rationals with a very large numerator or denominator - Consistent interface for:
random
,flrandom
, andfxrandom
- Support unary argument usage for
fx-
,fl-
, andfl/
- Removed
fixnum-width
,least-fixnum
andgreatest-fixnum
- New procedures
make-flonum
,flexponent
,flsignificand
,flnext
,flprev
,fx-width
,fx-greatest
,fx-least
,fl-epsilon
,fl-greatest
, andfl-least
- Support many arguments for
flmin
,flmax
,fxmin
,fxmax
,fx+
,fx-
,fx*
,fx/
,fx=
,fx<
,fx>
,fx<=
,fx>=
,fl+
,fl-
,fl*
,fl/
,fl=
,fl<
,fl>
,fl<=
, andfl>=
- Don't crash on division by zero for
- New procedures in library
(lispkit math util)
:make-nan
,nan-negative?
,nan-quiet?
,nan-payload
, andnan=?
- New procedures in library
(lispkit system)
:physical-memory
,memory-footprint
, andsystem-uptime
- New procedure in library
(lispkit port)
:display*
- New procedures in library
(lispkit debug)
:stack-size
,call-stack-procedures
,call-stack-trace
, andset-max-call-stack!
- Enabled concurrency support for library
(srfi sicp)
- Included new libraries:
(lispkit thread)
,(lispkit thread channel)
,(scheme flonum)
,(srfi 18)
,(srfi 144)
,(srfi 208)
,(srfi 230)
- Fixed scope of
<sym>
in(let <sym> ...)
form, making it not accessible in the bindings - Exceptions now include more information about the active call stack
- Included tutorial for channels as new example code
- Support comments in command-line input
- Fixed bug compiling every procedure twice
- Fixed implementation of procedure
expt
- Fixed overflow issues in procedure
approximate
- Fixed crashes in the rounding functions when used with rational big integers
- Moved procedure
load
into library(lispkit core)
- Integrated simple bytecode optimizer
- Implemented support for tagged procedures
- Implemented support for procedures with optional arguments
- Included new libraries:
(lispkit math util)
,(lispkit math stats)
,(srfi 166)
,(srfi 227)
, and(srfi 229)
- Ported Peter Norvig's pattern matcher and algebraic simplifier from Common Lisp to Scheme and included it as new example code
- Extended sample code
Math.scm
- Fixed bug in logic to detect valid local definitions
- Handle libraries with errors more carefully to prevent crashes
- Fixed bit counting bug in library
(srfi 143)
- New procedures in library
(lispkit core)
:thunk?
,procedure-of-arity?
,procedure-name
,procedure-arity
,procedure-arity-range
,procedure-arity-includes?
,arity-at-least?
,arity-at-least-value
- Included new libraries:
(srfi sicp)
,(srfi 102)
,(srfi 217)
,(srfi 224)
- New sample code:
EUStats.scm
- Fixed serious bug in procedure
load
(previously,load
always returned no result instead of the result of the last executed expression). - Included new libraries:
(srfi 215)
,(srfi 216)
,(srfi 222)
,(lispkit text-table)
- Extended sample code
Math.scm
- New procedures in library
(lispkit draw)
:bitmap->bytevector
,bitmap-blur
,bitmap-crop
- Support tables and definition lists in library
(lispkit markdown)
- Support gzip and zlib container formats for deflate compression via library
(lispkit bytevector)
- Support symlink resolution via procedure
file-path
of library(lispkit system)
- Bug fixes in library
(lispkit system)
:home-directory
also supports a non-sandboxed mode,file-path
handles tilde correctly - Bug fixes for a few procedures of library
(lispkit archive zip)
- Included new libraries:
(srfi 219)
,(srfi 221)
,(srfi 223)
- Support for iOS
- Included an iOS REPL application
- Implemented simple support for associating description text with definitions (in Common Lisp style)
- Changed
let*
andletrec*
to allow for the redefinition of variables - Included new libraries:
(lispkit archive zip)
,(lispkit prolog)
,(srfi 143)
,(srfi 189)
,(srfi 214)
,(scheme red)
,(scheme fixum)
,(scheme bitwise)
,(scheme division)
- Extended library
(lispkit string)
with proceduresstring-decode-named-chars
andstring-encode-named-chars
- Extended library
(lispkit char)
with procedurechar-name
- Extended library
(lispkit core)
with new environment procedures:interaction-environment?
,custom-environment?
,the-environment
,environment-definable?
,environment-define
,environment-define-syntax
,environment-import
,environment-documentation
, andenvironment-assign-documentation!
- Extended library
(lispkit sqlite)
with proceduressqlite-database?
andsqlite-statement?
- Included support for an optional environment for the
compile
procedure from(lispkit debug)
- Included new sample code:
VisualizePointSets.scm
,Schelog.scm
- Migrated project to Xcode 12.5 and Swift 5.4
- Included new libraries:
(srfi 9)
,(srfi 180)
,(srfi 209)
,(srfi 210)
- Extended library
(lispkit log)
with syntaxlog-time
- Extended library
(lispkit debug)
with syntaxtime-values
- Extended library
(lispkit math)
with proceduresfxodd?
,fxeven?
,fx-width
,fx-greatest
, andfx-least
in library(lispkit math)
.; generalized procedurenumber->string
- Fixed procedure
environment-bindings
, renameddate-time-has-dst
- Fixed crash when execution gets aborted while loading and executing a file
- Included new sample code:
DrawTrees.scm
,EditDistance.scm
- Minor tweaks to the REPL
- Revision of library
(lispkit test)
involving procedurestest-group-failed-tests
,test-group-passed-tests
,failed-tests
,passed-tests
,current-test-epsilon
- Fixed comparison of complex numbers and numbers involving NaN in library
(lispkit test)
- Fixed small bugs in
(lispkit match)
and included support for=..
,*..
, and**1
- Refactored debugging functionality into library
(lispkit debug)
- New libraries:
(srfi 194)
,(srfi 204)
,(lispkit sxml)
,(lispkit sxml html)
, and(lispkit sxml xml)
- New libraries:
(lispkit sqlite)
,(lispkit combinator)
,(lispkit system os)
,(srfi 195)
and(srfi 196)
- Renamed library
(lispkit iteration)
into(lispkit iterate)
- Extended library
(lispkit date-time)
with proceduresdate-time-add
,date-time-add-seconds
,date-time-diff-seconds
,date-time-in-timezone
,date-time-same?
,date-time=?
,date-time<?
,date-time>?
,date-time<=?
,date-time>=?
, anddate-time-hash
. - Extended library
(lispkit core)
with proceduresthunk
,thunk*
,define-values
, andapply-with-values
- Extended library
(lispkit string)
with proceduresstring-normalize-diacritics
andstring-normalize-separators
- Extended library
(lispkit dynamic)
with proceduresunwind-protect
andtry
- Extended library
(lispkit control)
with procedureletrec-values
;define-values
can now be used whereverdefine
can be used. - Extended library
(lispkit system)
with procedureshome-directory
,system-directory
,path-extension
,append-path-extension
,remove-path-extension
,file-readable?
,file-writeable?
,file-deletable?
,directory-readable?
,directory-writeable?
, anddirectory-deletable?
. - Extended library
(lispkit draw)
with proceduresset-image-size!
,bitmap-size
,bitmap-pixels
,bitmap-exif-data
, andset-bitmap-exif-data!
- Support for timeouts in procedures handling HTTP ports in library
(lispkit port)
- Small tweaks to library
(lispkit csv)
- Library
(lispkit box)
now supports multi-value boxes - New sample code
Covid.scm
, including data up until June 19, 2020
- Several garbage collector enhancements
- Fixed serious memory leak in the compiler
- Fixed read command logic in the LispKit REPL
- REPL now uses default colors and thus also works with dark mode.
- Made field access of records type safe.
- New libraries:
(srfi 6)
,(srfi 54)
,(srfi 162)
- Extended library
(lispkit dynamic)
with assertion support:make-assertion-error
,assertion
,assert
- New sample code
Polynomials.scm
- New libraries:
(lispkit markdown)
,(lispkit disjoint-set)
,(srfi 167)
,(srfi 98)
,(srfi 87)
- Extended library
(lispkit system)
with proceduresasset-file-path
,path-components
,parent-path
,path
, andsource-directory
- Extended library
(lispkit bytevector)
with proceduresread-binary-file
andwrite-binary-file
- Extended library
(lispkit string)
with procedureswrite-file
,read-file
,string-pad-center
,string-empty?
;string-concatenate
now supports an optional separator character - Extended library
(lispkit port)
with proceduresopen-input-asset
,open-binary-input-asset
,call-with-output-bytevector
, andcall-with-output-string
- Extended library
(lispkit hashtable)
with procedurehashtable-empty-copy
;hashtable-hash-function
can now return a hash function for all hashtables - Extended library
(lispkit math)
with procedurefxsqrt
- Extended library
(lispkit core)
with procedureopt
- Extended library
(lispkit draw)
to support assets, color lists and drawing of HTML - Added character set
char-set:newlines
to(lispkit char-set)
- Extended sample code
Math.scm
- New sample code
SpellNumbers.scm
- Introduced asset concept, enabling libraries to depend on data files in an extensible fashion
- Extend pattern language supported by library
(lispkit datatype)
- Support
append-map
andfilter-map
in(lispkit list)
; supportfxsqrt
in(lispkit math)
; new functions in(lispkit string)
:string-empty?
,string-pad-center
;string-concatenate
now supports an optional separator character - Fix bug in
(lispkit set)
which was leading to multi-set behavior - New example code for solving Sudoku puzzles
- Garbage collector optimizations
- Refactored object types to make them more extensible
- A new REPL framework is available via a new framework
LispKitTools
- New library:
(srfi 175)
- Update dependency on NumberKit 2.3.2
- New libraries:
(srfi 174)
,(srfi 177)
- Migrated project to Xcode 11.1
- Ported code to Swift 5.1
- Simplify printed representation of procedures
- Rewrite of garbage collector: replaced recursive garbage collector with iterative version
- Completed hash functions of library
(lispkit hashtable)
- New library:
(lispkit comparator)
- Several fixes in
(lispkit math)
:integer->fx
renamed tointeger->fixnum
, introducedfxlogical-shift-right
andreal->flonum
, fixedbit-count
, fixedfxmodulo
to work with negative numbers - Statically link libraries. Removed Carthage support
- New libraries:
(lispkit stream)
,(scheme mapping)
,(srfi 146)
,(srfi 165)
,(srfi 173)
- Fixed memory leak involving recursive local functions
- Support uninterned symbols
- Implement algebraic datatypes in terms of more efficient internal functions
- Extension and re-implementation of library
(lispkit type)
- Include
miniAdapton
in the new third-party directory - Support custom keywords in
let-keywords
- New example code for generating mazes
- Migrated project to Xcode 10.2
- Ported code to Swift 5
- New libraries:
(lispkit csv)
,(lispkit match)
,(lispkit regexp)
,(lispkit gvector)
,(lispkit date-time)
- Extended
(lispkit vector)
and(lispkit list)
libraries - Support for
let-keywords
andlet*-keywords
in library(lispkit control)
- Complete re-write of library import and export logic fixing numerous bugs and incompatibilities with R7RS
- Improved reporting of errors in library definitions
- Support call tracing for individual procedures
- Make the last three REPL results available via
*1
,*2
, and*3
- Allow
@
as initial character in identifiers
- New libraries:
(lispkit log)
,(lispkit char-set)
,(scheme char)
,(srfi 14 ascii)
,(srfi 101)
,(srfi 125)
- Support Scheme libraries from R7RS large/Red edition:
(scheme box)
,(scheme charset)
,(scheme comparator)
,(scheme generator)
,(scheme hash-table)
,(scheme ideque)
,(scheme list)
,(scheme rlist)
,(scheme set)
,(scheme sort)
,(scheme stream)
,(scheme text)
,(scheme vector)
- Extended library
(lispkit test)
: support nested test groups, approximate tests, and handle exceptions correctly - Handle closing of ports correctly in library
(lispkit port)
- Fix major bug in library
(lispkit system)
affecting the composition of file paths - Bug fixes affecting
fold-left
,max
,min
,numerator
,denominator
,log
,magnitude
,gcd
andlcm
, as well as the escaping of symbols - Move from
#\dx????
syntax to#\x????
to represent character literals - Return more user-friendly error messages for operating system errors
- Migrated project to Xcode 10.1 and ported code to Swift 4.2.1
- Included implementation of "Tiny CLOS" as library
(lispkit clos)
- New SRFI libraries: SRFI 23, SRFI 34, SRFI 39, SRFI 95
- Migrated project to Xcode 10.0 and ported code to Swift 4.2
- Small bug fixes in library
(lispkit draw)
- Fixed serious hashing bug (crashing LispKit)
- New SRFI library: SRFI 14, SRFI 16
- Several substantial extensions of library
(lispkit draw)
- Support for turtle graphics via library
(lispkit draw turtle)
- New example code showcasing
(lispkit draw turtle)
features - New SRFI library: SRFI 11, SRFI 51, SRFI 161
- Bugfixes and name changes in
(lispkit draw)
- New example code showcasing
(lispkit draw)
features
- Allow importing multiple libraries with one
import
invocation - Mark continuations correctly and fix
continuation?
- Turn
current-input-port
,current-output-port
, andcurrent-error-port
into parameter objects - New library:
(lispkit draw)
- New SRFI libraries: SRFI 111, SRFI 112, SRFI 113
- Fixed bugs in SRFI 69
- Extend
(lispkit test)
to be more compatible to similar libraries
- Fix memory leaks
- Provide a comfortable command-line interface supporting both a read-eval-print loop and the execution of scripts
- Prelude and libraries path preferences are now handled correctly and do not result in access issues anymore
- Programs blocking on functions like
read
can now be terminated - Minor bugs in bitwise operations for exact integers of arbitrary size fixed
string-split
now returns a list instead of a vector- Complete rewrite of the error reporting subsystem, including support for
file-error?
andread-error?
- New library:
(lispkit test)
- New SRFI libraries: SRFI 69, SRFI 129, SRFI 137, SRFI 145, SRFI 151
- New example code for coroutines, HTTP support, and a small compiler for arithmetic expressions
- Migrated project to Xcode 9.3 and Swift 4
- Bug fixes (esp. in
syntax-rules
) - Fixed logic for referencing
unquote
, etc. inbackquote
. - Include native date/time operations and functionality for accessing user data
- Native support for a few common string functions
- Support for
read-token
(generalization ofread-line
) - Added libraries
(lispkit stack)
,(lispkit queue)
,(lispkit logic)
- Implement bitwise operations for exact integers of arbitrary size
- Complete rewrite of the error reporting and representation sub-system
- Preparations for managing source locations
- Support simple HTTP API
- Support compression for bytevectors
- Implement call tracing
- Fixed bug preventing some internal definitions to not work
- Support all standard R7RS small Scheme libraries
- Support for:
(srfi 158)
,(lispkit wt-tree)
,(lispkit object)
- Support for tail patterns in
syntax-rules
- Support for
features
andcond-expand
- Support for
include
andinclude-library-declarations
- Support for
syntax-error
- Support for
define-values
- Support a new lightweight custom type declaration mechanism via
make-type
- Added SRFI 112-style support for human-readable information about the hardware and software configuration on which LispKit is being executed
- Added support for the following libraries:
(srfi 63)
,(srfi 64)
,(srfi 128)
,(lispkit iterate)
,(lispkit json)
- Migrated project to Xcode 9 and Swift 4
- Adopted Swift 4-version of NumberKit
- Support for custom ellipsis in
syntax-rules
- Fixed serious scoping issues in
syntax-rules
- Fixed hash functions to prevent overflows
- Support for R6RS enumeration operations
- Implemented native support for fixnum (fx*) and flonum (fl*) operations
- Completed support for all R7RS string operations
- Completed support for all R7RS character operations
- Added common list operations (sort, filter, partition)
- Completed support for all R7RS vector operations
- Automatically load libraries
- Made stack grow automatically
- Support externally triggered termination of evaluation – Implemented new system library; added new file functions
- Implemented support for R7RS-compliant exceptions
- Implemented support for multiple return values – Ported various SRFIs and included them in the LispKit package
- Implemented environments as first-class values
- Introduced a new R7RS-compatible library abstraction
- Reimplemented all functions using libraries
- Migration from Swift 2.2 to Swift 3.0
- Implemented R6RS-compliant hash tables
- Implemented R7RS-compliant parameters (supporting dynamic scoping)
- Implemented R7RS-compliant record types
- Implemented R7RS-compliant promises
- Implemented R7RS-compliant port library, supporting both textual ports and binary ports; built on top of Foundation API (not using low-level C port abstractions)
- Fixed a few cases where the runtime didn't do proper tail calls
- Implemented full support for
call/cc
- Revised bytecode instruction set. Added documentation to the LispKit Wiki.
- Implemented compiler optimization framework. Turned compiler into a two-phase compiler.
- Optimized usage of variables for function arguments.
- Initial version consisting of the framework and a very simple read-eval-print loop
- The LispKit framework implements a subset of the
R5RS Scheme standard; the
biggest feature missing is support for
call/cc
- LispKit coonsists of a compiler generating bytecode and a virtual machine which interprets the bytecode
- The framework is incomplete and work in progress