What's New about wwlisp
Last updated 1 December 2008
New in the Release 8.2.6 of December 2008
- in order to facilitate the use by Common-Lispers, several unnecessary syntactic differences between wwlisp and Common Lisp have been aligned to the standard and several macros, functions and features have been added
- in the list of formal arguments of an expr in defun and lambda, the indicators &optional and &rest now allow the interpretation-time checking of the number of actual arguments and a variable list of arguments; as the keyword concept does not exist in wwlisp, the new macro with-keyword-list facilitates the use of normal symbols as keyword arguments
- in nth and nthcdr the first element is now element zero instead of element one
- in elt, the order of the two arguments has been reversed, becoming first the sequence then the index
- return-from does not evaluate its first argument
- the colon readmacro used as a shortcut to (list something) is removed in order to avoid confusion with Common Lisp keywords
- the error numbers have been replaced by symbolic atoms, which are easier to remember; throw, catch, error have been refactored and errnum obsoleted; the last error is now stored in *lastcondition*
- bug fix: stack overflow when the OS gives a smaller stack than requested
New in the Release 8.2.5 of November 2008
- binary-constructor now accepts also a hexadecimal initializer byte
- correct a SIGSEGV in binary-concat
- addition of string-base64toint, string-base64touint, string-hexatoint, string-hexatouint and of more formats in binary-format and in string-scan-binary
- rename string-unbase64 and string-unhexadecimal to more explicit string-base64tobin and string-hexatobin
- addition of class-combine and class-mutate class hacking methods
- garbage collection of living objects and related SIGSEGV caused by the scrubbing Garbage Collector (flag -G) has been corrected
- inconsistencies in copying correct parameters values or handling keywords in thread-constructor have been corrected
- a -d start option has been added in order to cause a minidump and thread abort when handling a SIGSEGV
- CTRL-C (or SIGINT) can be caught with (catch 'error-0 ...)
- an invalid padding in the unsignedinteger return value of library-call was corrected
- the option SO_RCVTIMEO in socket-setsockopt which did not work was corrected
- garbage in some starting and ending angle combinations in gdimage-arc has been corrected
New in the Release 8.2.4 of July 2008
- a new version of the wwlisp2dimage library, with more GD based functions implemented and enough versatility to support a quite simple but useable graphic workflow
- the function return-from has been added as a generalized non-local jump statement working in explicit or implicit prog and progn blocks
- the translation table for base64 conversion between binary and string has been corrected
- eval was not throwing an error if the first argument of an s-expr was nil; this has been corrected
- due to code regression, profile did not work since 8.2.0, and has been corrected
- thread unsafety in read-from-string, princ-to-string, prin1-to-string, readerprinter class, have been eliminated
- sort was not working correctly with a lambda expression as criterium and has been corrected
- the work directory for edit is now created automatically at the first call
- in wwlispkdialog library, openfilenamedialog and savefilenamedialog were unstable (doing SIGSEGV randomly) so the KDE static methods have been replaced by the Qt equivalent; at the same time, a new getdirectorydialog has been added
- the thread name was missing in the initialization of the *thisthread* symbol, which has been corrected
- binary-search and the related functions of the binary class have been made faster
- unsignedinteger-+ giving a bad result has been corrected
- a forgotten 2GB file size limit in stream-ftell has been corrected in order to handle 64 bits file sizes properly
- a cleanup of all the compilation warnings and the removal of obsolete WIN32 remnants and streamlining of the IO code have been done
New in the Release 8.2.3 of April 2008
- several bounds trespassing and recursive formatting errors in binary and string classes were corrected
- a segmentation fault caused during the binary space garbage collector has been corrected
- the class-copy method was made native and more correct and removed from the init.lsp file
- all the builtin constructors smashing the plist of children classes were fixed in order to respect them
- backtrace which missed some function names has been fixed
- a new use function to load add-ons has been added
- the number class has been renamed as scalar class; all dependencies, type-checking and conversion functions and documentation were fixed accordingly
- directory class has been corrected and upgraded in order to fully distinguish symbolic links and other files
- readerprinter-read-string has been modified to allow more options for end of string
- in /usr/local/bin, addition of a small bootstrap code for easier loading of wwlisp2dimage library
- in /usr/local/bin, addition of a small bootstrap code for easier loading of wwlispkdialog library
- new wwlisp2dimage library as a loadable shared object, allowing to create and manipulate images with the GD library
- in wwlispkdialog library, kdialog-addlabel with a valid binary as pixmap was erroneously throwing an error and is corrected
- the explicit integer-constructor and float-constructor giving a property-list instead of the expected object were corrected
- process-constructor is modified in order to allow also to redirect stderr which was not yet redirectable, and to add more redirection or piping options
- select now allows to work also with generic callbacks defined at the level of the object's class
Added to the Release 8.2.2, in October 2007
- new wwlispkdialog library as a loadable shared object, allowing to define and use some simple KDE dialogs
- revision of the documentation, for better readability and correction of a few errors
New in the Release 8.2.2 of July 2007:
- new raw keyword in stream-read-char, stream-read-char-direct, stream-write-char, socket-read-char, socket-write-char, allows to read and write simple bytes without UTF-8 interpretation
- readerprinter-pretty-print safer in case of formatting error and better aligned
- object destruction due to inadequate GC protection in several methods of the binary class corrected
- some of the inconsistencies caused by the start option -G corrected
New in the Release 8.2.1 of June 2007:
- Bad masking in addressof, carvalue, cdrvalue corrected
- set-formatter did not remove a formatter, corrected
- readerprinter-read-string incorrect at end of string, ok now
- readerprinter-read-string now understands escaped separators
- Strings were read by readerprinter-ratom and not reconfigurables, they are now read by a read-macro and formatted by a formatter
-
New kernel (2.6.18) brought address space layout randomization, which broke the way library-call builds its argument stack; the method was corrected, made ASLR insensitive and academically better
- A way to compile an application and get an executable has been added
- nth wrong error message corrected
- break not full deterministic, corrected
- Potential reentrance problem in read-from-string, prin1-to-string and princ-to-string solved
New in the Release 8.2.0 of May 2007:
- New internal way to indicate the class of any object, doing copy-on-write on property-lists, leading to a unique continuous class inheritance tree, no more 'dead end' classes; looks like Smalltalk...
- Wide refactoring due to the previous point
- Still more conversion functions between integer, unsignedinteger, float, string and binary have been added
- Change to the readerprinter: rare segfault corrected, now uses recognizers and formatters
- Class readablestring becomes symbolicstring
- Infrequent segfault in prog corrected
- Bad handling of ctrl-C in stream-read-char and stream-read-char-direct now corrected
- Recursive error in princ-to-string corrected
- Junk returned when reading badly formed floats corrected
- Renamed set-macro-char, set-except-proc, set-read-proc, set-write-proc to add some hyphens
- Added set-scanner, set-formatter
- Added recognizers and formatters for number and binary
- Added command$, working like backquote in bash
- process-constructor could not exec escaped string corrected
- edit functions with unix reserved character in name reviewed
- GC reviewed; use other way to recycle lost objects
- Added flag -G for more aggressive 'scrub' mode of GC
- Added specialchar class instead of 'out-of-band' hack in ratom
- Added number class as ancestor of float, integer, unsignedinteger
- readerprinter more explicit when cannot be totally conformant
- stream-fwrite does not accept its 2nd argument; corrected
- Added binary-base64, binary-hexadecimal, string-unbase64, string-unhexadecimal translation methods
- html documentation updated
New in the Release 8.1.0 of January 2007:
- The integer and unsignedinteger classes become 64 bits
- All the arithmetic is now full 64 bits
- The stream class now handles large files with 64 bits size
- The directory class is refactored and shows large file size and more timestamps
- More conversion functions between integer, unsignedinteger, float, string and binary have been added
- The readerprinter class now reads and prints 64 bits integers
- setsockopt and getsockopt have been added to socket class
- symstream, symsocket become symbolicstream and symbolicsocket
to avoid confusion with an existing trademark
- The class 'file' is added as ancestor of stream and socket
- Object property 'lineage' becomes 'ancestry'
New in the Release 8.0.1 of December 2006:
- Misplaced Garbage Collection causes random segfault in all
the methods of the 'string' class.
- Array overflow in the 'directory' class constructor causes
random segfault.
New in the Release 8.0.0 of November 2006:
- This version has seen a profound implementation change. The structure of the memory cell was based since version 1 on two 32 bits words and two bytes for ref and type, for a total of 80 bits; from version 8 on, the cell has been upgraded to 128 bits, ref and type being stored in the 4 least significant bits of cdr; as cdr is pointing only to other cells which are all aligned on 16 bytes boundaries, those 4 least significant bits are always 0. A thorough refactoring has been executed, as ref, type, car and cdr must now be accessed via special functions doing some bit hacking instead of structure fields. This implementation change was necessary to allow the interpreter to be ported more easily to a 64 bits architecture.
- From this version on, what was mostly a private pet-project used here and there as a hack or toolbox is now published on SourceForge with the hope of maybe one day help someone.
Updated 1 December 2008 Copyright ©
2008 Walther Waeles