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