- Support for all major JSON standards via libraries
(lispkit json)
and(lispkit json schema)
supporting JSON Pointer (RFC 6901), JSON Path (RFC 9535), JSON Patch (RFC 6902), JSON Merge Patch (RFC 7396) and JSON Schema (2020-12 Internet Draft specification). - Support for HTTP-based networking via libraries
(lispkit http)
,(lispkit http oauth)
, and(lispkit http server)
, including support for OAuth 2.0 (RFC 6749) and simple HTTP servers. - Deeper integrations into macOS and iOS operating systems via libraries
(lispkit system keychain)
and(lispkit system pasteboard)
. - New library for handling URLs:
(lispkit url)
- New concurrency features with support for atomic boxes via library
(lispkit box)
and thread-safe shared queues via library(lispkit thread shared-queue)
. - Serialization of data into a binary representation for a subset of LispKit's data types via library
(lispkit serialize)
. - Support for drawing a variety of different types of bar codes via library
(lispkit draw barcode)
- New procedure in library
(lispkit thread)
:abort-running-threads
- New procedures in library
(lispkit system)
:available-network-interfaces
,region-continent
,region-parent
, andregion-subregions
- New procedures in library
(lispkit string)
:url-encode
andurl-decode
- New procedures in library
(lispkit bytevector)
:bytevector-zip-header?
andbytevector-gzip-header?
- New procedures in library
(lispkit markdown)
:markdown->sxml
,blocks->sxml
,text->sxml
,markdown->raw-string
, andblocks->raw-string
- New/updated procedures in library
(lispkit dynamic)
:error-object->string
anderror-object-message
- New special forms in library
(lispkit control)
:if-let*
andwhen-let*
- LispKitRepl now supports asynchronous libraries (libraries which need a run loop) via command-line argument
-x
- New sample code:
Keychain.scm
,WebAPIs.scm
, andWebserver.scm
- 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