newLISP Changelog

What's new in newLISP 10.6.3 Dev

Jul 9, 2015
  • Additions and changes:
  • dolist now also accepts arrays.
  • The net-eval function now returns the evaluation of the last function passed, not the first. The possibility of passing more than one expression in net-eval is not documented.
  • The system variable ostype on MS Windows now reports the string "Windows" not "Win32". Windows now also can be compiled as a 64-bit application.
  • net-eval connection timeout changed to 15 seconds from 60 secconds. The processing timeout while connected can still be set by the user in a net-eval parameter.
  • The environment variable HTTP_AUTHORIZATION has been added to the variables handled in HTTP server mode.
  • In date-value the date and time numbers can now be given in one list instead of separate number parameters using and additional syntax.
  • The date-list function, when given without a parameter, now returns the date list for the current UTC date and time value.
  • The trim function without trim character parameters will now trim all white-space characters, not only spaces.
  • dump now returns the number of cells dumped not true.
  • A new trace syntax (trace int-device) writes all expression entries and exit results to the device given. int-device can be could be an open file or 1 for stdout.
  • The stack trace in error messages now prints the entire espression passed for evaluation, not only the function name.
  • The tmp directory is now defined on newLISP startup. For UNIX this is /tmp, for Windows it is taken from the TMP environment variable or assumed as /tmp. The directory is used by the built-in function share and the built-in HTTPD server.
  • A new newLISP library call (newlispLibConsole 1) forces console output to stdout instead of writing to the return string of newlispEvalStr. The same call also enables console input via stdin.
  • newLISP can now be compiled as a 64-bit executable. Thanks to Shigeru Kobayashi for doing most of this work.
  • Bug fixes:
  • date-list crashed for negative values on some Windows versions.
  • The det and mat functions now give an error message when passed the wrong dimensions.
  • HTTP server mode now works correctly with Apache server, when the environment variables NEWLISPDIR and PROGRAMFILES are not defined. Default file paths are assumed for these variables.
  • HTTP only server mode with command-line switch -http did not reject net-eval requests.
  • expand could crash when evaluating binding lists.
  • The 'json-parse' function now handles 64-bit number also in 32-bit versions of newLISP.
  • Compatibility with previous versions:
  • This version is compatible with the previous version 10.6.2 except for dump which now has a different return value, trim which now strips all white-space when in default mode and ostype which now reports "Windows" for all MS Windows versions. Most existing source should not be affected by this.

New in newLISP 10.6.2 (Jan 20, 2015)

  • Additions and changes:
  • A new function (collect exp [int-max-count]) reapeatedly evaluates exp and collects results in a list until evaluation yields nil or an optional maximum count of results is collected.
  • An addtional syntax of the reset function can be used to change the maximum cell count as reported by sys-info.
  • Some PCRE regular expression options can now be given as either numbers or letters. Multiple letter optiosn can be combined in a string. This affects all functions using regular expressions. See the regex function for details.
  • The regex function now gives offset and length in number of UTF-8 characters when PCRE UTF8 option 2048 or "u" is specified.
  • A second syntax pattern for copy allows copying a newLISP cell from a memory address. This is useful when interfacing with C-language code.
  • The get-string function now takes one or two additional optional parameters for two new syntax patterns. The new patterns allow creating string buffers from memory address locations limited by size or a limit string. Using special limit strings, UTF16 and UTF32 strings of unknown size can be copied. This is useful when interfacing with C-language code.
  • The macro? predicate now also can be used on symbols to test if a symbol was created using the macro function.
  • A wrong UDP option in net-connect or net-listen will now throw an error message. Previously wrong UDP options were ignored.
  • json-parse now translates JSON null to a symbol null in newLISP not nil as before.
  • Bug fixes:
  • rotate on a (copy str) expression corrupted memory.
  • The flt function now returns an unsigned integer on all platforms. Previusly on 32-bit versions a signed integer was returned.
  • The crc32 function will not sign-extend on 32-bit newLISP.
  • The protected? function did not recognize macro symbols as protected.
  • Fixed multi-line shell mode on Windows when comments are present.

New in newLISP 10.6.1 Dev (Sep 17, 2014)

  • Additions and changes:
  • A new function (collect exp) reapeatedly evaluates exp and collects results in a list until evaluation yields nil.
  • Some PCRE regular expression options can now be given as either numbers or letters. Multiple letter optiosn can be combined in a string. This affects all functions using regular expressions. See the regex function for details.
  • The regex function now gives offset and length in number of UTF-8 characters when PCRE UTF8 option 2048 or "u" is specified.
  • A second syntax pattern for copy allows copying a newLISP cell from a memory address. This is useful when interfacing with C-language code.
  • The get-string function now takes one or two additional optional parameters for two new syntax patterns. The new patterns allow creating string buffers from memory address locations limited by size or a limit string. Using special limit strings, UTF16 and UTF32 strings of unknown size can be copied. This is useful when interfacing with C-language code.
  • The macro? predicate now also can be used on symbols to test if a symbol was created using the macro function.
  • A wrong UDP option in net-connect or net-listen will now throw an error message. Previously wrong UDP options were ignored.
  • Bug fixes:
  • rotate on a (copy str) expression corrupted memory.
  • The flt function now returns an unsigned integer on all platforms. Previusly on 32-bit versions a signed integer was returned.
  • The crc32 function will not sign-extend on 32-bit newLISP.
  • The protected? function did not recognize macro symbols as protected.
  • Compatibility with previous versions:
  • This version is compatible with the previous version 10.6.0.

New in newLISP 10.6.0 (Aug 7, 2014)

  • Stable release 10.6.0 now has a native expansion macro function and adds many other improvements in several areas.

New in newLISP 10.5.8 Dev (Mar 12, 2014)

  • Development release v.10.5.8 adds native expansion macros and continues with many small additions and improvements in several areas.

New in newLISP 10.5.6 Dev (Dec 11, 2013)

  • Since OSX 10.9 Maverick (format "%'d" 12345) => 12,345 will work too.
  • Will not work on any locale but works on en_US.UTF-8.
  • Fixed 'apply' for arrays introduced in 10.5.5 for a cell/memory leak.
  • When making hash trees using the predefined context 'Tree',
  • the default symbol in the new context is protected as is 'Tree:Tree'.
  • Default symbols in hash trees must be 'nil' in order for the hash
  • statement syntax for namespaces to work.
  • When copying symbols from a source context to a target contest using 'new'
  • or 'def-new', the 'protected?' property is copied too.
  • An empty list as index vector for a list or array yields the original
  • list or array as return value:
  • (set 'L '(1 2 (3 4)))
  • (L '()) => (1 2 (3 4))
  • (nth '() L) => (1 2 (3 4))
  • Many document changes, additions and corrections.
  • int' can convert binarys numbers like (int "0b11111") => 31
  • This format is recognized by the code reader/loader since v.10.4.4.
  • Integers are accepted as hash keys. This allows creating sparse vectors:
  • (new Tree 'V)
  • (V 123 "hello")
  • (V 123) => "hello"
  • reverse' can be used on arrays.
  • Anaphoric system variable $it is now set to the value of the conditional
  • expression in 'if'.
  • Speed improvements in evaluateExpression(). For this The -pendatic option
  • has been turned off in Linux to avoid ISO C90 mixed declaration warnings.
  • length' on integers will return the number of digits, just like it already
  • does on bigint numbers, on floats returns the number of decimal digits before
  • the decimal separator.

New in newLISP 10.5.5 Dev (Nov 21, 2013)

  • This development release has small improvements and bug fixes in several areas.

New in newLISP 10.5.4 (Oct 2, 2013)

  • This stable release fixes bugs and adds two new call patterns to the t-test function.

New in newLISP 10.5.3 (Jul 11, 2013)

  • New Features:
  • New cluster analysis functions kmeans-train and kmeans-query (v.10.5.2).
  • Bug fixes:
  • Big integer division had problems with embedded, aligned big int sized zeros and trailing zeros in results. On Linux, compiler optmizations in big integer division code caused problems and are disabled now with no decrease in performance (v.10.5.1).
  • The bigint function now accepts integers in strings with trailing non-digit characters and floats in simple dot-decimal notation (v.10.5.1).
  • After Java update 7u21, install directory names could not have spaces. This has been fixed (v.10.5.2).
  • Escaped " quote and \ backslash characters in json-parse strings are now handled correctly (v.10.5.2/3).

New in newLISP 10.5.2 Dev (Jun 27, 2013)

  • Fix for Java 7u21 in guisserver.jar, guiserver.lsp and newlisp-edit.
  • function gs:run-shell now takes separate command and args parameters.
  • New functions 'kmeans-train' and 'kmeans-query' for cluster analysis. The
  • Function 'kmeans-train' allows starting centroids to be either generated
  • randomly or be passed as an extra parameter. This allows clustering like
  • in Kmeans++ or other advanced schemes of pre-calculated start centroids.
  • When pre-calculated centroids are given, they are allowed to have less
  • columns, thus forcing kmeans clustering with less columns. This allows
  • to pre- or post-label the data set by including cluster-membership labels
  • in the last column.
  • kmeans-train matrix-data int-k context [matrix-centroids])
  • return => list of inner SSQs for all iterations
  • matrix-data -> n rows by m columns (list or array)
  • int-k -> number of desired clusters
  • context -> new or existing context for results
  • matrix-centroids -> optional k * m starting centroids (list or array)
  • ctx:centroids -> k * m matrix of k centroids
  • ctx:deviations -> list of average intra cluster deviations = sqrt(ssq-cluster/n-cluster)
  • ctx:clusters -> list with k sublists each containing indices into data
  • ctx:labels -> list of n cluster labels, one for each data record
  • kmeans-query list-data centroids)
  • return => list of k Eucledian distances from the k centroids
  • list-data -> data record to be classified
  • centroids -> result in namespace from previous kmeans-train or any other
  • list of data records to calculate Eucledian distances
  • kmeans-query' can also be used for KNN (K Nearest Neighbour) analysis,
  • as it calculates the Eucledean distances for any matrix given in
  • the second argument, not only centroids, but e.g. the original
  • dataset. If the data-set is pre-labeled, then list-data has less
  • columns forcing to not include the label in analysis.
  • Fixed handling escaped " (quote) in JSON strings.

New in newLISP 10.5.1 Dev (Jun 4, 2013)

  • bigint will take mal-formed integers:
  • bigint "hello") -> nil
  • bigint "123hello") -> 123L
  • bigint "+123hello") -> 123L
  • bigint "-123hello") -> -123L
  • bigint "123.456") -> 123L
  • but should not be used on string of scientific notation, it only converts the mantissa
  • bigint "123.456e10" -> 123L
  • Fixed division when aligned or not aligned embedded bigint 0s (9 zeros).
  • Fixed more big integer division problems and added more tests to qa-bigint.
  • Compiler optimizations are now supressed in part of the big integer
  • division code to make it work on Linux. Does not affect performance.

New in newLISP 10.5.0 (May 22, 2013)

  • Changes and additions:
  • The functions json-parse and json-error allow fast parsing of JSON formatted text-data. The module json.lsp has been removed from the distribution, but is still available at www.newlisp.org.
  • The integer operators, + - * / % = < >= != and the functions abs, even?, odd?, length, number? and zero? now accept big integers with unlimited precision. If the first argument in any of these operators and functions is a big integer, the calculation performed will be in big integer mode. Integer values greater than 9223372036854775807 or smaller than -9223372036854775808, or integers with an appended letter L, will be processed in big integer mode - as in 123L -. For details see the new manual section about big integers in chapter: 8. Evaluating newLISP expressions.
  • The new function bigint can be used to convert from integer, float values or strings to big integer.
  • The new predicate bigint? checks for big integer type.
  • The function flat now can take an optional level parameter to limit flattening a list to certain depth level: (flat []).
  • The usage of $0 in replace on lists (not regular expressions) has been eliminated. The count of replacements is now contained in the new $count system var, not $0, which is strictly reserved for regular espressions. This also speeds up replace.
  • read-expr now uses $count instead of $0 for the number of characters processed.
  • When using option 8 in xml-parse to translate XML tags into newLISP symbols, colons ':' in XML namespace tags will be translated into a '.' dot.
  • Crtl-D in Unix will now emit a line-feed before exiting.
  • In the file? function, the true flag not only causes the filename to be returned but now also implies that the filename is not a directory, else nil is returned.
  • Using an addtional true flag in the real-path function, the executable path of an executable is returned - similar to the UNIX utility which. On Windows and BSDs, real-path now also veryfies that path and file are valid, as it always did on non-BSD Unix (OSX, Linux).
  • newLISP server mode now sets the environment variable REMOTE_ADDR to the IP-string of the connecting client.
  • Debug mode for get-url now also outputs status line of remote server.
  • Linking the newLISP exeutable and source code is now built-in via the new command line option -x. The file util/link.lsp is not required any more. Linking is now documented in chapter 4. about Command-line options and works on all operating system platforms.
  • Extended command line buffer to 1024 (previously 512).
  • The parser now also accepts -.9 as -0.9 and +.9 as +0.9.
  • The module sqlite3.lsp has added paths for the imported library (1).
  • Added make android_dist and make android_dist_utf8 commands for making newlisp-ndk-x.x.x.tgz and newlisp-ndk-utf8-x.x.x.tgz packages for compilation in the Android Native Development Kit (NDK). To run newLISP on Android in server mode and to support data transfers of more than 4072 bytes in the multiprocessing Cilk API and shared memory API, a /data/tmp directory must be present on the Android device. (sys-info -1) on Android is 11 and ostype is "Linux".
  • Bug fixes:
  • When passing a wrong second parameter type to an uninitialized symbol in extend, the function crashed. Now an error exception will be thrown.
  • A fix for sort when the sorting function is generated at run-time.
  • When newLISP is compiled as a library big/small -endianess is now calculated as in the main version instead of always assuming big-endian. This affected pack, unpack and get-int in the shared library version.

New in newLISP 10.4.8 Dev (May 9, 2013)

  • Cleanup of the factor function
  • Like date-parse, date-value will produce negative values for dates before 1970-1-1 til 1901-12-14
  • The function 'flat' now can take an optioal depth parameter to limit flattening a list up to certain level: (flat [])
  • flat '(1 2 (3 4 (5 6)) (7 8 (9 10))) ) => (1 2 3 4 5 6 7 8 9 10)
  • flat '(1 2 (3 4 (5 6)) (7 8 (9 10))) 1) => (1 2 3 4 (5 6) 7 8 (9 10))
  • flat '(1 2 (3 4 (5 6)) (7 8 (9 10))) 2) => (1 2 3 4 5 6 7 8 9 10)
  • A fix for 'extend' when passing wrong type to unitialized symbol
  • A fix in the parser to accept -.9 as -0.9 or +.9 as +0.9
  • operators and the functions 'abs', even?', 'odd?', 'length', 'number?' and 'zero?' are all working on big-integers of unlimited size. 'float' and 'int' convert bigints into double floats and 64-bit integers and the function 'bigint' converts integers and floats to big integers. See the section "Big integer, unlimited precision arithmetik" in chapter 8. of the Users Manual for more information
  • Extended commandline buffer to 1024 bytes
  • The "debug" option in: (get-url "http://newlisp.org" "header debug") will now also output the status header line of the server response in the console

New in newLISP 10.4.7 Dev (Mar 6, 2013)

  • Eliminate unused JSON error message.
  • Elminated usage of $0 in replace on lists (no regular expressions). The count of replacements now is contained in the new $count system var, not $0. The usage of $0 - $15 now is strictly for regular expressions. This also speeds up replace.
  • read-expr now uses $count instead of $0 for the number of characters processed.
  • Eliminated undocumented usage of $0 for found elements in find-all on lists. Only $it is used. $0 only on find-all on strings with regular expressions. The system variable $count is updated for all forms of find-all, ref-all and set-ref-all.
  • Link feature now built in with comandline flag -x for all OS flavors: newlisp -x The file util/link.lsp is not required anymore but has been included and adapted to changes for the -x linkage. The file illustrates the internals of the linkage process when using the -x option.
  • An additional true flag in the real-path function allows finding the executable path of executables - similar to the "which" utility on UNIX. This is a by- product of fixing the link.lsp feature for UNIX. The additional flag works on all platforms. 'real-path' on Windows and BSD now also veryfies that path and file are valid, as it already did on non-BSD Unix (OSX, Linux).
  • Enforce MAX_SYMBOL for tags in xml-parse and symbol creation using sym.
  • Security fixes for strncpy and strncat.
  • Windows CGI server mode was broken in development version 10.4.6 (isDir()).
  • Preparation for 64-bit Windows (in early summer).

New in newLISP 10.4.6 Dev (Feb 6, 2013)

  • Changes and additions:
  • The functions json-parse and json-error allow fast parsing of JSON formatted text-data. The module json.lsp has been removed from the distribution, but is still available at www.newlisp.org.
  • When using option 8 in xml-parse to translate XML tags into newLISP symbols, colons ':' in XML namespace tags will be translated into a '.' dot.
  • Crtl-D in Unix will now emit a line-feed before exiting.
  • In the file? function the true flag not only causes the filename to be returned but now also implies that the filename is not a directory, else nil is returned.
  • newLISP server mode now sets the environment variable REMOTE_ADDR to the IP-string of the connecting client.
  • Added make android_dist and make android_dist_utf8 commands for making newlisp-ndk-x.x.x.tgz and newlisp-ndk-utf8-x.x.x.tgz packages for compilation in the Android Native Development Kit (NDK). To run newLISP on Android in server mode and to support data transfers of more than 4072 bytes in the multiprocessing Cilk API and shared memory API, a /data/tmp directory must be present on the Android device. (sys-info -1) on Android is 11 and ostype is "Linux".
  • The module sqlite3.lsp has added paths for the imported library (1).
  • Bug fixes:
  • A fix in sort when the sorting function is generated at run-time.
  • A fix in the cgi.lsp module when receiving large POST data (1).
  • The module macro.lsp now works for defining default functors as macros (1).
  • The module plot.lsp had problems when manually defining y-ranges (1).
  • When newLISP is compiled as a library big/small -endianess is now calculated as in the main version instead of always assuming big-endian. This affected pack, unpack and get-int in the shared library version.

New in newLISP 10.4.5 (Feb 6, 2013)

  • Changes and additions:
  • On Windows, process now returns real process ids as in UNIX, not Windows process handles.
  • The cgi.lsp module now handles multiform data in POST requests.
  • Two new make files for compiling RedHat Fedora and CentOS distributions. The configure utility called by make will handle these two subflavors of RedHat Linux automatically.
  • Bug fixes:
  • Memory overrun of invalid UTF8 strings now causes an error message "invalid UTF8 string".
  • The function ref did sometimes not handle correctly multiple, nested matching expressions.
  • The float function did sometimes not work correctly when used on list members.
  • OpenBSD did not load .init.lsp.

New in newLISP 10.4.3 (May 8, 2012)

  • Additions and changes:
  • A new set function union works like (unique (append ... )).
  • Two new predicates even? and odd? test the parity of integers.
  • The new prob-t function returns the one-tailed probablitiy of a Student's t statistic to be equal or greater than the observed value.
  • The new prob-f function returns the probablitiy of F statistic to be equal or greater than the observed value.
  • The new crit-t function calculates the critical value of Student's t for a given one-tailed probability.
  • The new crit-f function calculates the critical value of F for a given probability level.
  • The prob-z and crit-z functions now handle probabilities less than 0.5 for negative Z-values.
  • The new corr function calculates a Pearson product-moment correlation coefficient between two variables.
  • The new stats function calculates some basic statistics for a data vector.
  • The new t-test function performs a Sudent's t-test for dependent and independent date samples.
  • An additional true flag in the char function can turn on 8-bit byte indexing and translation instead of multibyte UTF-8 indexing and translation in UTF-8 enabed versions of newLISP.
  • A true flag in the file? forces the return value to the name string of the file, if it exists.
  • Versions compiled for the new extended FFI now show "libffi" in the banner.
  • Better mean-value adherence of the normal function.
  • In the extended ffi the char* type will now only accept strings as arguments. For string or buffer integer addresses void* must be used.
  • import now can load a library without importing a function. This is necessary on Mac OSX, Linux and other Unix when external functions are referenced from an imported function and the library is not loaded automatically.
  • Modules:
  • newlispdoc now outputs a UTF-8 meta tag in the HTML header.
  • A new module gsl.lsp imports SV, QR and Cholesky decomposition and solver functions from the GNU Scientific Library GSL. Both SV and QR can handle rectangular non-square matrices for decomposition of A and solving Ax = b for x.
  • Updated plot.lsp now also has a plot:XY command and has been added to the standard modules in the source and binary distributions.
  • Bug fixes:
  • The day-of-year value in date-list now starts with 1 instead of 0. The previous version made the same change for the now function.
  • The command-event function now trims trailing line-feed characters in all compile and platform flavors. Previously only UNIX and readline lib enabled versions would trim the string passed by command-event.
  • A fix for pack when packing structures made with struct in 64-bit newLISP.
  • A fix for seek when used after read-line.
  • close had a memory leak introduced in 10.4.0.

New in newLISP 10.4.2 (May 2, 2012)

  • Additions and changes
  • A new set function union works like (unique (append ... )).
  • Two new predicates even? and odd? test the parity of integers.
  • The new prob-t function returns the one-tailed probablitiy of a Student's t statistic to be equal or greater than the observed value.
  • The new prob-f function returns the probablitiy of F statistic to be equal or greater than the observed value.
  • The new crit-t function calculates the critical value of Student's t for a given one-tailed probability.
  • The new crit-f function calculates the critical value of F for a given probability level.
  • The prob-z and crit-z functions now handle probabilities less than 0.5 for negative Z-values.
  • The new corr function calculates a Pearson product-moment correlation coefficient between two variables.
  • The new stats function calculates some basic statistics for a data vector.
  • The new t-test function performs a Sudent's t-test for dependent and independent date samples.
  • An additional true flag in the char function can turn on 8-bit byte indexing and translation instead of multibyte UTF-8 indexing and translation in UTF-8 enabed versions of newLISP.
  • A true flag in the file? forces the return value to the name string of the file, if it exists.
  • Versions compiled for the new extended FFI now show "libffi" in the banner.
  • Better mean-value adherence of the normal function.
  • In the extended ffi the char* type will now only accept strings as arguments. For string or buffer integer addresses void* must be used.
  • import now can load a library without importing a function. This is necessary on Mac OSX, Linux and other Unix when external functions are referenced from an imported function and the library is not loaded automatically.
  • Modules:
  • newlispdoc now outputs a UTF-8 meta tag in the HTML header.
  • A new module gsl.lsp imports SV, QR and Cholesky decomposition and solver functions from the GNU Scientific Library GSL. Both SV and QR can handle rectangular non-square matrices for decomposition of A and solving Ax = b for x.
  • Updated plot.lsp now also has a plot:XY command and has been added to the standard modules in the source and binary distributions.
  • Bug fixes:
  • The day-of-year value in date-list now starts with 1 instead of 0. The previous version made the same change for the now function.
  • The command-event function now trims trailing line-feed characters in all compile and platform flavors. Previously only UNIX and readline lib enabled versions would trim the string passed by command-event.
  • A fix for pack when packing structures made with struct in 64-bit newLISP.

New in newLISP 10.4.1 Dev (Apr 4, 2012)

  • Additions and changes:
  • A new set function union works like (unique (append ... )).
  • Two new predicates even? and odd? test the parity of integers.
  • The new prob-t function returns the one-tailed probablitiy of a Student's t statistic to be equal or greater than the observed value.
  • The new prob-f function returns the probablitiy of F statistic to be equal or greater than the observed value.
  • The new crit-t function calculates the critical value of Student's t for a given one-tailed probability.
  • The new crit-f function calculates the critical value of F for a given probability level.
  • The prob-z and crit-z functions now handle probabilities less than 0.5 for negative Z-values.
  • An additional true flag in the char function can turn on 8-bit byte value translation instead of multibyte UTF-8 translation in UTF-8 enabed versions of newLISP.
  • A true flag in the file? forces the return value to the name string of the file, if it exists.
  • newlispdoc now outputs a UTF-8 meta tag in the HTML header.
  • Versions compiled for the new extended FFI now show "libffi" in the banner.
  • Better mean-value adherence of the normal function.
  • Bug fixes:
  • The day-of-year value in date-list now starts with 1 instead of 0. The previous version made the same change for the now function.
  • The command-event function now trims trailing line-feed characters in all compile and platform flavors. Previously only UNIX and readline lib enabled versions would trim the string passed by command-event.

New in newLISP 10.4.0 (Feb 15, 2012)

  • Additions and changes:
  • import now has a second syntax to specify return and parameter value data types. This new extended API usese libffi. This extension to the current foreign functions interface is available in all standard binary installs of newLISP.
  • The extended callback API allows specifying return and parameter value data types. Like the extended import, the enhanced callback syntax uses libffi.
  • The now time function now returns the GMT offset with opoposite signs, positive for east and negative for west of the UCT Meridian. The day-of-the-year number now starts with 1 instead of offset 0. Both changes make now more ISO 8601 compliant.
  • Bit 11 - hex 0x400 - in the last field of sys-info is set for extended FFI enabled versions requiring libffi.
  • The speed of read-line, when used with a file handle, has been increased many times to the same speed as when used with STDIN.
  • A reworked send, receive message API is multiple times faster and has consistent performance on different OS platforms. The channel for each child is now a dual read/write message queue internally using Unix, local domain sockets. In previous version only one message could be written with send. Now mutiple message can be placed into a queue on the same channel and retrieved on the receiving end with multiple receive statements, until returning nil when the queue is empty. On the sending side, send will return nil when the queue is full.
  • New call patterns for send and receive let the parent process filter child PIDs to target only those child processes, which are either ready to receive or target those from which messages can be be read. The (send) form allows the parent process to filter all those child PIDs, which are ready to receive messages sent by the parent. The (receive) form returns a list of child PIDs ready with messages in their sending queues to be read by the parent process.
  • The creation of a communications channel between and parent process and spawned child processes for usage with send and receive, is now optional:
  • (spawn sym-variable child-process [true])
  • If the send or receive is used with child-process spawned, the optional flag must be set to true.
  • The dummy versions of spawn, sync and abort in the MS Windows version have been taken out.
  • struct allows creating structure data types for usage with the extended import API.
  • In unify the underscore symbol: _ matches any atom, list or bound or unbound variable.
  • The library file newlisp.dll is now installed in its old location in the main newlisp program directory. No administrator rights are necessary for installing in that location. This library is only required for third party applications, not for newLISP itself.
  • The minumum Java version to run Guiserver is now Java JRE version 1.6.
  • Bug fixes:
  • A longstanding bug for ithe list-mode of net-select has been fixed. Now, net-select does return socket numbers in the ready list not 0's (zeros).
  • The link feature using newlisp-x.x.x/util/link.lsp now also works when linking with 64-bit versions of newLISP.

New in newLISP 10.3.10 Dev (Jan 11, 2012)

  • Repeating ffi 'callback' with the same symbol will just return the old
  • address but not redefine the callback or return nil (as in 10.3.9).
  • examples/opengl-demo-ffi.lsp now also working with extended callback API
  • on 32-bit and 64-bit.
  • Huge speed improvement in 'read-line' with file handle parameter,
  • now as fast as STDIN. For file and pipe operations.
  • 'struct's returned by the extended FFI will now be unpacked automatically. Nested structures will be unpacked recursively too:
  • (struct 'pair "char" "char") -> pair
  • (struct 'comp "pair" "int") => comp
  • (pack comp (pack pair 1 2) 3) => "\001\002\000\000\003\000\000\000"
  • (unpack comp "\001\002\000\000\003\000\000\000") => ((1 2) 3)
  • Imported functions can now be default functors:
  • (define myprintf:myprintf (import "libc.dylib" "printf"))
  • All makefile_mingwdll* tweaked for MinGW gcc 4.6.2. But binaries are still
  • delivered compiled on gcc 4.4.0 and made on Windows XP SP2, run fine on
  • Windows 7. 10.3.6 to 10.3.9 had newlisp.dll compiled for cdecl now in
  • 10.3.10 newlisp.dll calling conventations are back to stdcall.

New in newLISP 10.3.9 Dev (Dec 22, 2011)

  • struct' function for extended FFI usage now working for 32 and 64 bit
  • struct 'foo "char" "int" "short int")
  • Foo can now be used as a data type in the extended FFI API:
  • import "thelib" "afunc" "foo" "foo") ; takes ans returns a struct foo
  • unpack foo (afunc (pack foo 1 2 3))) => returns a list with 3 numbers
  • The additional syntax forms of 'pack' and 'unpack' take care for packing
  • and unpacking wirth the correct number of pad bytes to make align
  • structures on different Architectures.
  • See qa-special-tests/qa-libffi for an example.
  • Accept data lists in struct packing just like in traditional 'pack':
  • struct 'pair "int" "int") => pair
  • pack pair 1 2) => "\001\000\000\000\002\000\000\000"
  • pack pair '(1 2)) => "\001\000\000\000\002\000\000\000"
  • Nested structure now can be packed:
  • struct 'pair "char" "char") => pair
  • struct 'comp "pair" "short int") => comp
  • pack comp (pack pair 1 2) 3) => "\001\002\003\000"
  • Sub-structures are unpacked manually (may be changed):
  • unpack comp (pack comp (pack pair 1 2) 3)) => ("\001\002" 3)
  • set 'p (first (unpack comp (pack comp (pack pair 1 2) 3))))
  • unpack pair p) => (1 2)
  • Because of memory management issues with cells in FFI symbols
  • extended ffi functions, structs and callbacks can only be defined
  • once. Subsequent definitions return nil and the existing definition
  • stays untouched.
  • Miscellanous fixes for 64-bit newLISP and ffilib usage.
  • Added custom ffi_type ffi_type_charpointer for displayable strings
  • now 'unpack' unpacks strings for "char*", not address numbers.
  • SHA256 crypto algorithm has been added to the module crypto.lsp.
  • Thanks to Marc Hildman for this contribution.

New in newLISP 10.3.5 Dev (Nov 9, 2011)

  • 'invert' over-allocated memory
  • Fixed a crash bug in purgeSpawnList()
  • icmp6.h include for cygwin in nl-sock.c (thanks KOSH)
  • The creation of a communications channel between and parent process and 'spawn'ed child processes for usage with the message API of 'send' and 'receive', is now optional: (spawn [true])
  • If the'send' or 'receive' is used on the child process spawned, the optional flag must be set to 'true'.
  • The fakes versions on 'spawn', 'sync' and 'abort' in Win32 have been taken out.
  • The newLISP shell "newlisp-x.x.x/util/nls" now works on MS Windows too.
  • The link feature using util/link.lsp did no works with 64-bit versions of newLISP.
  • In the MinGW compile of nl-sock.c the include file wspapi.h has been replaced with ws2spi.h. This file is part of the normal MinGW install.

New in newLISP 10.3.3 (Sep 22, 2011)

  • Bug fixes:
  • Fixed broken memory sharing for data sizes greater than 4084 bytes. This affected the built-in functions spawn and share for memory transfers greater than 4084 bytes.
  • When in debug or trace mode, error messages caysed by the debugged source are now printed to the console. Debugging is not interruped and can continue. As previously, the return value of the failing function will be 0 or nil depending on the function causing the exception.
  • Return values from library callbacks not work correctly under some circumstances. This did not affect the example programs opengl-demo.lsp and win32-demo.lsp.
  • Other addtions and changes:
  • On MS Windows newlisp.dll is now installed in windows/system32 or what the main 32-bit DLL directory may be on a specific Windows platform.
  • From newLISP library a new function newlispCallback can be imported to register callback functions called from the library back into the controlling parent.
  • Improved handling of -l and -L log file options. The log file will always be crated, if it does not exist, and the output format has been improved.
  • Much better memory and speed efficiency in string and format functions when formatting large amounts of data.

New in newLISP 10.3.2 (Jul 21, 2011)

  • Additions:
  • Quoted strings now can contain unicode characters encoded using \u.... , where .... are four hex digits e.g.: "\u03b1\u03b2\u3b3" for the Greek letters "αβγ" (aplha, beta, gamma). When reading the string, newLISP will translate it to UTF8 encoded characters on UTF8 enabled versions.
  • Other improvements:
  • Better error message on self-referential list changes.
  • Improved error messages in implicit indexing.
  • Recognize MBCS characters in MS Windows pathnames.
  • Siginificant speedup in functions: filter, index, clean, exists and for-all
  • Significant speedup on series when second argument is a function.
  • Significant speedup on find-all when the third argument is used.
  • Better memory management and speed improvements for map.
  • A new version of json.lsp module now processes backslashed characters as of JSON spec
  • Bug fixes:
  • Fix for filter, index, clean, exists and for-all when handling empty list elements ().
  • inc, dec, ++ and -- did not check for missing parameters.
  • The boolean parameter in dotree could cause a crash.
  • Fix for a buffer overflow in interactive multi-line mode.
  • A bug fix for timer when using recursively.
  • An EOF error in read-line was not cleared and made all subsequent calls to read-line fail with nil.
  • xfer-event now reports netto bytes sizes transferred. Before, accumulated bytes were reported. As one get-url, put-url or post-url request can contain several subrequests, the accumulated numbers were sometimes confusing. Now the sum of the numbers reported will always reflect the total size transferred. If an accumulated number is needed, it should be calculated in the xfer-event function.

New in newLISP 10.3.1 (May 19, 2011)

  • This development release fixes bugs and makes efficiency improvements.

New in newLISP 10.3.0 (Feb 2, 2011)

  • This stable release introduces runtime switching between internet protocols IPv4 and IPv6, adds other miscellaneous features and fixes a few bugs.

New in newLISP 10.2.18 (Jan 7, 2011)

  • extend' will take an un-initialized variable and create a list or string depending on the second argument (similar to 'push'). Before a variable
  • in the first argument had to be initialized to a string or list.
  • Added path for Fedora Linux in mysql.lsp
  • PCRE was not configured correctly for utf8 when using configure-alt.
  • pcre-config.h now includes config.h when using configure-alt to build.
  • Builds with the standrad configure where never affected.
  • versions.
  • Added a "divert" option to 'net-listen'. In this case a IPPROTO_DIVERT
  • option is added to a raw socket. 'net-receive-from' and 'net-send-to' are used to serve the divert-socket returned by 'net-listen'. The interface address is given as an empty string for INADDR_ANY.
  • newLISP must be run in superuser mode to be able to create divertSocket.
  • Some internal cleanup for p_first(), p_last()
  • Bug fixes for modules/json.lsp
  • Fixed cell leaks when 'ref', 'ref-all' failed with error in compareFunc()
  • The return value for 'ref' has changed from () to nil, when not finding anything.
  • Fixed cell leak when 'setf/q' failed with protection error symbolCheck cleanup in 'assoc', 'lookup', 'ref', 'set-ref' and all flow constructs results in some speedup for these functions.

New in newLISP 10.2.17 (Nov 16, 2010)

  • Fixes in error handlers of xmlrpc-client.lsp and xmlrpc.cgi
  • Fixes in guiserver.jar in Table UI
  • The sniff and scan utilities are added to newlisp-x.x.x/examples directory in the source distribution.
  • On 64-bit versions 'date' and 'date-value' will work for dates year 2038
  • and up to January 2100.
  • The 'mod' function assumes the second parameter to be 1 if missing, thus
  • returning the fractional part of a number.
  • Updates to configure-alt for Windows 7.
  • POST with multipart/form-data content-type now works with newLISP HTTPD
  • and CONTENT_TYPE is added to the environment by newLISP server. Now added.

New in newLISP 10.2.16 (Nov 16, 2010)

  • New table widget and supporting functions in Guiserver.

New in newLISP 10.2.15 (Nov 16, 2010)

  • Increased maximum length of command-line to 511. This affects the interactive
  • command line and line length in HTTP request headers.
  • Default connection timeout set to 10 secs, up from 3 secs. Always can be overwritten by timeout parameters in net-connect and get,post,put and
  • delete -url functions.
  • The boolean flag in 'title_case' in non-UTF8 versions was not calculated
  • correctly.
  • All HTML files in the doc directory are UTF8 and XHTML 1.0 Trans. compliant.
  • Additional parameter in '!' on MS Windows can be used to enter process creation flags, e.g. for suppressing creation of a command window. Not using the parameter assumes the old '!' method. When the parameter is present (can be 0) an alter native method of process creation is used without dependence on a command shell window.
  • Fixed a bug in symbol compare routines when comparing dynamic symbols.
  • Result of 'map' should always be unprotected.
  • More adjustments in switchable IPv4/6 mode.
  • Last sys-info field should change 7th bit (512) with 'net-ipv'
  • A change in guiserver.lsp to fix instabilities when gs:check-event was called
  • from gs:listen invoked event handler functions.

New in newLISP 10.2.14 (Sep 3, 2010)

  • Development version 10.2.14 has bug fixes and other small adjustments

New in newLISP 10.2.11 (Aug 4, 2010)

  • Windows versions now compiled using wspiapi.h in nl-sock.c. This guarantees
  • working of freeaddrinfo(), needed for IPv6, on some older Win 2000 systems.
  • New multiline mode on the commandline, without using [cmd], [/cmd] tags:
  • just hitting [enter] on an empty line gets into and out of multiline mode.
  • The [cmd], [/cmd] still work too and are needed internally when newLISP is
  • working in server mode, for some IDEs and when pasting source containing
  • empty lines into the terminal. Tab-expansion (on Unix only) for built-in
  • function names also works in multiline mode.
  • Minor changes in version 1.37 of the Java based Guiserver.
  • In 'net-ping' specify optional third parameter to get an error string instead
  • of response time, if the host did not respond. This behavior was present in
  • previous versions, but was not documented.

New in newLISP 10.2.8 (May 20, 2010)

  • Additions and improvements to networking functionality:
  • A new net-packet function can be used to inject custom configured IP packets. The function is only available on UNIX like operating systems and has been configued and tested for Mac OS X on PPC and Intel CPUs, UBUNTU Linux on Intel CPUs and OpenBSD on Intel CPUs.
  • The net-connect function now has a timeout parameter. In older versions connection timeout behavior was controlled by the OS. Now connection timeout is under programmer control.
  • The timeout parameter in the web functions get-url, post-url, put-url and delete-url now also controls the connection phase. In older versions, it only controlled the processs after connecting. This gave web functions the appearance of hanging when the target server was disconnected or down. Now these functions already can timout during the connection phase.
  • The net-service function now works in both directions. Now port number can be translated to service names too. In older versions only translation from service names to port numbers was possible.
  • Other changes and additions
  • The timing function time did overflow after 35 minutes in the 10.x generation of newLISP; now it can count to about 68 years.
  • Speedup of hash entry deleletion. No reference checks are made anymore when deleting hash entries using ( nil).
  • find-all has improved behavior on looping conditions, where it no will increment the search offset by 1. Looping conditions occur, when regular expressions result in zero-length strings found. In previous versions find-all did exit on looping conditions.
  • In MS Windows both URLs forms: file://C:/example.txt and file:///C:/example.txt are now valid.
  • The save function has been made faster up to a factor of 10x.
  • OpenBSD 4.6 now added as a regular test environment additionally to Mac OSX, FreeBSD, UBUNTU Linux, SunOs Sparc and Windows XP/7.
  • Bug fixes
  • The map function now handles short parameter lists in a consistent manner when mapping string manipulating functions onto lists of strings.
  • xml-parse with context option did not convert names of built-in primitives.
  • load in HTTP mode did not return to previous context, but always went into MAIN.
  • On Win32 negative -Inf lost the sign when converting to the maximum integer value.
  • The true flag in delete was not handled correctly since 10.2.0.
  • In get-url the "list-debug" option did return a string instead of a list.
  • The find function accepted the regex option number only as a constant.

New in newLISP 10.2.7 (May 15, 2010)

  • adjustments for IPv6 and bugfixes

New in newLISP 10.2.6 (May 8, 2010)

  • Support for OpenBSD in net-packet and bug fixes

New in newLISP 10.1.8 (Dec 9, 2009)

  • Fixed a bug when replicating primitives with 'new'.
  • FOOP objects are now mutable, anonymous or not. The old obj parameter has been dropped from FOOP methods. Instead a new function 'self' is used to access and index the target object:
  • (new Class 'Circle)
  • (define (Circle:move dx dy)
  • (inc (self 1) dx)
  • (inc (self 2) dy))
  • (set 'aCircle (Circle 1 2 3))
  • (:move aCircle 10 20)
  • aCircle => (Circle 11 22 3)
  • Old FOOP methods have to be rewritten to drop the obj parameter:
  • old : (define (Foo:method obj p1 p2) ...)
  • new : (define (Foo:method p1 p2) ...)
  • This has also reduced the overhead required in FOOP methods. Allthough this change creates an incompatibility with older FOOP code, the advantage of having mutable objects compensates for that incompatibility. Destructive methods was the FOOP feature most asked for ind newLISP.