1 | News |
---|
2 | **** |
---|
3 | |
---|
4 | 0.16 |
---|
5 | ==== |
---|
6 | |
---|
7 | * New modules `rep.data.trie', `rep.threads.proxy' |
---|
8 | |
---|
9 | * Also added `rep.xml.reader' and `rep.xml.printer', though these |
---|
10 | should probably be used with extreme caution |
---|
11 | |
---|
12 | * Appending to queues is now O(1) not O(n) |
---|
13 | |
---|
14 | * Many changes to `rep.net.rpc' module, protocol is incompatible |
---|
15 | with previous version. Should be more robust |
---|
16 | |
---|
17 | * `rep.i18n.gettext' module exports the `bindtextdomaincodeset' |
---|
18 | function (Christophe Fergeau) |
---|
19 | |
---|
20 | * Slightly more secure way of seeding the rng |
---|
21 | |
---|
22 | * `inexact->exact' can now convert floating point numbers to |
---|
23 | rationals (though not optimally). This means that `numerator' and |
---|
24 | `denominator' also work better with floats now |
---|
25 | |
---|
26 | * New function `file-ttyp' |
---|
27 | |
---|
28 | * Some random bug fixes |
---|
29 | |
---|
30 | |
---|
31 | 0.15 |
---|
32 | ==== |
---|
33 | |
---|
34 | * Parser can now associate lexical location (file name and line |
---|
35 | number) with parsed objects. Added `call-with-lexical-origins' and |
---|
36 | `lexical-origin' functions. This adds memory overhead but is only |
---|
37 | enabled in interpreted mode, or other times it could be useful |
---|
38 | (e.g. when compiling) |
---|
39 | |
---|
40 | * The compiler enables line-numbering, and uses the information when |
---|
41 | it prints errors. It also prints errors in a more standard format |
---|
42 | (intended to mimic GCC), and distinguishes warnings from errors |
---|
43 | |
---|
44 | * Debugger is much improved, and supports emacs-style emission of |
---|
45 | line number tokens. Use the included `rep-debugger.el' elisp code |
---|
46 | to source-debug rep programs in Emacs! |
---|
47 | |
---|
48 | * New command line option `--debug'. When given, rep starts up in |
---|
49 | the debugger |
---|
50 | |
---|
51 | * Reformatted backtrace output. Also backtraces only ever include |
---|
52 | evaluated argument lists now. They also include lexical information |
---|
53 | when possible |
---|
54 | |
---|
55 | * Syntax errors include error description and line number |
---|
56 | |
---|
57 | * Now supports weak reference objects. New functions |
---|
58 | `make-weak-ref', `weak-ref', `weak-ref-set'. A weak reference is a |
---|
59 | pointer to another object. When that object is garbage collected, |
---|
60 | the pointer in the weak reference is set to false. |
---|
61 | |
---|
62 | * New `error helper' module. When an error is handled, this module |
---|
63 | is called and tries to print a human-understandable message |
---|
64 | explaining why the error may have occurred |
---|
65 | |
---|
66 | * REPL commands may now be specified by their shortest unique set of |
---|
67 | leading characters, e.g. `,o' instead of `,open' |
---|
68 | |
---|
69 | * Added an `#undefined' value. Returned by `%define' and the macros |
---|
70 | using it (`defun', `defmacro', etc...) |
---|
71 | |
---|
72 | * New function `table-size' in module `rep.data.tables' |
---|
73 | |
---|
74 | * `thread-suspend' returns true iff the timeout was reached (i.e. |
---|
75 | return false if `thread-wake' was used to unsuspend the thread) |
---|
76 | |
---|
77 | * Objects defined using the `object' macro now have an implicit |
---|
78 | `self' binding - the object representing their self (or their most |
---|
79 | derived self) |
---|
80 | |
---|
81 | * Added TIMEOUT parameter to `condition-variable-wait' and |
---|
82 | `obtain-mutex' functions |
---|
83 | |
---|
84 | * New `rep.threads.message-port' module, implements a simple message |
---|
85 | queue for threads |
---|
86 | |
---|
87 | * `log' function now optionally accepts a second argument, the base |
---|
88 | of the logarithm |
---|
89 | |
---|
90 | * Use gmp to generate random numbers when possible (if at least |
---|
91 | version 3 of gmp is found) [disabled in librep 0.15.1 - gmp seems |
---|
92 | to be buggy?] |
---|
93 | |
---|
94 | * The `string-replace' function may now be given a function as its |
---|
95 | TEMPLATE parameter |
---|
96 | |
---|
97 | * Bug fixes: |
---|
98 | |
---|
99 | - Signal an error if writes don't write all characters they were |
---|
100 | asked to. Also, some functions could write fewer characters |
---|
101 | than they were supposed to even if no errors occurred |
---|
102 | |
---|
103 | - Remembered that file sizes may not fit in fixnums |
---|
104 | |
---|
105 | - Don't preserve trailing slashes in results of |
---|
106 | canonical-file-name (to make the path canonical) |
---|
107 | |
---|
108 | - Don't signal an error when end of file is encountered |
---|
109 | immediately after reading `#\X' syntax |
---|
110 | |
---|
111 | - `current-thread' and `all-threads' will create a thread |
---|
112 | object for the implicit thread if there isn't one already |
---|
113 | |
---|
114 | - In C subrs that take optional integer arguments, signal an |
---|
115 | error if the given value isn't an integer or undefined |
---|
116 | (false). Also, accept all types of numbers where it makes |
---|
117 | sense to do so |
---|
118 | |
---|
119 | - Signal an error if end of file is read while parsing a block |
---|
120 | comment |
---|
121 | |
---|
122 | - Don't ever return a null object from `current-time-string' |
---|
123 | |
---|
124 | - Catch errors signalled during command line option processing, |
---|
125 | and pass them to the standard error handler |
---|
126 | |
---|
127 | - Right hand side of `letrec' bindings may now have more than |
---|
128 | one form |
---|
129 | |
---|
130 | - The `object' macro now evaluates its BASE-OBJECT parameter |
---|
131 | exactly once |
---|
132 | |
---|
133 | - Finally removed `define-value' |
---|
134 | |
---|
135 | - Ignore null lines (or lines which only have comments) in the |
---|
136 | repl |
---|
137 | |
---|
138 | - In the compiler, don't expand macros which have have been |
---|
139 | shadowed by local bindings |
---|
140 | |
---|
141 | - Don't print some compiler errors/warnings twice |
---|
142 | |
---|
143 | - Fixes for `mips-compaq-nonstopux' architecture (Tom Bates) |
---|
144 | |
---|
145 | - Fixed `,reload' and `,unload' repl commands not to try to |
---|
146 | remove non-existent structures |
---|
147 | |
---|
148 | |
---|
149 | 0.14 |
---|
150 | ==== |
---|
151 | |
---|
152 | * New module `rep.util.md5', has two functions for generating MD5 |
---|
153 | message digests (of files or strings) |
---|
154 | |
---|
155 | * Changes to the `rep.io.sockets' function: |
---|
156 | |
---|
157 | In the `socket-server' function the HOST and/or PORT arguments may |
---|
158 | be false, meaning to listen on all addresses and to choose a |
---|
159 | random unused port. |
---|
160 | |
---|
161 | New functions `socket-peer-address' and `socket-peer-port', these |
---|
162 | always returns the details of the far end of the connetion. |
---|
163 | `socket-address' and `socket-port' have been changed to always |
---|
164 | return the details of the local connection point. |
---|
165 | |
---|
166 | * New function in `rep.system' module, `crypt'. A wrapper for the |
---|
167 | system's `crypt' function (if it has one) |
---|
168 | |
---|
169 | * New function in `rep.threads' mdoule, `make-suspended-thread' |
---|
170 | |
---|
171 | * New module `rep.net.rpc', provides a text-stream based RPC |
---|
172 | mechanism for Lisp programs. Similar in some ways to untyped CORBA. |
---|
173 | (This is still in the experimental stage - its interface may |
---|
174 | change in forthcoming releases) |
---|
175 | |
---|
176 | * New functions in `rep.data' module, `list->vector' and |
---|
177 | `vector->list' |
---|
178 | |
---|
179 | * New macro `define-special-form'. A combination of `defvar' and |
---|
180 | `setq' - it always makes the variable special and it always sets |
---|
181 | it to the given value |
---|
182 | |
---|
183 | * New module `rep.test.framework' implementing `assert', `check' and |
---|
184 | `test' macros. This provides a framework for implementing unit |
---|
185 | tests in Lisp modules (such that running the interpreter with the |
---|
186 | `--check' option will run all tests that have been set up to be |
---|
187 | autoloaded |
---|
188 | |
---|
189 | * Bug fixes: |
---|
190 | |
---|
191 | - When reading from strings, don't choke on zero bytes |
---|
192 | |
---|
193 | - When writing into sockets, be aware that the socket is in |
---|
194 | non-blocking mode |
---|
195 | |
---|
196 | - SDBM and GDBM modules now close any open databases before the |
---|
197 | interpreter exits |
---|
198 | |
---|
199 | - Fixed the `rep_parse_number' function not to require a |
---|
200 | terminating null character in the string when parsing bignums |
---|
201 | |
---|
202 | - Only define `Qrep_lang_interpreter' once |
---|
203 | |
---|
204 | - Don't assign vm registers to physical registers on 68000 |
---|
205 | architectures - it's been reported to crash |
---|
206 | |
---|
207 | - When running asynchronous subprocesses, open and initialize |
---|
208 | the pty slave before forking to avoid a race condition with |
---|
209 | the child process |
---|
210 | |
---|
211 | - Flush symbols from the module cache at another point |
---|
212 | |
---|
213 | - Fixes for Unixware |
---|
214 | |
---|
215 | - When compiling non-top-level `defvar' forms, add any doc |
---|
216 | string they have to the database |
---|
217 | |
---|
218 | |
---|
219 | 0.13.5 |
---|
220 | ====== |
---|
221 | |
---|
222 | * Tar file handling no longer requires GNU tar |
---|
223 | |
---|
224 | * The `defvar' special form can now take only a single argument |
---|
225 | |
---|
226 | * The reader now treats `#\return' characters as white space |
---|
227 | |
---|
228 | * Other miscellaneous bug fixes... |
---|
229 | |
---|
230 | |
---|
231 | 0.13.4 |
---|
232 | ====== |
---|
233 | |
---|
234 | * Don't restrict symbols exported from plugin libraries, some need |
---|
235 | to export symbols to work properly (this bug only seemed to appear |
---|
236 | on Solaris systems) |
---|
237 | |
---|
238 | * Added `rep_file_type' and `rep_guardian_type' to the list of |
---|
239 | symbols exported from librep |
---|
240 | |
---|
241 | * Fixed the `install-aliases' script (Peter Teichman) |
---|
242 | |
---|
243 | * New module `rep.threads.condition-variable' |
---|
244 | |
---|
245 | * Added `string-split' and `string-replace' to the gaol |
---|
246 | |
---|
247 | |
---|
248 | 0.13.3 |
---|
249 | ====== |
---|
250 | |
---|
251 | * Try to only export public symbols from `librep.so' and modules |
---|
252 | |
---|
253 | * When expanding file names translate `/..' to `/' |
---|
254 | |
---|
255 | * Set an upper bound on the allowed recursion depth when regexp |
---|
256 | matching, prevents the stack from overflowing in pathological cases |
---|
257 | |
---|
258 | * Added optional second arg to `readline' function, a function to |
---|
259 | call to generate completions. The `rl-completion-generator' method |
---|
260 | of supplying this function is deprecated |
---|
261 | |
---|
262 | * Fixed bugs when handling character-case in regexp module (Andrew |
---|
263 | Rodionoff) |
---|
264 | |
---|
265 | * Added an `premature-end-of-stream' error. This is signalled |
---|
266 | instead of `end-of-stream' when reading characters in the middle |
---|
267 | of a syntax form. The `end-of-stream' error is only signalled when |
---|
268 | the end of the stream is reached before encountering anything other |
---|
269 | than whitespace characters |
---|
270 | |
---|
271 | * Fixed bug of expanding declarations in the `define' macro expansion |
---|
272 | |
---|
273 | |
---|
274 | 0.13.2 |
---|
275 | ====== |
---|
276 | |
---|
277 | * Fix `define' so that it tracks bound variables and ignores |
---|
278 | shadowed keywords when traversing code |
---|
279 | |
---|
280 | * Added checks to compilation process for the kind of missing |
---|
281 | shared-library problems that many people see |
---|
282 | |
---|
283 | * Fixed the `install-aliases' shell script |
---|
284 | |
---|
285 | * New configure option: `--enable-full-name-terminator' |
---|
286 | |
---|
287 | |
---|
288 | 0.13.1 |
---|
289 | ====== |
---|
290 | |
---|
291 | * Added functions `remove-if' and `remove-if-not' |
---|
292 | |
---|
293 | * Various bug-fixes for non-linux or solaris systems (John H. |
---|
294 | Palmieri, Philippe Defert) |
---|
295 | |
---|
296 | * `#f', `#t', `#!optional', `#!key' and `#!rest' are now uninterned |
---|
297 | symbols. Keywords are interned in a separate obarray |
---|
298 | |
---|
299 | * Fixed bug of caching regexps even when their string has been |
---|
300 | modified |
---|
301 | |
---|
302 | * Fixed some bugs in the ftp remote file handler and the |
---|
303 | `pwd-prompt' function |
---|
304 | |
---|
305 | * Fixed `define' to ignore `structure' and `define-structure' forms |
---|
306 | |
---|
307 | |
---|
308 | 0.13 |
---|
309 | ==== |
---|
310 | |
---|
311 | * The end-of-list / boolean-false object is no longer the symbol |
---|
312 | `nil'. Instead there is a special object `()' fulfulling these two |
---|
313 | roles. For modules importing the `rep' module, the symbol `nil' |
---|
314 | evaluates to `()'. This allows the `scheme' module to be more |
---|
315 | compliant with the Scheme standard |
---|
316 | |
---|
317 | * Parameter list changes: |
---|
318 | |
---|
319 | - Deprecated `&optional' and `&rest', in favour of `#!optional' |
---|
320 | and `#!rest'. |
---|
321 | |
---|
322 | - Added keyword parameters. Use `#!key' to declare them. |
---|
323 | Keyword syntax is `#:PARAM'. For example: |
---|
324 | |
---|
325 | ((lambda (#!key a b) (list a b)) #:b 2 #:a 1) => (1 2) |
---|
326 | |
---|
327 | - `#!optional' and `#!key' parameters may now have default |
---|
328 | values, syntax is `(VAR DEFAULT)'. For example: |
---|
329 | |
---|
330 | ((lambda (#!optional (a 1)) a)) => 1 |
---|
331 | |
---|
332 | * The module namespace is now hierarchical. `.' characters in module |
---|
333 | names denote directory separators, e.g. `foo.bar' translates to |
---|
334 | the file `foo/bar' |
---|
335 | |
---|
336 | All module names prefixed with `rep.' are reserved for librep, |
---|
337 | other top-level names should be picked to be as unique as possible |
---|
338 | |
---|
339 | The existing modules have been renamed to fit this scheme (see the |
---|
340 | file `TREE' in the distribution for the hierarchy details). |
---|
341 | However, old module names will still work for the time being |
---|
342 | |
---|
343 | * The `rep' module no longer includes the `rep.regexp', |
---|
344 | `rep.system', `rep.io.files', `rep.io.processes' or |
---|
345 | `rep.io.file-handlers' modules. These need to be imported |
---|
346 | explicitly |
---|
347 | |
---|
348 | * Doc strings are now indexed by module name as well as symbol name. |
---|
349 | The `define' macro now takes a doc string as its optional third |
---|
350 | parameter |
---|
351 | |
---|
352 | * Record constructors may include all lambda-list keywords (e.g. |
---|
353 | keywords and/or default values) |
---|
354 | |
---|
355 | * Incompatible virtual machine changes, hence bytecode files will |
---|
356 | need to be recompiled. Improvements include: |
---|
357 | |
---|
358 | - Only heap-allocate variables when absolutely necessary |
---|
359 | |
---|
360 | - Closure analysis to allow inlining of some types of `letrec' |
---|
361 | expressions |
---|
362 | |
---|
363 | - Added a `safe' virtual machine, which makes no assumptions |
---|
364 | regarding validity of bytecode, so is safe for untrusted code |
---|
365 | |
---|
366 | * Added an `unscheme' module. Another Scheme implementation, but the |
---|
367 | goal of this one is to integrate cleanly with the librep runtime |
---|
368 | environment, even if this is at the expense of R4RS compliance |
---|
369 | |
---|
370 | For example, in `unscheme' code, `#f => ()' and `#t => t'. This |
---|
371 | allows rep and unscheme functions to call each other without |
---|
372 | needing to convert any data |
---|
373 | |
---|
374 | * By default, it is now illegal to modify top-level variables that |
---|
375 | have not previously been defined |
---|
376 | |
---|
377 | * New macro `define-structures' to export multiple views of a single |
---|
378 | underlying environment |
---|
379 | |
---|
380 | * The librep runtime no longer handles the `--help' option itself, |
---|
381 | this should be done by scripts |
---|
382 | |
---|
383 | * Don't search `$LD_LIBRARY_PATH' for plugins, but prepend all |
---|
384 | directories in colon-separated `$REP_DL_LOAD_PATH' to |
---|
385 | `dl-load-path'. Similarly, the contents of `$REP_LOAD_PATH' is |
---|
386 | prepended to `rep-load-path' |
---|
387 | |
---|
388 | * `(/ X) => (/ 1 X)' |
---|
389 | |
---|
390 | * Extra string-manipulation functions: `string-replace', |
---|
391 | `string-split' (in the `rep.regexp' module) |
---|
392 | |
---|
393 | * `#f' and `#t' are now primitive symbols, not special objects |
---|
394 | |
---|
395 | * Special case tail-recursive calls to `apply', to ensure they get |
---|
396 | eliminated |
---|
397 | |
---|
398 | * The `0x123' and `0123' read syntaxes have been deprecated, use |
---|
399 | `#x123' and `#o123' instead |
---|
400 | |
---|
401 | * `#| ... |#' comments now nest correctly |
---|
402 | |
---|
403 | * New modules: `rep.i18n.gettext', `rep.vm.safe-interpreter', |
---|
404 | `rep.vm.assembler', `unscheme', `rep.data.objects', |
---|
405 | `rep.www.quote-url', `rep.www.fetch-url', `rep.util.ispell', |
---|
406 | `rep.util.base64', `rep.util.autoloader', `rep.io.sockets', |
---|
407 | `rep.util.time', `rep.net.domain-name' |
---|
408 | |
---|
409 | * Bug fixes, including: |
---|
410 | |
---|
411 | - Find size of `long long' type on AIX, IRIX and Solaris (Dan |
---|
412 | McNichol, Albert Chin-A-Young) |
---|
413 | |
---|
414 | - Never allow macros to be called as functions |
---|
415 | |
---|
416 | - Make bitfields unsigned (Albert Chin-A-Young) |
---|
417 | |
---|
418 | - Fixed bounds-checking when parsing non-base-10 fixnums |
---|
419 | |
---|
420 | - Thread fixes (and much lower thread-switch latency in many |
---|
421 | cases) |
---|
422 | |
---|
423 | - Fixed `DEFUN' macro for C++ (Matt Tucker); also fixed header |
---|
424 | files to avoid C++ keywords |
---|
425 | |
---|
426 | - Make error message for bytecode version mismatches more |
---|
427 | meaningful |
---|
428 | |
---|
429 | - Fixed: `default-boundp', `continuation-callable-p' |
---|
430 | |
---|
431 | - Only the evaluate the value of `defvar' forms if the symbol |
---|
432 | isn't already bound |
---|
433 | |
---|
434 | - Compile else-less `case' expressions correctly; eliminate |
---|
435 | tail-recursion in `cond' forms when possible |
---|
436 | |
---|
437 | - Various fixes in `scheme' module |
---|
438 | |
---|
439 | 0.12.4 |
---|
440 | ====== |
---|
441 | |
---|
442 | * Support building without GNU MP, `--without-gmp' option to |
---|
443 | configure. Use `long long' for non-fixnum integers (promote to |
---|
444 | floats when out of range); no exact rationals. There's also an |
---|
445 | option to disable continuations/threading |
---|
446 | (`--disable-continuations') |
---|
447 | |
---|
448 | * Sanitized function inlining: |
---|
449 | |
---|
450 | - Use `(declare (inline NAMES...))' to tell the compiler that |
---|
451 | it might be useful to inline the named functions |
---|
452 | |
---|
453 | - Don't even think about inlining across module/file boundaries |
---|
454 | (for now anyway) |
---|
455 | |
---|
456 | * Cleaned up the `gaol' module. Interface is essentially: |
---|
457 | `gaol-define', `gaol-define-special', `gaol-define-file-handler'. |
---|
458 | Added `gaol-open' to import complete modules. Still supports old |
---|
459 | interface |
---|
460 | |
---|
461 | * Be a lot more efficient when printing quoted strings and symbol |
---|
462 | names (for some streams there used to be a system-call per |
---|
463 | character!) Also, when quoting weird symbol names, be more |
---|
464 | intelligent |
---|
465 | |
---|
466 | * Removed code to autoload from modules (which didn't really work |
---|
467 | anyway) |
---|
468 | |
---|
469 | * Be more intelligent about deciding when to flush the module cache |
---|
470 | |
---|
471 | * Build fixes for IRIX (David Kaelbling) |
---|
472 | |
---|
473 | * Other miscellaneous bug-fixes and performance tweaks |
---|
474 | |
---|
475 | |
---|
476 | 0.12.3 |
---|
477 | ====== |
---|
478 | |
---|
479 | * New function `thread-join', waits for a specified thread to exit, |
---|
480 | then returns the value of the last form it evaluated |
---|
481 | |
---|
482 | * Added a rudimentary profiler (`,profile FORM' command in repl) |
---|
483 | |
---|
484 | * Reorganized `ring' module, sanitized the interface (preserving |
---|
485 | compatibility with old functions), also added a `ring->list' |
---|
486 | function |
---|
487 | |
---|
488 | * `rplaca' and `rplacd' (but not `setcar' and `setcdr') functions |
---|
489 | now return the cell being modified, not the value being stored |
---|
490 | into it, for compatibility with CL (Karl Hegbloom) |
---|
491 | |
---|
492 | * `unwind-protect', `catch', `condition-case': these special forms |
---|
493 | are now macros |
---|
494 | |
---|
495 | * When signalling `bad-arg' or `missing-arg' errors, try to include |
---|
496 | the function as the first element of the error data |
---|
497 | |
---|
498 | * `load' function now _only_ loads files without suffixes if |
---|
499 | NO-SUFFIX arg is non-`nil' (prevents picking up un-suffixed files |
---|
500 | by mistake, e.g. from the current directory) |
---|
501 | |
---|
502 | * Fixed some bugs when reading rationals |
---|
503 | |
---|
504 | * Fixed bug of `gettext' module not redefining `_' binding in `rep' |
---|
505 | module |
---|
506 | |
---|
507 | * Fixed bug when building `rep-config' script (Mark Hewitt, Dan |
---|
508 | Winship) |
---|
509 | |
---|
510 | * Fixed bug of `rep_INTERN_SPECIAL' macro not looking for default |
---|
511 | values of special variables |
---|
512 | |
---|
513 | * Fixed interpreted versions of `min' and `max' when operating on |
---|
514 | non-numeric values |
---|
515 | |
---|
516 | * If unable to allocate heap space, just print an error and |
---|
517 | terminate the program (the low-memory handling doesn't currently |
---|
518 | work properly) |
---|
519 | |
---|
520 | * Fixed bug when extracting doc strings from `define' forms |
---|
521 | |
---|
522 | * Fixed bug when compiling structure definitions in non-top-level |
---|
523 | environments |
---|
524 | |
---|
525 | * Fixed bug of being unable to `load' empty files |
---|
526 | |
---|
527 | * When recursively macro-expanding, dereference identifiers in the |
---|
528 | correct module |
---|
529 | |
---|
530 | |
---|
531 | 0.12.2 |
---|
532 | ====== |
---|
533 | |
---|
534 | * The tar file-handler now caches the unpacked archive (wins big |
---|
535 | when loading sawfish themes) |
---|
536 | |
---|
537 | * The `gaol' module can now create multiple gaols, each with it's |
---|
538 | own namespace |
---|
539 | |
---|
540 | * More performance tweaks |
---|
541 | |
---|
542 | * Miscellaneous bug-fixes (more vm stack smashing, `defconst' never |
---|
543 | evaluates its constant) |
---|
544 | |
---|
545 | |
---|
546 | 0.12.1 |
---|
547 | ====== |
---|
548 | |
---|
549 | * Some virtual machine performance tweaks |
---|
550 | |
---|
551 | * Fixed nasty stack smashing bug (when using compiler declarations) |
---|
552 | |
---|
553 | * Some 64-bit cleanups (George Lebl) |
---|
554 | |
---|
555 | * Fixed non-ANSI C syntax (Sam Falkner) |
---|
556 | |
---|
557 | |
---|
558 | 0.12 |
---|
559 | ==== |
---|
560 | |
---|
561 | * Added a basic module system. |
---|
562 | |
---|
563 | Modelled after the Scheme48 system, but simpler. At its simplest, |
---|
564 | include a `define-structure' form in each file representing a |
---|
565 | module: |
---|
566 | |
---|
567 | (define-structure NAME INTERFACE CONFIG BODY...) |
---|
568 | |
---|
569 | The external definitions of this module can then be imported by |
---|
570 | other modules through their CONFIG statements, e.g. `(open |
---|
571 | NAMES...)'. Most modules will open `rep' to get the standard |
---|
572 | language definitions. |
---|
573 | |
---|
574 | `foo#bar' reads as `(structure-ref foo bar)' |
---|
575 | |
---|
576 | The `timers', `tables', `sdbm', `gdbm', `readline', `gettext', |
---|
577 | `ring', `mutex', `memoize', `lisp-doc', `disassembler', `compiler', |
---|
578 | `date', `cgi-get', `gaol' features are all now modules (this is |
---|
579 | backwards compatible, since modules may be imported using |
---|
580 | `require') |
---|
581 | |
---|
582 | See the "Modules" section of the manual for more details. |
---|
583 | |
---|
584 | * The repl now contains meta-commands for inspecting and configuring |
---|
585 | the module system (amongst other things) |
---|
586 | |
---|
587 | * Added a facility for creating new primitive types: `make-datum', |
---|
588 | `datum-ref', `datum-set', `has-type-p', `define-datum-printer' |
---|
589 | |
---|
590 | * Added an SRFI 9 compatible `define-record-type' macro for defining |
---|
591 | data structures (the `records' module) |
---|
592 | |
---|
593 | * Added fluid variables--a method of creating dynamically scoped |
---|
594 | bindings that fit well with lexically scoped definitions |
---|
595 | (`make-fluid', `fluid', `fluid-set', `with-fluids', `let-fluids') |
---|
596 | |
---|
597 | * Added a `queues' module providing a basic queue type |
---|
598 | |
---|
599 | * Added stream functions: `peek-char', `input-stream-p', |
---|
600 | `output-stream-p' |
---|
601 | |
---|
602 | * Interpreter now also eliminates tail-calls |
---|
603 | |
---|
604 | * Changed handling of inexact numbers to be compatible with the |
---|
605 | Scheme standard: |
---|
606 | |
---|
607 | - Many operations now produce inexact outputs if any of their |
---|
608 | inputs are inexact (e.g. `min', `max', `floor', `ceiling', |
---|
609 | `round', `truncate') |
---|
610 | |
---|
611 | - `eql' and `equal' no longer ignore exactness when comparing |
---|
612 | numbers. `=', `/=', `<', `>', `<=' and `>=' _do_ ignore |
---|
613 | inexactness. E.g. |
---|
614 | |
---|
615 | (eql 2 2.) => nil |
---|
616 | (= 2 2.) => t |
---|
617 | |
---|
618 | * Support most of Scheme's read-syntax for numbers (i.e. `#b', `#o', |
---|
619 | `#d', `#x' radix prefixes, and `#e', `#i' exactness prefixes). |
---|
620 | |
---|
621 | * Implemented Scheme's `string->number' and `number->string' |
---|
622 | functions |
---|
623 | |
---|
624 | * Included a basic R4RS Scheme implementation (module: `scheme'). Do |
---|
625 | `,new foo <RET> ,open scheme' to test it in the repl, use `(open |
---|
626 | scheme)' instead of `(open rep)' to use it within modules. |
---|
627 | |
---|
628 | The compiler also knows enough about Scheme to be able to compile |
---|
629 | it. Also, use the `-s' or `--scheme' options to load a file of |
---|
630 | Scheme code. |
---|
631 | |
---|
632 | * The debugger works better (and can be used to walk the stack |
---|
633 | history somewhat) |
---|
634 | |
---|
635 | * Last arg of `append' and `nconc' may be a non-proper-list now |
---|
636 | |
---|
637 | * Implemented the Scheme `do' macro for iteration |
---|
638 | |
---|
639 | * `define' supports curried functions. E.g. `(define ((plus a) b) (+ |
---|
640 | a b))', then `(plus 1)' evaluates to the function that adds one to |
---|
641 | its argument. |
---|
642 | |
---|
643 | * Many performance improvements: |
---|
644 | |
---|
645 | - Allocates less memory (so garbage collects less often) |
---|
646 | |
---|
647 | - Much faster at bytecode-to-bytecode function calling |
---|
648 | |
---|
649 | - Much reduced VM overhead (when compiled with GCC) |
---|
650 | |
---|
651 | * Compiler improvements: |
---|
652 | |
---|
653 | - Supports the `(declare CLAUSES...)' form. See the "Compiler |
---|
654 | Declarations" section of the manual for details on the actual |
---|
655 | declarations supported. |
---|
656 | |
---|
657 | - Is cleverer about detecting when to create new bindings when |
---|
658 | tail recursing, and when the old bindings can just be |
---|
659 | overwritten |
---|
660 | |
---|
661 | - Groks the module system, and the language of the module being |
---|
662 | compiled (so that it can compile both rep and Scheme code) |
---|
663 | |
---|
664 | - Splices bodies of top-level `progn' and `begin' forms |
---|
665 | themselves into the top-level (for when macros expand into |
---|
666 | multiple definitions) |
---|
667 | |
---|
668 | - Compiling already defined functions (or whole modules of |
---|
669 | functions) now (mostly) works |
---|
670 | |
---|
671 | - Coalesce and compile non-defining top-level forms |
---|
672 | |
---|
673 | * Many bug fixes (see ChangeLog files for details) |
---|
674 | |
---|
675 | |
---|
676 | 0.11.3 |
---|
677 | ====== |
---|
678 | |
---|
679 | * Fixed bug of throwing uninitialized errors when autoloading |
---|
680 | |
---|
681 | * Fixed bug of interpreting `(let () ...)' as a named let |
---|
682 | |
---|
683 | 0.11.2 |
---|
684 | ====== |
---|
685 | |
---|
686 | * Replaced many special forms by macros--`let', `let*', `function', |
---|
687 | `if', `and', `or', `prog2', `defmacro', `defun', `defconst', |
---|
688 | `define-value', `setq-default' |
---|
689 | |
---|
690 | * `let' now supports Scheme's named-let construct for iteration via |
---|
691 | tail recursion |
---|
692 | |
---|
693 | * Parse some standard Common Lisp and Scheme syntax: `#| ... |#' |
---|
694 | block comments, `#\C' or `#\NAME' characters (where NAME may be |
---|
695 | one of: `space', `newline', `backspace', `tab', `linefeed', |
---|
696 | `return', `page', `rubout'), and `#(...)' vectors |
---|
697 | |
---|
698 | * When comparing symbols, compare their names as strings |
---|
699 | |
---|
700 | * Implemented Scheme's `dynamic-wind' function |
---|
701 | |
---|
702 | * Fixed bug of sometimes evaluating function arguments in the |
---|
703 | environment of the callee not the caller |
---|
704 | |
---|
705 | * Fixed bug when calculating how long to sleep for when no threads |
---|
706 | are available |
---|
707 | |
---|
708 | * Fixed bugs in mutex implementation (Damon Anderson) |
---|
709 | |
---|
710 | * Work around bugs in Tru64 `RTLD_GLOBAL'; everything should work on |
---|
711 | Tru64 now (Aron Griffis) |
---|
712 | |
---|
713 | * Fixed bug of not saving current regexp state across continuations |
---|
714 | |
---|
715 | |
---|
716 | 0.11.1 |
---|
717 | ====== |
---|
718 | |
---|
719 | * The compiler now eliminates single-function tail calls (instead of |
---|
720 | leaving it to the virtual machine) |
---|
721 | |
---|
722 | * Updated to use libtool-1.3.4 |
---|
723 | |
---|
724 | * Miscellaneous bug fixes and minor changes |
---|
725 | |
---|
726 | 0.11 |
---|
727 | ==== |
---|
728 | |
---|
729 | * Better support for numerical computing. Now supports bignums, |
---|
730 | rational numbers (numerator and denominator are bignums), and |
---|
731 | floating point values as well as the original fixnums. Many new |
---|
732 | numerical functions supporting these types. Promotes and demotes |
---|
733 | hopefully as you'd expect (never demotes an inexact number to an |
---|
734 | exact number). Tries to follow the Scheme numeric system as much |
---|
735 | as possible |
---|
736 | |
---|
737 | * Supports "guardian" objects through the `make-guardian' function |
---|
738 | (as described in Dybvig's paper). These are a clean mechanism for |
---|
739 | allowing the programmer to control when arbitrary lisp objects are |
---|
740 | finally deallocated. Also added a new hook: `after-gc-hook' |
---|
741 | |
---|
742 | * The default error handler can now be redefined. If the variable |
---|
743 | `error-handler-function' contains a function then it will be |
---|
744 | called to handle the error, with arguments `(ERROR DATA)'. |
---|
745 | |
---|
746 | * New special form `case', switches on a key value and sets of |
---|
747 | constants |
---|
748 | |
---|
749 | * New function `call/cc' (also available through the alias |
---|
750 | `call-with-current-continuation'). Provides scheme-like |
---|
751 | continuation functions. Special variables are now deep-bound to |
---|
752 | support this correctly |
---|
753 | |
---|
754 | * Supports "soft" preemptive threads using continuations and a |
---|
755 | general "barrier" mechanism (used either for restricting control |
---|
756 | flow, or for receiving notification when control passes across a |
---|
757 | barrier) |
---|
758 | |
---|
759 | * Parameter lists in lambda expressions now support improper lists, |
---|
760 | as in scheme. E.g. `(lambda (x . y) ...)' |
---|
761 | |
---|
762 | * Implements the scheme `define' syntax, with support for inner |
---|
763 | definitions |
---|
764 | |
---|
765 | * The `tables' plugin implements hash tables, with extensible |
---|
766 | hashing and comparison methods; supports both strongly and weakly |
---|
767 | keyed tables |
---|
768 | |
---|
769 | * Included a GDBM binding; DOC files are now stored in GDBM files |
---|
770 | (SDBM has limits on datum sizes) |
---|
771 | |
---|
772 | * `put' and `get' functions now use `equal' to compare property names |
---|
773 | |
---|
774 | * Virtual machine / compiler improvements: |
---|
775 | |
---|
776 | - Variable references and mutations are classified by type: |
---|
777 | lexical bindings use (one-dimensional) lexically addressed |
---|
778 | instructions, global non-special bindings have their own |
---|
779 | instructions, everything else uses the original instructions. |
---|
780 | Similar classification when creating new bindings |
---|
781 | |
---|
782 | - Eliminate tail-recursive function calls wherever possible in |
---|
783 | compiled code (when the calling function has no dynamic state) |
---|
784 | |
---|
785 | Compiled lisp code will need to be rebuilt to run on the modified |
---|
786 | virtual machine. |
---|
787 | |
---|
788 | * When expanding macros, bind `macro-environment' to the macro |
---|
789 | environment it was called with. This allows macros to reliably |
---|
790 | expand inner macro uses |
---|
791 | |
---|
792 | * New hook `before-exit-hook'. Called immediately before exiting |
---|
793 | |
---|
794 | * `rep-xgettext' now has an option `--c'. This makes it output |
---|
795 | pseudo C code containing the string constants found |
---|
796 | |
---|
797 | * Fixed misfeature of interpreting filenames `FOO//BAR' as `/BAR'. |
---|
798 | Contiguous path separators are now merged (i.e. `FOO/BAR') |
---|
799 | |
---|
800 | |
---|
801 | 0.10 |
---|
802 | ==== |
---|
803 | |
---|
804 | * Updated support for dumping (freezing) lisp definitions to handle |
---|
805 | lisp-1 nature with closures. Also now generates C code instead of |
---|
806 | assembler for portability; creates a plugin that may be loaded |
---|
807 | through the REP_DUMP_FILE environment variable |
---|
808 | |
---|
809 | * Plugin `.la' files may now contain rep-specific settings: |
---|
810 | `rep_open_globally=yes' and `rep_requires='FEATURES...'' |
---|
811 | |
---|
812 | * New function `define-value'. A combination of `set' and `defvar', |
---|
813 | but without implying dynamic scope |
---|
814 | |
---|
815 | * `load' scans AFTER-LOAD-ALIST for plugins as well as lisp libraries |
---|
816 | |
---|
817 | * `(if t)' now evaluates to `nil' not `t' |
---|
818 | |
---|
819 | * Fix regexp bug in matching simple non-greedy operators (Matt Krai) |
---|
820 | |
---|
821 | * Borrowed guile's bouncing parentheses for readline (Ceri Storey) |
---|
822 | |
---|
823 | * New C functions `rep_load_environment' and `rep_top_level_exit' |
---|
824 | |
---|
825 | * `defvar' allows symbols to be redefined in protected environments |
---|
826 | if they haven't also been defined by unprotected environments |
---|
827 | |
---|
828 | * Detect GCC's with broken `__builtin_return_address' functions |
---|
829 | (George Lebl) |
---|
830 | |
---|
831 | * Try to use libc `gettext' implementation, but only if it looks |
---|
832 | like it's the GNU implementation |
---|
833 | |
---|
834 | |
---|
835 | 0.9 |
---|
836 | === |
---|
837 | |
---|
838 | * Support for using GNU readline (give configure the |
---|
839 | `--with-readline' option) |
---|
840 | |
---|
841 | * New functions: `letrec', `caar', ..., `cddr', `caaar', ..., |
---|
842 | `cdddr', `in-hook-p', `make-variable-special' |
---|
843 | |
---|
844 | * Changed `unless' to have the Common Lisp semantics--return `nil' |
---|
845 | when the condition evaluates true, not the value of the condition |
---|
846 | |
---|
847 | * Fixed/added some compiler optimisations |
---|
848 | |
---|
849 | * Fixed `rep-xgettext' script to remove duplicated strings and to |
---|
850 | search exhaustively |
---|
851 | |
---|
852 | * `add-hook' forces the hook variable to be special (in case it |
---|
853 | wasn't declared using `defvar') |
---|
854 | |
---|
855 | |
---|
856 | 0.8.1 |
---|
857 | ===== |
---|
858 | |
---|
859 | Fixed some documentation bugs; fixed some build problems |
---|
860 | |
---|
861 | 0.8 |
---|
862 | === |
---|
863 | |
---|
864 | * Default scoping is now lexical, only variables declared using |
---|
865 | `defvar' are dynamically scoped. |
---|
866 | |
---|
867 | * There is now only a single namespace for symbols (excepting |
---|
868 | property lists), this means that the `fset', `symbol-function' and |
---|
869 | `fboundp' functions have been removed |
---|
870 | |
---|
871 | This allows all elements in procedure-call forms to be evaluated |
---|
872 | equally (as in scheme), so things like: |
---|
873 | |
---|
874 | ((if t + -) 1 2) |
---|
875 | |
---|
876 | now work. Related to this, function names (i.e. symbols and lambda |
---|
877 | expressions) are no longer dereferenced by any operations taking |
---|
878 | functions as arguments. Only built-in subroutines and closures are |
---|
879 | considered functions. |
---|
880 | |
---|
881 | This means that where before you'd write something like: |
---|
882 | |
---|
883 | (mapcar '+ '(1 2 3)) |
---|
884 | |
---|
885 | this is now illegal; the `+' function must be evaluated: |
---|
886 | |
---|
887 | (mapcar + '(1 2 3)) |
---|
888 | |
---|
889 | * `lambda' is now a special form evaluating to a closure (as in |
---|
890 | scheme); this means that the following are exactly equivalent: |
---|
891 | |
---|
892 | (lambda (x) x) == (function (lambda (x) x)) == #'(lambda (x) x) |
---|
893 | |
---|
894 | An alternative method of enclosing a lambda expression is to use |
---|
895 | the `make-closure' function. |
---|
896 | |
---|
897 | * `gaol' module providing semi-safe environment for untrusted code |
---|
898 | to evaluate in |
---|
899 | |
---|
900 | * Support for i18n through `gettext' module; also support for `%1$s' |
---|
901 | type format specifiers |
---|
902 | |
---|
903 | * New functions `string-equal' and `string-lessp' |
---|
904 | |
---|
905 | |
---|
906 | 0.7.1 |
---|
907 | ===== |
---|
908 | |
---|
909 | * Added `--with-rep-prefix' option to autoconf AM_PATH_REP macro |
---|
910 | |
---|
911 | * Fixed bug when inserting a new timer before an existing timer |
---|
912 | |
---|
913 | * Fix the malloc tracking code |
---|
914 | |
---|
915 | * Fix dlmalloc for FreeBSD |
---|
916 | |
---|
917 | * Use install when installing, not cp |
---|
918 | |
---|
919 | * Some fixes for compiling with SUN's C compiler on Solaris |
---|
920 | |
---|
921 | |
---|
922 | 0.7 |
---|
923 | === |
---|
924 | |
---|
925 | * Added file handler for read-only access to the contents of tar |
---|
926 | archives, access files like `foo.tar.gz#tar/bar' |
---|
927 | |
---|
928 | * `process-id' function now returns pid of lisp interpreter when |
---|
929 | called with zero arguments |
---|
930 | |
---|
931 | * Added (untested) support for loading dynamic objects via |
---|
932 | `shl_load' (HP-UX) |
---|
933 | |
---|
934 | * Added (untested) support for systems that prefix symbol names in |
---|
935 | dynamic objects with underscores |
---|
936 | |
---|
937 | * Fix bug when compiling `last' function |
---|
938 | |
---|
939 | * Fix bug of not closing files in the `load' function |
---|
940 | |
---|
941 | |
---|
942 | 0.6.2 |
---|
943 | ===== |
---|
944 | |
---|
945 | * Added `autoload-verbose' variable; set it to `nil' to turn off the |
---|
946 | messages when autoloading |
---|
947 | |
---|
948 | * Fix problems when `--prefix' option has a trailing slash |
---|
949 | |
---|
950 | * Updated libtool files to version 1.3.3 |
---|
951 | |
---|
952 | * Initial (incomplete) support for building under Tru64, from Aron |
---|
953 | Griffis |
---|
954 | |
---|
955 | |
---|
956 | 0.6.1 |
---|
957 | ===== |
---|
958 | |
---|
959 | No new features; minor portability tweaks and build changes. Fix bug |
---|
960 | of trying to load directories as Lisp scripts |
---|
961 | |
---|
962 | 0.6 |
---|
963 | === |
---|
964 | |
---|
965 | * Add `unsetenv' function |
---|
966 | |
---|
967 | * `system' now uses `process-environment' |
---|
968 | |
---|
969 | * Workaround compiler bug with GCC 2.95 on sparc |
---|
970 | |
---|
971 | * Fix build problem where libsdbm.la can't be located |
---|
972 | |
---|
973 | |
---|
974 | 0.5 |
---|
975 | === |
---|
976 | |
---|
977 | * New function `set-input-handler', registers an asynchronous input |
---|
978 | handler for a local file |
---|
979 | |
---|
980 | * Don't abort on receipt of unexpected `SIGCHLD' signals |
---|
981 | |
---|
982 | * Upgrade libtool to version 1.2f |
---|
983 | |
---|
984 | * The `rep' binary by default always loads a script named `rep', not |
---|
985 | named by it's `argv[0]' (this breaks under the newer libtool) |
---|
986 | |
---|
987 | |
---|
988 | 0.4 |
---|
989 | === |
---|
990 | |
---|
991 | * Sending a rep process a `SIGUSR2' prints all debug buffers |
---|
992 | |
---|
993 | * Added `--with-value-type', and `--with-malloc-alignment' configure |
---|
994 | options. Also added code to automatically detect the first of |
---|
995 | these options. |
---|
996 | |
---|
997 | * Fixed some 64-bit problems |
---|
998 | |
---|
999 | * Removed the difference between static and dynamic strings |
---|
1000 | |
---|
1001 | |
---|
1002 | 0.3 |
---|
1003 | === |
---|
1004 | |
---|
1005 | * New compiler command line option `--write-docs' |
---|
1006 | |
---|
1007 | |
---|
1008 | 0.2 |
---|
1009 | === |
---|
1010 | |
---|
1011 | * The variables `error-mode' and `interrupt-mode' control where |
---|
1012 | errors and user-interrupts (i.e. `SIGINT' signals) are handled. |
---|
1013 | The three possible values are: `top-level', `exit' and `nil' |
---|
1014 | (denotes the current event loop). |
---|
1015 | |
---|
1016 | * Fixed bug where all dynamic types were erroneously `symbolp'. |
---|
1017 | |
---|
1018 | * `SIGINT', `SIGHUP' and `SIGTERM' signals should now be caught more |
---|
1019 | successfully. |
---|
1020 | |
---|
1021 | * Added a new directory to `dl-load-path': `LIBEXECDIR/rep/ARCH' to |
---|
1022 | contain third-party shared libraries. |
---|
1023 | |
---|
1024 | |
---|
1025 | 0.1 |
---|
1026 | === |
---|
1027 | |
---|
1028 | First public release. |
---|
1029 | |
---|