-
Notifications
You must be signed in to change notification settings - Fork 1
/
CHANGES
331 lines (250 loc) · 13.7 KB
/
CHANGES
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
Changes in JMurmel-1.5.0 relative to JMurmel-1.4.8
released: 2024-12-17
* renamed:
format to jformat,
format-locale to jformat-locale
error to jerror
* changed defmacro: is now allowed inside labels forms
* added fresh-line, make-string-writer, tabulate
* mlib: added format, formatter, error, and*, or*, frequencies
* fixed mlib: "(incf (gethash..." with default value
Changes in JMurmel-1.4.8 relative to JMurmel-1.4.7
released: 2024-07-17
* fixes around nested backquotes
* mlib: added shiftf, rotatef
* fixed mlib: evaluation order in setf and psetf forms
* fixed mlib: various fixes re: value forms as places
Changes in JMurmel-1.4.7 relative to JMurmel-1.4.6
released: 2024-05-06
* changed defun/ define: are now allowed inside labels forms
* changed car/ cdr: no longer accept strings
* changed vector-add: add an optional argument "pos"
* changed append to no longer accept dotted lists (except as the last argument)
* added macrolet
* added vector-remove
* mlib: added mappend, mappend-tails, concatenate
* fixed setq with multiple assignments and multiple-value-call
* fixed mlib: evaluation order in push, pushnew, incf, decf
* fixed mlib: fixed acceptable arguments for "return-type" for map
* fixed mlib: mapcan/ mapcon will reject dotted lists returned from the function and behave more
along the lines of what https://gitlab.common-lisp.net/cmucl/cmucl/-/issues/196 suggests
Changes in JMurmel-1.4.6 relative to JMurmel-1.4.5
released: 2024-03-02
* changed/ fixed cond clauses w/o body to return the primary result of the test-form (was: nil)
* changed printing of conditions: (write cnd nil) will only print the message, (write cnd t)
will also print the location info
* changed mlib: renamed the functions last0, last1, lastn to m%last0, m%last1, m%lastn
* changed mlib: write-char, terpri, prin1, princ, print and pprint
now accept an optional output destination
* changed read-textfile, write-textfile, write-textfile-lines: the optional parameter
'translate-lineend-p' controls translating from/to OS-dependent lineend character (sequence)s
* changed read-textfile, read-textfile-lines, write-textfile, write-textfile-lines:
the symbol t as a filename indicates "stdin"
* changed write, writeln, lnwrite: "nil" is no longer an alias for stdout, only "t" is
* added #1= style labelled forms to the reader
* added tailrecursion->loop transformation for compiled Murmel:
transform the innermost tail recursion/ named let/ let* /letrec into a loop in compiled code
avoiding the TCO trampoline
* added limited support for non-toplevel define/ defun aka let-over-lambda in compiled Murmel:
define/ defun may now appear in the body of (possibly nested) let/ let*/ letrec/ multiple-value-bind
forms
* mlib: added values as a place for setf
* mlib: added psetf
* mlib: added subst, subst-if, nsubst, nsubst-if
* mlib: added endp, copy-list, copy-tree, copy-alist
* fixed multiple-value-bind when the values form was a variable
* fixed compiled (list* 1 2 3 (values 4 5)) and (list 1 2 3 (values 4 5))
was: would display multiple values in the REPL
* fixed mlib: "last" with any decimal number argument would return the whole list
* fixed mlib: throw simple-type-error when given a wrong type
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