Jcubic Lips Versions Save

Scheme based powerful lisp interpreter in JavaScript

1.0.0-beta.19

1 month ago

Breaking

  • change get-environment-variables and get-environment-variable returns nil and undefined in the browser
  • true, false, and NaN are no longer parser constants #292
  • get rid of node polyfills from output files
  • eval use interaction-environment stead of current-environment by default
  • remove support for string argument to read #327
  • make null falsy value #330
  • remove nil parser constant #332
  • replace undefined with #void, and null with #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) (JavaScript undefined) is now void

Features

  • add vector-for-each and vector-copy! function from R7RS
  • add string-for-each, string-downcase, and string-upcase from R7RS
  • add typecheck-number function
  • add char-foldcase and string-foldcase functions
  • add list-set! and nth-pair functions
  • add SRFI-61, SRFI-139, and SRFI-210
  • add continuations? function
  • add iterator->array function
  • add immutable strings as in R7RS spec #285
  • add R7RS char<...>? and string<...>? functions #298
  • improve syntax-rule exception message (appending macro code)
  • update log to accept two arguments #301
  • allow to use data-bootstrap attribute on script tags
  • make atan work for complex numbers
  • save error logs in home dir
  • add timestamp to error logs
  • make +inf.0 and -inf.0 parser constants
  • add zip procedure (inspired by Lodash)
  • add with-input-from-string and read-all #327
  • add #!fold-case and #!no-fold-case directives #342
  • add drop procedure
  • allow to use unquoted symbols in --> to get the function
  • add regex procedure (rename from %r used in bootstrap.scm)
  • support unterminated strings in REPL #280
  • expose parser and lexer instance from syntax extensions #308

Bugfix

  • fix let-values to 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-rules in macro define-value #290
  • fix indentation of let-values
  • various fixes to syntax-rules
  • fix procedure? to return true for continuations
  • fix lips --help screen
  • fix cond-expand to skip not-matched symbols
  • fix shadowing syntax-rules identifiers 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 cond from --> macro so you can use use --> inside cond
  • fix handling of recursive flatten syntax-rules macro #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 repr of delay expressions #315
  • fix try..catch #317
  • fix handling ^ and $ syntax extension #318
  • fix mixed values in let*-values #322
  • fix do macro #324
  • fix string->number that leads to NaN #326
  • fix unintentional unboxing in iterator->array #328
  • fix replace with async lambda #319
  • fix values without 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->exact procedure #340
  • fix Petrofsky let #341
  • fix repr of 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 #f or #t #343
  • fix repr of curried function (output of curry)

1.0.0-beta.18.1

3 months ago
  • NPM technical release

1.0.0-beta.18

3 months ago

Breaking

  • change undocumented arguments to lips.exec into an object
  • change default export into named exports in ES Module

Features

  • add R7RS guard macro
  • add R7RS parameterize and make-parameter
  • add shuffle function
  • 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_fs function #256

Bugfix

  • remove evaluating of async list data as first argument
  • fix number->string for 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.1

4 months ago
  • NPM technical release

1.0.0-beta.17

4 months ago

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-string function

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.timeOrigin on 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

2 years ago

Breaking

  • replace get-script with get-resource that work in Node and in browser and allows to load CSS

Features

  • add object->alist, command-line, and symbol-append procedures
  • add SRFI: 193
  • add get-environment-variable and get-environment-variables
  • improve bootstrapping by using same URL of the script if possible
  • add set-global! macro
  • add current-second, current-jiffy, and jiffies-per-second procedures

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 quasiquote and unquote-splicing #194
  • fix inexact->exact on integers #199
  • throw error on missing parentheses #198

1.0.0-beta.15

2 years ago

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-join and string-split
  • lists are now iterators
  • add optional => syntax to cond macro (as per R7RS)
  • make undefined parser constant
  • compile into binary CBOR format with LZJB compression
  • add support for log of complex, rational, and negative numbers
  • allow to define shorthand object literals #185
  • add Buffered Output Port and flush-output function

Bugfix

  • fix scoping issue in nested syntax-rules
  • fix repr of 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->symbol and symbol->string
  • fix parent.frame inside Intepreter
  • fix eval without 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 repr of native type prototypes (e.g. LComplex)
  • fix using prototypes inside objects (e.g. (object :foo Number.prototype))
  • fix sqrt of rational where numerator or denominator is float
  • fix sqrt of negative real that are like integers #175
  • fix boxing NaN value
  • fix length of nil
  • fix trimming spaces in Env::set
  • fix repr of symbols with impossible characters created with string->symbol
  • fix eqv? on same pairs
  • fix abs on inexact numbers that can be represented as integers #181
  • fix extra newline when calling print in browser #186

1.0.0-beta.14

2 years ago

Breaking

  • remove zip function that just (map list l1 l2 ...)
  • raise now throws object as is (just like JS throw keyword)
  • error now 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 #f instead of nil when fail to match (so it work in cond or if)
  • 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 exp on complex numbers
  • add R7RS error-object?, error-object-message and error-object-irritants
  • make NaN, null and undefined parser 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 case macro (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

3 years ago

Breaking

  • env and dir now returns symbols instead of strings
  • repr and type of quoted promises now return #<promise> and promise
  • numbers and characters properties are immutable

Features

  • create minfied std scheme file for faster bootstrap
  • add list-copy
  • add define-record-type
  • add escape-regex function
  • make apropos accept symbol as argument
  • add doc strings for **interaction-environment** and **internal-env**
  • add letrec* that in LIPS is exactly the same as letrec
  • add pragma->sxml macro that define sxml macro (default is h)
  • hide fs in internal env
  • automatic bootstrapping of fs with BrowserFS if exists
  • pprint in both REPLs now print in color #33
  • add nan?, infinite? and finite? functions
  • add +nan.0 and -nan.0 (R7RS)
  • properly handle negative inexact zero
  • new environment? function
  • add current-directory and set-... 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-part function
  • 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->inexact on 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-ref according 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

3 years ago

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-promise, syntax '> #54
  • new function await that return original promise from QuotedPromise
  • bytevector functions (R7RS)
  • improve detecting and repr of iterators
  • add eof variable to global env
  • add apropos function
  • 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-environment function (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-string function)
  • 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 eval builtin function to evaluate everything