Changelog
All versions of LIPS Scheme. It includes all features, bugfixes and breaking changes.
1.0.0-beta.23
Breaking
syntax-rulesnow treats_as the R7RS wildcard: it matches any input without binding, is transcribed verbatim as the literal symbol_in a template, and the pattern keyword position is ignored.set-object!4th argument is now strict option to prevent unboxingcurrent-secondnow returns an inexact value (as per R7RS spec)float,ceiling,round,truncatenow return inexact on inexact- integers in scientific notation now properly return float (unless marked exact)
Feature
- add
free-identifier=?#296 - add SRFI-197 (Pipeline Operators):
chain,chain-and,chain-when,chain-lambda,nest,nest-reverse - a missing R7RS
exact-integer-sqrtfunction - add
raise-continuablefunction - new
guardmacro (based on R7RS spec) - add procedure argument to
assoc - add
write-sharedandwrite-simpleprocedures - add missing
string->listfunction - add R7RS compatible
string-copyand missingstring-copy!
Bugfix
- fix
appenddropping a#voidelement ((append (list #void) '(y))), which also made quasiquote templates silently drop a literal or unquoted#void - fix handling of free variables from syntax rule expansion #546
- fix unquote vector/array in tail position
- fix define inside syntax-rules #170
- fix unquote vector/array in tail position
- fix nested ellipsis with empty identifier
- fix resolving nested identifiers in syntax-rules
- fix trailing ellipsis
(x ... last)in recursive macro - fix
syntax-rulesliteral matching for a literal that denotes a user-defined identifier - fix renaming inside
quotein asyntax-rules - fix
denominatorof0 - fix
string-refwrong exception when index out of range - fix
call-with-valueswith promises - fix using LIPS inside web workers #555
- fix for Chibi R7RS tests:
- fix handling an empty symbol
|| - fix
char-foldcaseandboolean=? - fix
call-with-values,with-exception-handler, anddynamic-wind - fix
bytevector-copy!argument semantics and overlapping copies - fix
syntax-rulesellipsis escape(... <template>)to substitute pattern variables in the escaped template - fix
syntax-rulesgiving a literal priority over the ellipsis when the ellipsis identifier is also declared as a literal - fix vector literals in a
syntax-rulestemplate being turned into an improper list - fix
syntax-rulespattern(x ... y . rest)not matching an improper (dotted) list - fix
syntax-rulespattern(x ... . rest)(ellipsis before a dotted rest), which crashed the template transcriber - fixesdefine-valueswith a dotted tail, e.g.(define-values (x y . z) (values 1 2 3 4)) - fix
bytevector-copy!,utf8->string, andvector-copy! - fix
list-copyon non list - fix
lcmandgcdwhen called without arguments andlcmwhen called on inxact value - fix
odd?andeven?on negative values - fix
denominatorandnumeratoron reduced rational - fix
roundon rationals (round half to even) - fix
rational?returning#ffor finite inexact numbers (e.g.3.5,1e308) - fix
gcdwith a0argument ((gcd 0 5)), which also made adding a rational fold from 0 (e.g.(+ 1/2 1/4)) throw "Division by zero" - fix complex arithmetic broken when a real is coerced to a complex (
(* 3.14 +i),log/atanhof negatives) while keeping(make-rectangular x 0)real - fix integer square root of
4(used byexact-integer-sqrt) returning1 - fix infinite loop when dividing complex numbers with non-finite parts
(e.g.
(/ +nan.0+nan.0i +nan.0+nan.0i)) and when converting a non-finite inexact to exact ((exact +nan.0),(exact +inf.0)), which now signal an error instead of hanging - fix
atanof a single real argument ((atan 0.5),(atan 2),(atan 1/2),(atan +inf.0)) throwing "car of nil" - make numeric comparison (
=,<,>,<=,>=) exact instead of coercing to float, fixing wrong/non-transitive results (e.g.(= 9007199254740992.0 9007199254740993)) and(< 1 1/2)/(> 1 1/2) - fix exactness of complex numbers: an imaginary literal (
0.5i) and a real number now have an exact0for the missing part, so(+ 1/10 0.01i)=>1/10+0.01iand(- 0.01 +1/10i)=>0.01-1/10i; complex division is now inexact whenever any part is inexact, so(/ 1 1/2+1.0i)=>0.4-0.8i - fix
maxandminto return inexact when any of the argument is inexact - fix
expton float arguments - make
log/sin/cos/atanreturn inexact values - fix Lexer to handle all unicode codepoints
- fix
read-bytevector!return value - support start/end in
write-bytevector - fix parsing
#trueand#false - fix parsing strings, symbols, and numbers
- fix repr of symbols with special characters
- fix foldcase on unicode characters with more that one codepoints
- fix
(a #;. b)and(a . #;b)to throw parse error
- fix handling an empty symbol
1.0.0-beta.22
Breaking
- syntax extensions now expect a reference to a function or a macro
- replace
set-obj!withset-object!#439 - stack trace in exceptions is now
Error::__stack__ - remove
..macro #500 macroexpandis now a function (like in Common Lisp) instead of a macro- remove
parent.frameandparent.frames - remove
Symbol(__data__)from quoted data - swap
fold-rightandfold-left truncatenow properly return integerlips -edoesn't print the output anymore- remove
with-tagsmacro andmake-tagsfunction
Features
- add debugging helpers (
is-debug,set-debug!, andinspect) - add
set-hash-syntax!function #477 Environment:docnow returns doc string for functions and macros additional to variables- improve and unify Syntax Errors
- show meta information about 'stack' trace about errors in REPL with
-t/--traceflag - implement simple regex based syntax-extension
- recursion performance improvements
- new interpreter with TCO and Continuations inspired by js-scheme #127
- new higher order function
matcherthat return function that check if object is the same - new
stack-traceandtracefunctions - improve error handling
- add core
^bitwise xor function - add
generator,async-generator, andmake-coroutine-generatorfunctions - add support for
truncateon rational numbers - add
#!cycle/#!no-cycle,#!trace/#!no-traceand#!promise/#!no-promisedirectives
Bugfix
- fix doc string for
make-rectangular -inf.0/+inf.0are now real lips numbers- fix boolean operation on
+nan.0#472 - fix swallowed errors in async syntax extensions #470
- fix cleanup after parsing syntax extension throws an error
- fix unwanted argument unboxing from lips constructors #483
- fix warning about rejected Promise in try..catch #482 #484
- fix overwriting internal state when using multiple Interpters #495
- fix syntax extension conflict with datum syntax
- fix
unset-special!not removing regex based syntax extensions - fix hygiene of named
let - fix module path when load throw exception
- fix handling unsupported operations on rational numbers
- fix exit code for
lips -eon exception - fix
vector-fill!off-by-one error - fix parsing of syntax extensions
- fix repr and type of iterators
1.0.0-beta.21
Breaking
(range n 0 -1)don't include 0 like in Python #442findnow returnfalsewhen item not found- REPL history is now in
~/.lips_historyand errors are in~/.lips_error
Feature
- allow to use auto-indent with Node >=18.19.0
- add metadata to the parser #414, #416
- expose
boxandunboxfunctions - add line number to errors #416
- allow using
define-macrowithlambdaexpression - add uninterned symbols SRFI-258
- allow using find with any atom #394
- add
freeze-prop!andfreeze-list!functions - add default export
- allow to pass instance of Lexer to parser (so you can extend it)
- improve random number generator
Bugfix
- fix exception when handling parse error for lonely
)#417 - fix unboxing arguments of LIPS created classes #411
- fix space in front of output in REPL #406
- fix
call-with-portin R7RS,call-with-input-file, andcall-with-output-filein R5RS to catch errors and don't close the port - fix
expt#426, #424 - remove stripping
\rcharacters from Lexer (that is used by ports) - unpack
valuesonly in REPL - fix duplicated location in recursive syntax-rules macro error #429
- fix
angleandmagnitudeon real values - fix broken REPL when parser extension throw an error in the middle of expression #430
- fix parsing syntax extension #432, #433
- fix macroexpand on let macro defined in Scheme
- fix error when evaluating empty string #434
- make
(features)read only #447 - make
lips.specials.__builtins__show up indir. - fix parsing with meta data #453
- fix formatting of code with single line comments #458
- fix rounding on big int rationals
- fix scope variables in
domacro #468 - fix REPL for Node 24 #466
1.0.0-beta.20
Feature
- allow to call
loadwith@lipsprefix #354 - add string interpolation #321
- add default repr for R7RS records
- add parenthesis matching in Node.js REPL
Bugfix
- fix duplicated identifiers in syntax-rules (case of SRFI-239 example implementation)
- fix
loadof absolute path in Node - fix require of LIPS package from Node
- fix transforming
syntax-rulesellipsis that expand into #void - fix improper lists in
syntax-rules#360 - fix handling of REPL in Emacs (
run-scheme) - fix
promise?predicate - fix handling of
|1|1and|a|b|c|symbols - fix repr of anonymous classes #361
- fix handling of escape characters in symbols
- fix processing list with nested unquote-splicing #362
- fix exception during error from eval #362
- allow to catch exceptions from eval
- fix else keyword as only expression in cond #366
- fix clash of variable named
listin namedlet#398 - fix Node REPL flickering
1.0.0-beta.19
Breaking
- change
get-environment-variablesandget-environment-variablereturns nil and undefined in the browser true,false, andNaNare no longer parser constants #292- get rid of node polyfills from output files
evaluseinteraction-environmentstead ofcurrent-environmentby default- remove support for string argument to
read#327 - make
nullfalsy value #330 - remove
nilparser constant #332 - replace
undefinedwith#void, andnullwith#null - characters are again unboxed into strings by JavaScript code #329
- code that throw exception now return exit code 1
- change order of arguments in
take (type #void)(JavaScriptundefined) is nowvoid
Features
- add
vector-for-eachandvector-copy!function from R7RS - add
string-for-each,string-downcase, andstring-upcasefrom R7RS - add
typecheck-numberfunction - add
char-foldcaseandstring-foldcasefunctions - add
list-set!andnth-pairfunctions - add
SRFI-61,SRFI-139, andSRFI-210 - add
continuations?function - add
iterator->arrayfunction - add immutable strings as in R7RS spec #285
- add R7RS
char<...>?andstring<...>?functions #298 - improve syntax-rule exception message (appending macro code)
- update
logto accept two arguments #301 - allow to use
data-bootstrapattribute on script tags - make
atanwork for complex numbers - save error logs in home dir
- add timestamp to error logs
- make
+inf.0and-inf.0parser constants - add
zipprocedure (inspired by Lodash) - add
with-input-from-stringandread-all#327 - add
#!fold-caseand#!no-fold-casedirectives #342 - add
dropprocedure - allow to use unquoted symbols in
-->to get the function - add
regexprocedure (rename from%rused in bootstrap.scm) - support unterminated strings in REPL #280
- expose parser and lexer instance from syntax extensions #308
Bugfix
- fix
let-valuesto allow binding to list #281 - fix wrong strings in
string-fill! - fix
string-set!to mutate the string and work on any expression - fix tokenizing regex that ends with hash
- fix bookmark on SRFI-210 document #287
- fix
syntax-rulesin macrodefine-value#290 - fix indentation of
let-values - various fixes to
syntax-rules - fix
procedure?to return true for continuations - fix
lips --helpscreen - fix
cond-expandto skip not-matched symbols - fix shadowing
syntax-rulesidentifiers with let #291 - fix nested syntax rules with symbols after nested ellipsis
- fix Dark Mode colors and scrolling of the page when using Bookmarklet on English Wikipedia
- remove dependencies on
condfrom-->macro so you can use use-->insidecond - fix handling of recursive
flattensyntax-rulesmacro #304 - fix syntax-rules macro that manipulate code (see tests/syntax.scm and undswap macro)
- fix
(read)in the Web REPL - fix Node REPL with
npm install#305 - fix formatting
syntax-rules - improve floating point representation and parsing
- fix bookmark when hovering over boolean values
- fix quoted cycle in REPL #313
- fix set-repr! on base class #314
- fix
reprof delay expressions #315 - fix
try..catch#317 - fix handling
^and$syntax extension #318 - fix mixed values in
let*-values#322 - fix
domacro #324 - fix
string->numberthat leads to NaN #326 - fix unintentional unboxing in
iterator->array#328 - fix
replacewith asynclambda#319 - fix
valueswithout arguments #331 - improve working of REPL in Emacs
- fix
(expt +i +i) - fix let with duplicated variables #335
- fix escape ellipsis in syntax-rules #334
- fix parsing inexact complex without real part and
inexact->exactprocedure #340 - fix Petrofsky let #341
- fix
reprof cycles - fix parsing regex that have escaped open bracket
- fix parsing quotation without data
- fix reading syntax-extensions from input ports
- fix parsing syntax-extensions that start with
#for#t#343 - fix repr of curried function (output of
curry)
1.0.0-beta.18
Breaking
- change undocumented arguments to
lips.execinto an object - change default export into named exports in ES Module
Features
- add R7RS
guardmacro - add R7RS
parameterizeandmake-parameter - add
shufflefunction - add support to ES Modules #254
- add support for
(scheme-report-environment 7) - add a way to compare custom instances with
equal?#270 - add support for
equal?on records #273 - expose
lips.set_fsfunction #256
Bugfix
- remove evaluating of async list data as first argument
- fix
number->stringfor binary numbers - fix macro expand on let with more than one binding
- fix shallow
list->array - fix resolving promises inside quoted promise realm
- fix undocumented symbol syntax extensions
- fix odd? even? on non integers
- fix object literals with null value #264
- fix version and date in executable #261
- fix error on extra close parenthesis #263
- fix
scheme-report-environment#268 - fix writing to binary ports
- fix unboxing object literals
- throw error on comparing complex numbers #248
- make
integer?works for normal native numbers - fix parsing newline character literal
- fix reading local files in browser #276
- fix parsing invalid expression
(1 . 2 3)#245 - fix invalid error message for not matched
syntax-rules#243 - fix silent error when class don't have parent #272
- fix
try..catch#163
1.0.0-beta.17
Breaking
- chars are now not automatically unboxed to strings #233
Features
- make bookmark REPL dockable #205
- make Strings iterators that return characters
- improve object literals #237
- better error message with exception on invalid string literal
- add non-standard
with-input-from-stringfunction
Bugfix
- fix using performance object for older version of Node
- fixing escaped symbols in CodeMirror
- fix parsing strings #193
- add proper error message to
-->macro #200 - fix
performance.timeOriginon Node 12 #207 - fix string->list to handle longer code points
- fix numerator and denominator #213
- fix Map object repr
- fix parsing regular expressions #238
- fix exception when syntax-rule macro contain undefined
- fix REPL clearing stdin when using read-line #253
- add proper handling of Paste Brackets mode in REPL for NodeJS
1.0.0-beta.16
Breaking
- replace
get-scriptwithget-resourcethat work in Node and in browser and allows to load CSS
Features
- add
object->alist,command-line, andsymbol-appendprocedures - add SRFI: 193
- add
get-environment-variableandget-environment-variables - improve bootstrapping by using same URL of the script if possible
- add
set-global!macro - add
current-second,current-jiffy, andjiffies-per-secondprocedures - improve error message in
-->macro when function not found
Bugfix
- fix async script execution in browser #190
- fix type of
process.env - fix module load path when load scripts from Node.js
- fix bug in
quasiquoteandunquote-splicing#194 - fix
inexact->exacton integers #199 - throw error on missing parentheses #198
- fix empty syntax extensions as functions
1.0.0-beta.15
Breaking
- bootstrap URL now require full URL to the file with standard library
Features
- improve performance of
**operator when JS support exponential operator - add alias for
string-joinandstring-split - lists are now iterators
- add optional
=>syntax tocondmacro (as per R7RS) - make
undefinedparser constant - compile into binary CBOR format with LZJB compression
- add support for
logof complex, rational, and negative numbers - allow to define shorthand object literals #185
- add Buffered Output Port and
flush-outputfunction
Bugfix
- fix scoping issue in nested
syntax-rules - fix
reprof object that have space in key - property throw error when name is used without ellipsis
- fix using dot notation inside syntax-rules macros
- typecheck
string->symbolandsymbol->string - fix
parent.frameinsideInterpreter - fix
evalwithout env - fix quote as delimiter
- fix comma dot as two tokens
- fix printing symbols that have brackets or quotes
- fix resolving dot notation (e.g.
lips.LComplex.prototype.modulus) - fix
reprof native type prototypes (e.g.LComplex) - fix using prototypes inside objects (e.g.
(object :foo Number.prototype)) - fix
sqrtof rational where numerator or denominator is float - fix
sqrtof negative real that are like integers #175 - fix boxing NaN value
- fix
lengthof nil - fix trimming spaces in
Env::set - fix
reprof symbols with impossible characters created withstring->symbol - fix
eqv?on same pairs - fix
abson inexact numbers that can be represented as integers #181 - fix extra newline when calling print in browser #186
1.0.0-beta.14
Breaking
- remove
zipfunction that just(map list l1 l2 ...) raisenow throws object as is (just like JSthrowkeyword)errornow throws LipsError exception as per R7RS
Features
- R7RS datum labels
- allow to use
set-repr!on records (record type name is now a class) - match function return
#finstead ofnilwhen fail to match (so it work incondorif) - new functions
complement,always,once,flip,unfold(inspired by Ramda) - add codemirror hits for std lib symbols
- experimental compiler to JSON (not 100% ready)
- add support for
expon complex numbers - add R7RS
error-object?,error-object-messageanderror-object-irritants - make
NaN,nullandundefinedparser constants - return proper repr of instances of
define-class
Bugfix
- fix
set-repr!on classes - fix conflict with jQuery plugns in bookmark
- fix swallowing errors when printing values in Node REPL
- fix mixed quoted and normal promises in let binding #154
- fix problem were await affect quoted promise in macros (e.g.
begin) #153 - typecheck second argument to
set-obj! - fix
casemacro (use implementation from R7RS Errata) - fix async constructor in
define-class - fix methods with improper lists in
define-class - fix null inside quasiquote
1.0.0-beta.12
Breaking
envanddirnow returns symbols instead of stringsreprandtypeof quoted promises now return#<promise>andpromise- numbers and characters properties are immutable
Features
- create minfied std scheme file for faster bootstrap
- add
list-copy - add
define-record-type - add
escape-regexfunction - make
aproposaccept symbol as argument - add doc strings for
**interaction-environment**and**internal-env** - add
letrec*that in LIPS is exactly the same asletrec - add
pragma->sxmlmacro that definesxmlmacro (default ish) - hide
fsin internal env - automatic bootstrapping of
fswith BrowserFS if exists pprintin both REPLs now print in color #33- add
nan?,infinite?andfinite?functions - add
+nan.0and-nan.0(R7RS) - properly handle negative inexact zero
- new
environment?function - add
current-directoryandset-...from SRFI-170 - add gensym literals (e.g.
#:foo) - fix pretty print of different cases of
let - add binary input/output procedures from R7RS
- update vector functions that in R7RS get start and end arguments
- add state props and better repr to quotedPromise
Bugfix
- fix prism highlighting of names (for new context help)
- fix error when using help in node REPL and there are no doc string
- fix escaping regex operators when using string with
apropos - fix typechecking of number operators #128
- fix indent of call-with- (input-file, output-file and port)
- fix eq? and type of NaN #130
- fix number predicates
- fix
real-partfunction - fix parsing complex with 0 inexact imaginary part
- fix option -t --trace in Node REPL
- fix
eqv?on exact and inexact numbers according to R7RS spec - fix
exact->inexacton complex numbers - fix arithmetic with single complex value
- fix parsing regex that have escape slash and parenthesis (
#/( \\/)/g) - fix parsing regex that have single slash in class brackets (
#/\/[^/]+$/) - fix division on single argument (now
(/ n)==(/ 1 n)) - fix complex operation that result in real (e.g. multiplication over conjugation)
- fix
list-refaccording to R7RS errata - fix formatter (pretty print) on multiline strings and atoms
- fix formatter indent of
let* - fix repr of vectors (arrays with empty value)
- fix promise quotation of object macro call #139
- fix unquote-splicing inside direct quasiquote vector #140
1.0.0-beta.11
Breaking
- remove repr of HTMLElement (it's now default instance of a class)
- regular expressions are now prefixed with hash like in Gauche e.g.
#/foo/
Features
- add support for quasiquote on objects and vectors
- interning symbols mechanism #106
- new macro
quoted-promiseand syntax'>#54 - new function await that return original promise from QuotedPromise
- bytevector functions (R7RS)
- improve detecting and repr of iterators
- add
eofvariable to global env - add
aproposfunction - new incremental Lexer that allow to modify parser while it's running
- add SRFI-10 sharp-comma
- new syntax try..catch..finally
- new parallel
list*macro - new
scheme-report-environmentfunction (R5RS) - update
**to work on negative numbers
Bugfix
- fix resolving promises on vectors and objects
- fix context in methods of plain objects #103
- fix
equal?on typed arrays - fix detecting user repr (when object is subclass)
- fix calling port methods (e.g. calling
get-output-stringfunction) - fix prism highlighting of multiple regular expression
- fix parsing chars for Unicode outside of BMP
- fix when try..catch is promise that rejects and catch throws
- fix resolving promises when apply function they are not executed in sequentially
- fix
evalbuiltin function to evaluate everything
1.0.0-beta.10
Breaking
- change behavior of
andandorto work likeif(#fonly falsy value) - vectors and object literals are immutable (to prevent weird sharing data bugs)
Features
- add
promise?function - improve
append/append!to work according to spec and accept multiple arguments - set
globalandwindowto undefined when not in Node or Window respectively - add
selfas global context for Node, browser and worker - add repr of global object
- add repr of classes
- add support for creating anonymous classes
- add
do-iteratormacro - add repr of
MapandSet - add
digit-valuefunction - add
#dprefix for decimal numbers - add
includemacro - add
--debugoption to executable (that load src file instead of dist) - add
cond-expandsyntax macro - add new
native-symbol?function - add warning about using
’quote, with code example to execute to enable it - add
__dirnameand__filenamevariables to Node - add support for variables in method properties of classes (like in JS)
Bugfix
- fix load file that have shebang
- fix repr of eof object
- fix read from input-string-port #85
- fix running web worker from file generated by babel (dist)
- fix repr of lambda function (no
:lambdaas name) - fix parse complex big num (e.g.:
100e+100i) - fix repr of scheme functions if Function.prototype.toString was modified
- fix repr of iterators
- fix access symbol properties of binded functions (LIPS internals)
- fix duplicated line in executable #89
- fix
char-numeric?andchar-alphabetic?to handle all unicode - fix characters with more then one code point
- fix
reprof functions that are created byself.eval - fix formatting strings in REPL
- fix
set!nilto object field - fix
lambdaindefine-classthat have improper list as arguments - throw exception when applying function to improper list
- fix
joinwith nil - fix accessing JavaScript objects in syntax-rules macros
- fix write of strings with newline
- fix indent of
whenandunless - fix usage of Drag&Drop with bookmarklet on pdf files
- fix accessing methods on pattern variables in syntax macros #83
- fix quasiquote to work like quote if not unquotes (R7RS spec)
1.0.0-beta.9
Breaking
- throw exception when calling
(-) ifit now see #f the only falsy value to match Scheme spec
Features
- add
let-values,let*-valuesanddefine-valuessyntax macros - add
exact-integer?andvector-appendfunctions - add
stderrport andcurrent-error-portfunction - add environment as second argument to
load(according to R7RS spec)
Bugfix
- fix empty vector literal
- fix edge case in nested syntax-rules when variable in parent got expanded into identifier
- fix nesting unquote in quasiquote #53
- fix order of evaluation in
,,@x - fix name collision while catching DOM exceptions #84
- fix integer? and other number type checks
- fix warnings about require while loading from Webpack
- fix unquote-splice multiple lists
- fix syntax highlighting (prism scheme syntax patching)
- fix load inside let that have global variable defined that was not undefined
- fix creating LIPS classes from SXML
1.0.0-beta.8
Breaking
- internal properties like
nameare now__name__
Features
- add
raise(alias forthrow) andwith-exception-handler(that wrapsthrow..catch)
Bugfix
- fix truncate core function
- fix splice nil in quasiquote inside list #68
- fix do macro inside syntax-rules #81
- fix
string-copyandstring-set! - fix
errorfunction to work like R7RS spec - fix edge case in
syntax-rulesfound when executing SRFI-26 cut macro - fix unboxing of LIPS values when calling native JavaScript functions
- fix unboxing of callback functions #76
1.0.0-beta.7
Breaking
- remove second argument from
filtercallback - change mapping
&frommake-objecttoobject - parser is now async and parser extensions are evaluated in parse time
Features
- new
randomprocedure - string repr of all procedures and macros in REPL now have name
- add
sxmlmacro
Bugfix
- fix write vs display of character atoms
- fix mixed case of named characters (e.g.:
#\Space) - fix
domacro scope according to R7RS - fix vector literals inside quoted list #79
1.0.0-beta.6
Breaking
real?now return true on integers (bigInts)set!throw error when variable not defined
Features
- new
string->vector,vector->string,vector-mapandstring-map(R7RS) - new
dynamic-windfunction (R7RS) - make
equal?compare plain objects
Bugfix
- fix repr of HTMLElement
- fix creating LCharacter from scheme string
- fix
domacro with let like scope for next values - fix line breaking in formatter
- fix parsing options in executable (fix for
alias lips="lips -q") - throw exception when evaluating
(if) - fix
object?andplain-object? - throw exception when invoking syntax that shadow literal identifier
- fix parsing cons dot in
(() . foo)
1.0.0-beta.5
Features
- new function
make-list (/ 0.0 0.0)return NaN- bookmarklet always fetch latest version
case-lambda,unlessandwhenhygienic macros (code from R7RS)- new
boolean=?,port?andsquarefunctions (R7RS) - new
inexactandexactaliases (R7RS) - rational
numeratoranddenominatorfunction (R5RS) - complex
imag-part,real-part,make-polar,angleandmagnitudefunctions (R5RS) - new function:
radians->degreeanddegree->radians
Bugfix
- allow to use undefined in let
- fix function call that return NaN
- fix pretty print of syntax-rules
1.0.0-beta.4
Breaking
- add/remove-specials and add/remove-repr are now set/unset
- rename wrong
gdcto correctgcd
Features
- doc strings on variables
- persistent history in executable REPL
- repr of promises (from
delayfunction) - allow
set!with doted JS notation - new functions
gensym?andprototype?
Bugfix
- fix Environment::has (ref) on variable that are undefined
- fix macroexpand with pprint on syntax macros
- fix formatter breaking rules definition in LIPS + (+ fix
cond) - fix rational? on integers (bigint)
- fix parsing quoted atoms (e.g.
'#f,'#\xor'#xA) - fix parsing escape slash inside strings
- don't throw exception on parse error in string->number (return false)
- fix silent accepting two big code point
#\xFFFFFF - fix custom repr of instances created by define-class
- fix parsing R7RS hex literals in strings
- fix syntax-rules with
(a b ...)that match single item - fix swallowed undefined from
(cons 1 undefined) - fix identifiers in syntax-rules
- fix byte vectors
- make print and pprint always call newline
- fix escape ellipsis from R7RS
- fix unboxing values (seen with stack overflow on dir date object)
1.0.0-beta.3
Bugfix
- fix broken REPL
1.0.0-beta.1
Breaking
- rename
ceiltoceiling(like in R5RS spec) - break
let*to work the same as in scheme (it was working likeletrec) ifno longer require boolean as cond- change how arrays are presented, they are look like scheme vector
#(...) - rename
stringtorepr - new API
lips.Interpreter- for using interpreter that have different stdout/stdin - balanced_parenthesis now throw exception on broken code
- remove global env from public API (you can still access it using
env.parent) - remove
->function (it will collide with SRFI 197 that may be implemented in the future) everyhave now same signature assomewhich is(fn list)
Features
- start implementing R5RS spec
- streams example
<,>,==,<=and>=now have variable number of arguments- new
throwfunction that throw JS exception - expose
typecheckfunction that test type of the arguments and throw exception if don't match - new
gdcandlcmfunctions - new
string->numberandnumber->stringfunctions - new
list?function - new
vector-ref(same as(. v n)but with typecheck) - new
+inf.0and-inf.0 - new
max,minandtruncate - restore
printit's now alias for display - you can now access nested objects as symbols (e.g
(lips.LNumber 10)) - new Number types (complex and rational)
- input/output ports + string ports
- add
letrecmacro inexact->exactandrationalize(thanks to Kawa/C-Gambit projects)- parsing hex, octal, binary, complex, rational numbers
- characters literals
#\Aand character and string functions - display
#tand#ffor boolean values in terminal - new
interaction-environmentfunction +loaduse that env by default - improve executable
- user can define string representation (with object that have
toStringlambda) - Hygienic macros:
syntax-rulestransformer macros - improve balancing parenthesis
- expose balanced method in public API (preferred name)
- optional brackets
iterator?function and detection if iterators fromreprandtype#51add-repr!function to add string representations to objects- new
string=?,sort,in,list-tailandbound?functions - add new
exitfunction into executable interpreter - -e/eval option (help and docs will show new options, instead of -c/code but old still works)
casemacro- relative load inside load + auto .scm suffix
- new
zip,n-ary,binary,unary,takefunctions - new
get-scriptfunction
Bug fixes
- fix list function #27
- fix
(begin (gensym))macro that evaluate to symbol - update defstruct to export only needed functions (local functions are namespaced)
- prevent of evaluation of
(define (x . a) a)) (x 1 2 3)(listin scheme) - fix
LNumber::Stringwith radix - fix formatting of float numbers
- fix try..catch
- fix display of function/macro docs (remove white space in parser)
- fix loading modules with
require - fix macro expand when expansion return list with macro that is data
- fix lips executable in GNU Emacs run-scheme (comint mode)
- unbox values in new
- fix named let with nil #46
- use parser code in string->number
- fix repr of native object instances (e.g.:
Uint8Array) - fix display/write without newline in both REPLs
- fix evaluating single false value
- fix dir to not include values of
Object.prototype
0.20.1
Bug fixes
- fix formatter indent
0.20.0
Breaking
- replace
printwithdisplay(more like scheme) - replace
lips.SymbolwithLSymbol - replace
delaywithwait(to allow using scheme delay/force) - change
timerfunction to justsetTimeoutwith expression (oldtimeris nowwait)
Features
- improve
-->macro to handle numbers and strings and symbols (quoted or not) - new function
quoted-symbol? - allow to use else in cond (same as true - similar to scheme)
- new macro:
promise - experimental parent.frame (inspired by R)
- add
arguments.calleeto lambdas
Bug fixes
- fix for-each with function that use this (like print)
- fix pretty print of lisp code
- fix formatting/indent of list of full S-Expressions
0.19.0
Features
- add require.resolve function
Bug fixes
- fix stack trace on Node.js errors
- fix display of functions as values in executable
- require is defined only in Node.js
0.18.2
Bug fixes
- bootstrap helpers.lips in executable
0.18.1
Bug fixes
- fix auto indent and add version number to executable
0.18.0
Features
- add copyright notes to binary and improve the calling it
- allow to call lips from shebang
Bug fixes
- trim lines in functions doc strings #23
0.17.2
Bug fixes
- fix list of false values #22
0.17.1
Bug fixes
- fix map last value #21
0.17.0
Features
- revert breaking change of read to return Array
- use proper read function in executable REPL
0.16.3
Bug fixes
- fix map on empty list
- fix exception when calling error
0.16.2
Bug fixes
- unbind functions before setting property with
set-obj! - make gensyms names shorter (like in CLISP)
- fix double quasiquote + unquote unquote splice (and other quirks)
0.16.1
Bug fixes
- fix setting property Descriptor on functions (to change name for preact components)
0.16.0
Features
thisinside lambdas that are object created with new (same as in JS) #19stringandtypereturninstancefor objects created bynewpprintfunction #17
Bug fixes
0.15.4
Bug fixes
- fix formatter when there is newline at the newline of the code
- fix duplicated copyright notes and missing Facebook note in output from rollup and babel
0.15.3
Bug fixes
- fix regenerator from babel in dist files
0.15.2
Bug fixes
- fix
ignoremacro - fix
loadfunction in node - fix
Pair::appendandappendfunctions with non pair - throw exception when more unquote then quasiquotes
- fix double unquote symbol
- throw error when unquote-splice on atom in the middle of the list
- don't create cycles in unquote-splicing
- fix cloning cycles
0.15.1
Bug fixes
- fix
loadfunction outside of Node - return undefined from
loadfunction - fix formatting of lambda expressions
- fix
symbol->stringfunction when called with gensym symbols - improve
-->and..macros - quote
define-macroarguments so they don't evaluated if inside expression
0.15.0
Features
- new macro
.. - formatter rules for example
condmacro tree->arrayfunction__code__inside Macrodefine-formatter-rulemacro for breaking S-Expressions in Formatter
Bug fixes
- fix lips.Formatter pattern matching
- better toString and
stringfunctions (keep class names for internal objects in minified js file) - fix
__code__on lambda expressions (that also includes(define (name . arg)) - evaluate of symbols and promises returned from macros
0.14.0
Features
- add
unset!,add-special!andremove-special!functions - add
define-symbol-macrometa macro that create parser macros (parser transformer symbol) - rewrite
helpas macro so it works with parser macros requirefunction for Node.js +loadwork in Node usingfs.readFile- stack trace in exception in lips binary
- parser accept strings as argument (no need to call tokenizer - but it also accept array of tokens)
- modules mechanism as macros
- pattern matching as macro
macro?functioncondmacro
Bug fixes
- fix white space in docs for macros
- fix two cases in parser:
`(,(list 1 2))and`(+ ,,(list 'foo))#12 - fix quaisquote macro (eval of single unquote in double quasiquote) #14
- add scope to exec in
loadfunction - fix formatting of multi line strings
- fix
object?when called with nil and number - fix
macroexpandmacro
0.12.0
Features
- new macro
begin*that run their arguments in parallel if they async - add typecheck to rest of the functions
- new
real?andpluckfunctions - stack trace for exceptions
Bug fixes
- fix
findandfilterto check if function from argument return nil - fix accessing FileReader object (try to copy read only prototype)
- fix parser error when parsing symbol macros #10
- fix undefined values in macro with missing arguments #11
- fix macroexpand #9
- fix line breaking in S-Expression Formatter
0.11.2
Breaking
- remove
nop(you can use(begin undefined))
Bug fixes
- fix unquote-splicing on nil (e.g. processing of
`(list ,@nil)) - cdr and car should return nil on empty list
- typecheck and process nil in c[ad]+r functions
0.11.1
Bug fixes
- fix parsing special forms as literal symbols #7
- fix unquote-splicing of empty list (e.g. processing of
`(list ,@(list)))
0.11.0
Features
- Add support to list cycles
- new macro
ignorethat will swallow promises - add
trymacro - add
current-environmentfunction evalLIPS function now accept environment as second argument- better toString of gensym symbols (it now shows
#gensym_1#instead ofSymbol(#gensym)checkmacroexpand) - macroexpand now produce formatted LIPS code (API exposed in Formatter::break that break LIPS code into lines)
Bug fixes
- call error in evaluate when promise returned from function is rejected
- fix errors in
map,reduce,foldandfor-each(that usemap) - fix exception when call to match fail to match
0.10.4
Bug fixes
- fix accessing props on native objects like Object function #6
0.10.3
Bug fixes
- fix print that get stdout from global env not from user one + better babel fix added in 0.10.1
0.10.2
Bug fixes
- fix version number in source code
0.10.1
Bug fixes
- fix for babel when using for-each (weakBind was not working because babel was using
apply(void 0, ...) - add missing
errorfunction used in example macros
0.10.0
Breaking
- change order of
split,replace,match,searchandinstanceofso you can use them withcurry appendandappend!no require list or nil second argument- apply is no longer Macro it's now a function (so it can be used in curry)
Features
- change
append!from macro to function (it will work with any value as fist list argument not only with names helpfunction and help system inside functions. First expression after function arguments is docs.- add
pipe,compose,foldandsomefunctions - new function
unbindto help write function that work with functions as objects (LIPS wrap them) - add alias for
.asgetso you can pass it to curry, with.LIPS will try to create pair - lambda function introspection
- hyperapp example
- better loading of code
- make
map,filter,find,for-eachandreducesync when possible - basic type checking
- documented
unquote-splicingandunquotefunctions that throw error when used outside ofquasiquote - allow to extend the parser (kind of reader macros)
Bug fixes
- fix
ifit should not return false if false value is undefined - fix even and odd functions with BigInt
- fix curry
- fix when inside quasiquote there is empty list
- make
loaduselips.exec, so it execute code sequentially - fix
append - fix
timerto use with expression - fix macros without arguments
- fix calling
setTimeout#5
0.9.0
Breaking
for-eachandmapworks as in Scheme spec (use multiple arguments and don't use index)
Features
- better binary (options -f -c + read stdin + REPL + indent + catch exception)
- indent API function
- allow to use dots and variable names
.function now work with multiple arguments and gets nested object value- add
undefinedto default Environment so you can use it in Lips code - add function
nop - tokenizer with meta data now include newlines and comments (nothing is removed)
Bug fixes
- fix offset in tokenizer
- fix assign variables from variables (e.g. function or variable aliases)
- fix return value of Math operation that should return float #1
- fix tokenizer meta data with strings outside of S-Expressions or in lonely lines
- fix print of lips Symbols (update string function)
- fix missing recursive calls to unquote in quasiquote macro
- fix major issues with quasiquote that make macros don't work quite right
- fix parser when using multiple specials (unquote, quote etc.) in a row
- fix scope when evaluating macros
- fix async issues with list values inside let, lambda and begin macros
- don't evaluate next expressions in
andandormacros
0.8.1
Bug fixes
- use exception.code for code that triggered exception
0.8.0
Features
- new nth and reverse functions
- new type checking functions null? regex? pair? string? number? symbol? array? object? boolean?
- add lips source code that threw exception in JavaScript error message
Bug fixes
- fix lambda with rest parameter
Breaking
ifnow check if argument is boolean
0.7.1
Bug fixes
- fix curry function
0.7.0
Features
(let itermacro that's transformation of(let* ((iter (lambda () ...- expandable
(let iterand(define (foo)by macroexpand
Bug fixes
- fix macroexpand evaluation of code
- use nil in cons when cdr is empty list
0.6.1
Bug fixes
- fix reduce infinite loop
- fix invoking lambdas in dynamic scope
- fix print of Array with multi line strings and BigInts
0.6.0
Breaking
- change api for evaluate to have object
{env, dynamic_scope, error} - rename set to set!, set-cdr to set-cdr! and set-car to set-car!
- rename defmacro to define-macro like in scheme
- change order of arguments in env.inherit
Features
- add bit operation functions
- add float, round and ceil functions
- add env variable to lips namespace which is alias to global_environment
- add find and for-each higher order functions
- add length function
- add new function which create instance of objects
- allow to set value using set! and dot expression that is used to get the value
- better invalid mime on script tag detection
- use ES6 symbols as names for lips symbols in gensym function
Bug fixes
- show error when invoking trampoline in dynamic scope
- fix eq? and >= functions
- fix set! (change existing reference or create new if not existing in scope chain)
- fix return value of if macro
- fix defmacro
- fix parsing expressions that have multiple special characters in a row
- handle float calculations
- throw exception when try to execute native non function value
- fix resolving Promises when evaluating code
- don't allow regex that start with space (so it work when you have two divisions in one S-Expression)
- fix parsing float numbers that start with dot
- prevent evaluation of quoted expressions in macros
- fix macro sharing body between invocations
- fix read function
- fix parsing boolean values
- fix map, reduce and filter to handle async functions
- fix access variables that have value of undefined
0.5.4
Bug fixes
- use src file for node and dist build file for unpkg
0.5.3
Bug fixes
- fix version number in exported field
0.5.2
Bug fixes
- use dist/lips.min.js as main for unpkg
- npm housekeeping
0.5.1
Bug fixes
- fix lambda with symbol as parameters
- fix for TCO factorial using Y combinator & trampoline
0.5.0
Breaking
- exec now return promise with array of results
- all numbers are wrapped with LNumber
Features
- add support for new u and s regex flags
- optional dynamic scope
- add
not,abs,sqrtand**functions - wrap numbers in LNumber that use BigInt or bn.js if possible
Bug fixes
- fix lambda with no parameters
- fix define with Promise like
(define x (let ... - fix - with single argument
0.4.1-2
Bug fixes
- fix for Node
0.4.0
Features
- lambda with reset parameter (like in scheme)
- new functions: 1+, 1-, curry and range
- execute LIPS code from script tag with text-x/lips type attribute
- add string functions: join, split, replace, match, search
- new second parameter to
tokenizethat make it return array of extra objects{token, col, line, offset} - Pair.flatten and lips function flatten
Bug fixes
- fix (reduce + list)
- fix handling of empty list
- make let* handle promises
- fix evaluate of macro that return a Promise
- fix evaluating code with promises
0.3.0
Features
- exec api method
Bug fixes
- fix processing of multiple backquote and unquote
0.2.1/0.2.2
- fix build system
0.2.0
Features
- Add reduce and set functions
- add while, ++ and -- macros
- ignore comments everything after ; but not inside strings and regexes
- gensym and load functions
- better string function
- Pair methods for working with ALists + Pair::reduce
- throw exception on car/cdr with non list
Bug fixes
- fix parsing empty strings
- fix various errors catch by lint
- fix parsing ALists with list as keys and values
- fix parsing quasiquote that evaluate to single pair out if unquote
0.1.0
- Initial version