Changes in JMurmel-1.4.5 relative to JMurmel-1.4.4 released: 2023-12-31 * changed (fixed?) the commandline parameter --eval: environment is no longer reset before REPL so that e.g. jmurmel --repl --eval (load \"mlib\") will work as expected * added the primitives lisp-implementation-type and lisp-implementation-version * (declaim (optimize (debug 0))) omits "loc =..." in compiled code * changed the reader to treat non-ascii whitespace as whitespace, too * mlib: added dotted-nthcdr, ldiff, tailp, butlast, nbutlast, adjoin, pushnew * fixed interpreted "(let () (values 1 2 3) 10)" * fixed control flow & multiple values, e.g. "(if (values 1 2 3) 'yes) ; ==> yes" * fixed symbol names that contain a ';' such as |;abc| * fixed mlib: in "dotimes" the loopvariable now is bound in the resultform even if the countform was an int literal <= 0 Changes in JMurmel-1.4.4 relative to JMurmel-1.4.3 released: 2023-12-10 * changed *command-line-argument-list* in compiled Murmel to a regular mutable list * changed load and require in compiled Murmel: must appear at toplevel * changed/fixed car to accept all strings * changed read-textfile and read-textfile-lines to use UTF-8 as the default charset (unless the charset was given as an argument) * changed read-textfile to no longer append a #\Newline at the end * changed "dynamic": dynamic is no longer a self evaluating symbol, it's syntactic meaning remains unchanged * added *random-state* * added the commandline parameter --eval * fixed read-from-string: handle feature-expressions correctly, intern symbols correctly * fixed compiled random-state-p and make-random-state * fixed passing *command-line-argument-list between interpreter <=> compiled Murmel * fixed compiled presized "make-hash-table" * fixed mlib: key-var and value-var now are bound to nil in the result form in "doplist" (was: not bound) * fixed miscompilation when using gensymmed local function names in "labels" Changes in JMurmel-1.4.3 relative to JMurmel-1.4.2 released: 20.5.2023 * removed get-internal-cpu-time * added random, make-random-state, random-state-p * defun and defmacro now accept (and ignore) optional docstrings * mlib: "last" now has an optional parameter n Changes in JMurmel-1.4.2 relative to JMurmel-1.4.1 released: 2023-02-16 * changed write, writeln, lnwrite, format, format-locale to also accept an adjustable string as destination * changed log to accept a second optional parameter * added the reader macro #R * mlib: added string-subseq, with-output-to-string * fixed backquote forms with vector- and hashliterals Changes in JMurmel-1.4.1 relative to JMurmel-1.4 released: 2023-02-04 * fixed sxhash to return nonnegative integer values * fixed using macroexpand-1 & gensym in compiled code * added the function "string" * mlib: added multiple-value-list, nth-value * don't merge Windows launcher + jar to avoid virus warnings Changes in JMurmel-1.4 relative to JMurmel-1.3.1 released: 2023-01-13 * removed the undocumented function "fatal" from Murmel, moved the function "error" from mlib to Murmel and now it is similar to CL's "error" * moved "equal" from mlib to Murmel * added the functions "read-from-string", "write-to-string" * added the functions "read-textfile-lines", "read-textfile", "write-textfile-lines", "write-textfile" * added the special form "try" and the function "typep" * added condition types, the global variable *condition-handler* and some condition handling * added hash-tables * added a size argument to the "#(" and "#*" reader macros, e.g. "#5(1 2 3) ; ==> #(1 2 3 3 3)" * added REPL command :desc * mlib: added the functions parse, parse-integer, min, max, string-trim, string-replace, string-split, string-join * mlib: added gethash, remhash, maphash, "(setf (gethash..." * added Windows slim package (needs an installed Java8+) c/o Launch4j * added linux and Windows native executables c/o GraalVM Changes in JMurmel-1.3.1 relative to JMurmel-1.3 released: 2022-12-04 * fixed cmdline parameter -XX-dyn and various other feature-flags Changes in JMurmel-1.3 relative to JMurmel-1.2.2 released: 2022-11-12 * changed car and cdr so that they are no longer defined for symbols, i.e. (car 'aaa) now is an error. * changed the evaluator of the interpreter so that lists whose car is 'lambda' are no longer valid functions. e.g. (apply '(lambda (a b) (+ a b)) '(1 2)) no longer works but gives an error. Old behaviour can be restored by the commandline flag '--XX-oldlambda' (interpreter only). * changed self-recursive invocations from late binding to early binding * changed fixnums from 64 bit to 54 bit (53 bits + 1 sign bit) * changed internal-time-units-per-second to integer * changed write, writeln, lnwrite to return the first argument (was: t) * changed read to throw an error on EOF unless a new optional argument was given * added the global variables "most-positive-fixnum" and "most-negative-fixnum" * added the special operators catch, throw and unwind-protect * added functionp * added simple-string-p * added vector support: * make-array, array-dimension-limit, adjustable-array-p * vector, vectorp, vector-add, vector-length, vector-copy, vector-fill, vector->list, list->vector * simple-vector-p, svref, svset, svlength, list->simple-vector and simple-vector->list * added bitvector support: * bit-vector-p, bv=, simple-bit-vector-p, bvref (similar to CL bit), bvset, bvlength * list->bit-vector and bit-vector->list * added writable strings * slength, sref (identical to CL char), sset * list->string now has an optional parameter: (list->string lst [adjustablep]) * added seqref, seqset seqref is similar to CL elt, seqset is similar to CL (setf elt) * added the global variables @-, @+, @++, @+++, @*, @**, @***, @/, @//, @/// to the environment inside the REPL. If you remove the leading @ then these work similar to Common Lisp's REPL variables. * added the readermacro "#:" * mlib: added bit * mlib: added map, dovector, revappend, nreconc, nreverse, typecase * mlib: added generator related functions and macros * scan * scan-multiple, scan-concat * dogenerator * mlib: setf now supports strings, e.g.: (setf (char str) #\a) * fixed backquote expansion: e.g. `(a ,nil) was eval'd to (a); correct expansion is (a nil) * fixed compiled jmethod * fixed mlib: avoid possible stackoverflows when using larger sequences * mapcar, maplist, mapc, mapl, mapcan, mapcon * nconc, remove, remove-if, reduce * fixed mlib: fixed notevery, notany Changes in JMurmel-1.2.2 relative to JMurmel-1.2.1 released: 2022-05-20 * macroexpansion is no longer done on-the-fly but in a seperate macroexpansion phase. This fixes issues with macros being expanded that are actually defined later, or expanding the wrong version of a macro that is defined more than once. Changes in JMurmel-1.2.1 relative to JMurmel-1.2 released: 2022-05-07 * changed the interpreter to expand macros only once * changed the compiler so that the restriction "The list containing optional arguments cannot be used as an argument to `rplacd`." no longer exists * added the commandline argument --script, allow #!...!# as multiline comment to support hashbang scripts. * added --final-result and --no-final-result * fixed the compiler to tailcall-optimize let/let* dynamic Changes in JMurmel-1.2 relative to JMurmel-1.1 released: 2022-04-20 * changed/ fixed the behaviour around large numbers, no more silently cutting off decimal places when an integral number is needed * changed argument to sleep to "seconds" (was: internal-time-units-per-second), changed return value to nil (was: actually slept time in internal-time-units-per-second) * changed/ fixed "apply" from a special operator to a function, "apply" no longer is a reserved word, "apply" now accepts symbols as the first argument as well * changed "::": renamed to "jmethod", static Java methods no longer want "nil" as a first (ignored) argument * changed macroexpand-1 to return multiple values as one would expect * changed setq to create undefined variables on the fly in interpreted mode * changed mlib: dotimes, dolist and doplist accept multiple result-forms (in an implicit progn) (was: only the first one was eval'd, the rest were silently ignored) * changed mlib: inplace modification macros (incf, decf...) now process 1 or more args (was: 1 or 2 arguments, anything more was silently ignored) * added the function "jproxy" to implement Java interfaces with Murmel code * added values, multiple-value-call and multiple-value-bind * added primitive functions assq, list* * added an optional parameter print-escape-p for primitive functions write, writeln, lnwrite * added special operator "(declaim (optimize..." * added limited support for "macroexpand-1" in compiled code (quoted forms only) * errormessages contain the filename and linenumber (was: only linenumber) * added more complete support for "let dynamic" and "let* dynamic" (before 1.2 only "let* dynamic" in interpreted code was supported) * [f]round, [f]floor, [f]ceiling and [f]truncate now support 1 or 2 arguments (was: 1) * compiled code now can invoke interpreted closures * added some benchmarks and found some speedups * added some JFR integration * added *features* to the environment making it visible to Murmel code * mlib: added functions last, map-into, nconc, circular-list, compose, multiple-value-compose, conjoin, disjoin, curry, rcurry, doplist, unzip, unzip-tails, with-accumulator, summing, collecting, reverse-collecting, plist-keys, plist-values * backquote expansion generates more efficient code * some functions are "opencoded" (i.e. trampolines and/ or argcount checks are omitted, regular Java code is emitted instead) * fixed compiler primitive "list" to return a mutable list * fixed compiled "let*" * fixed "append" for compiled code * fixed using rplaca on varargs list * fixed/ cleaned up feature-flags * fixed search directory for load and require * fixed defmacro to support multiple body forms * fixed handling of symbol names such as \(\b^2\)\ -\ 4*\a*\c Changes in JMurmel-1.1 relative to JMurmel-1.0 released: 2022-01-03 * added feature expressions #+, #-, and, or, not * added reader macros #b #o #f for binary, oct and hex, #\ for characters, accept (and ignore) #' * added load, require, provide * added default library "mlib" * added documentation in markdown (murmel-langref.md, mlib.md) * fixed numerous bugs Jmurmel-1.0 released: 2021-05-23