newLISP Changelog

What's new in newLISP 10.6.1

Sep 17, 2014
  • Development release v.10.6.1 makes additions and improvements in several areas and fixes bugs.

New in newLISP 10.6.0 (Sep 17, 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.7 (Feb 19, 2014)

  • Additions and changes:
  • In json-parse the last element in JSON arrays may inow have a trailing comma.
  • In arithmetic big integer operators: + - * / %, now more than two operands are allowed as in normal precision integer operations.
  • The gcd function now supports big integer operations.
  • On Windows format now supports UNIX format characters for 64-bit integers, i.e.: %lld %llu %llx %llX, additionally to: %I64d %I64u %I64x %I64X.
  • The pretty-print default float setting has been changed to "%1.15g".
  • On Linux and MacOS X 10.9+ the % format character can be followed by a single quote ' when using the format function. This causes thousand's separators to be inserted in decimal integer and floating point number formats, e.g.: (format "%'d" 12345) ;=> 12,345. Not working on all locale settings.
  • reset now also cancels command line parameter processing.
  • apply, corr, map, reverse, stats and t-test can now be used on arrays.
  • 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 always be nil for the hash statement syntax for namespaces to work.
  • When copying symbols with 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))
  • The int function handles binary numbers in strings as in "0b101010" for the number 42. This number format was introduced in v.10.4.4.
  • Integers are accepted as hash keys. This allows creating sparse vectors:
  • (new Tree 'V)
  • (V 123 "hello")
  • (V 123) => "hello"
  • Anaphoric system variable $it is now also set to the value of the conditional expression in if.
  • length now returns the number of digits when used on integers as it does already on big integers. On floats the number of digits before the decimal separator is returned.
  • newLISP can now be compiled to JavaScript and run in a web browser. The compile is done using the Emscripten tool set. A complete package to run newLISP in a web browser will be released.
  • Changes and additions in Guiserver:
  • New table functions: gs:table-remove-row, gs:table-set-column-name and gs:table-set-row-count. To avoid API naming confusion, the naming of old gs:table-set-row-number is deprecated and should be called as gs:table-show-row-number. The old naming will continue to work. Thanks to Ferry de Bruin for implementing the new functions.
  • When creating a table using gs:table, a headerless table can be created by specifying empty strings "" for all column headers. The function gs:table-add-column will work accordingly.
  • Three new optional parameters for gs:scroll-pane can specify column headers, row headers and a widget for the top left corner of a table used in the scroll pane.
  • Bug fixes:
  • The big integer version of the -- (decrement) operator left the sign of the second operand changed.
  • bayes-query with Fisher's inverse Chi² method calculated wrong probabilities when training in more than two categories. When training in two categories, the result probabilities were swapped, reporting the probability for the second category first. When using the Chain Bayesian method, results were always correct.
  • Fixed a cell leak introduced in version 10.5.4 when deleting contexts.
  • A fix in round when the value is 0.5.
  • The debugger will now always highlight the correct expression, not highlight the first of multiple instances.
  • find-all in string mode now returns the empty list () instead of nil when nothing is found and as described in the manual.
  • Fixed a crash bug when the colon operator has missing or wrong-type args on 64-bit compiles.
  • Other changes:
  • Documentarion changes.
  • Additions and changes to qa scripts.

New in newLISP 10.5.6 (Nov 23, 2013)

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

New in newLISP 10.5.5 (Nov 21, 2013)

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

New in newLISP 10.5.4 (Oct 3, 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)

  • This version fixes bugs and adds functions for KMEANS cluster analysis.

New in newLISP 10.5.2 (Jun 26, 2013)

  • This development release fixes bugs and introduces functions for kmeans cluster analysis.

New in newLISP 10.5.1 (Jun 5, 2013)

  • This version fixes division for unlimited precision integers.
  • Normal 64-bit arithmetic was not affected.

New in newLISP 10.5.0 (May 22, 2013)

  • This stable release introduces JSON processing, unlimited precision integer arithmetic, and many other small enhancements.

New in newLISP 10.4.8 (May 10, 2013)

  • This development release introduces unlimited precision integer arithmetic and other minor enhancements and bugfixes.

New in newLISP 10.4.7 (Mar 7, 2013)

  • This release has miscellaneous enhancements and bugfixes.

New in newLISP 10.4.6 (Feb 6, 2013)

  • Development version 10.4.6 adds built-in JSON processing and other minor enhancements and bugfixes.

New in newLISP 10.4.5 (Nov 22, 2012)

  • This version fixes bugs and has minor enhancements.

New in newLISP 10.4.4 (Sep 24, 2012)

  • updated the manual translated to Japanese, newlisp_manual-10404.

New in newLISP 10.4.3 (May 8, 2012)

  • This version fixes two critical bugs when working with files.

New in newLISP 10.4.2 (May 2, 2012)

  • This maintenance release fixes bugs and add a few new statistical functions.

New in newLISP 10.4.1 (Apr 4, 2012)

  • This version adds more math and statistic functions.

New in newLISP 10.4.0 (Feb 15, 2012)

  • This version has a rewritten message API for multiprocessing, has an extended FFI, and makes efficiency improvements.

New in newLISP 10.3.10 (Jan 11, 2012)

  • Development v10.3.10 has more improvements in the extended FFI, and greatly increased speed on read-line with file handles.

New in newLISP 10.3.9 (Dec 22, 2011)

  • This version adds a new data structuring function to the extended FFI interface.

New in newLISP 10.3.7 (Nov 26, 2011)

  • Expands the FFI (foreign functions import) API and fixes bugs.

New in newLISP 10.3.6 (Nov 21, 2011)

  • This version prepares for an extended FFI (foreign function interface) and fixes a bug in the reworked 'spawn' API.

New in newLISP 10.3.5 (Nov 9, 2011)

  • This version fixes bugs and adds more changes to the rewritten multiprocessing API.

New in newLISP 10.3.4 (Oct 6, 2011)

  • This release features a re-written, faster, and enhanced message API and bugfixes.

New in newLISP 10.3.3 (Sep 22, 2011)

  • This is a stable maintenance release with bugfixes and performance improvements.

New in newLISP 10.3.2 (Jul 21, 2011)

  • This stable maintenance version fixes bugs and makes efficiency improvements.

New in newLISP 10.3.1 (May 19, 2011)

  • This development release fixes bugs and makes efficiency improvements. This is a pre-release to a stable maintenance release later.

New in newLISP 10.3.0 (Feb 4, 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)

  • This development release adds divert sockets/ports to net-listen (Unix only) and adds other miscellaneous features and enhancements.

New in newLISP 10.2.17 (Nov 17, 2010)

  • This version adds support Visual Studio 2010, and changes the license from GPLv2 to the BSD.
  • Support for Xcode and Solaris was improved.
  • The usual fixes and improvements were made.

New in newLISP 10.2.16 (Oct 4, 2010)

  • New table widget and supporting functions in Guiserver.

New in newLISP 10.2.11 (Aug 3, 2010)

  • 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.10 (Jul 2, 2010)

  • This version fixes bugs and makes adjustments to the new IPv4/6 switching. This is a development release!

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.5 (May 3, 2010)

  • This development release has a new net-packet function (UNIX only), other enhancements for networking functions and bug fixes.

New in newLISP 10.2.1 (Mar 17, 2010)

  • The Chi2 values calculated by crit-chi2 were too low for odd numbers of degrees of freedom – the bayes-query function was not affected by this.
  • FOOP objects were not protected if held by a protected symbol.
  • get-int did not do proper sign-extension in the 64-bit version of newLISP.
  • get-url now also handles error code 302 for re-location using the location: header. In the past only codes 301 and 303 were handled for automatic re-requesting with changed URI.
  • new had a memory leak in certain applications of this function.
  • The nil? predicate evaluated twice.
  • The probabilities calculated by prob-chi2 were too low for odd numbers of degrees of freedom.
  • push on -1 (end of list) optimization was broken when copying namespaces with new.
  • When using push on uninitialized symbols, the element pushed was returned instead of the new list created.
  • The select function now throws an error message when overrunning indexes.
  • self now honours symbol protection, if the object passed is held by a protected symbol.
  • A fix for string stream writing in 64-bit newLISP.
  • A messagebox pops up if a connection cannot be established between the newLISP process and the Java GUI server on Win32.
  • xml-parse now parses correctly UTF-8 characters.

New in newLISP 10.2.0 (Mar 16, 2010)

  • Bug fixes:
  • The Chi2 values calculated by crit-chi2 where to low for odd numbers of degrees of freedom – the bayes-query function was not affected by this.
  • FOOP objects where not protected if held by a protected symbol.
  • get-int did not do proper sign-extension in the 64-bit version of newLISP.
  • get-url now also handles error code 302 for re-location using the location: header. In the past only codes 301 and 303 where handled for automatic re-requesting with changed URI.
  • new had a memory leak in certain applications of this function.
  • The nil? predicate evaluated twice.
  • The probabilities calculated by prob-chi2 where to low for odd numbers of degrees of freedom.
  • push on -1 (end of list) optimization was broken when copying namespaces with new.
  • When using push on uninitialized symbols, the element pushed was returned instead of the new list created.
  • The select function now throws an error message when overrunning indexes.
  • self now honours symbol protection, if the object passed is held by a protected symbol.
  • A fix for string stream writing in 64-bit newLISP.
  • A messagebox pops up if a connection cannot be established between the newLISP process and the Java GUI server on Win32.
  • xml-parse now parses correctly UTF-8 characters.
  • Changes and additions in external files:
  • Version 2.0 of GMP module file gmp.lsp fixes problems when using 64-bit newLISP.
  • The SMTP module file smtpx.lsp has been replaced with a new version 3.0 by Greg Slepak from http://taoeffect.com. The new version allows for a custom port and does UTF-8 safe encoding.
  • Cygwin is now supported again with makefile_cygwin and also recognized by the configure utility. The makefile_cygwin produces a newlisp.exe which can be placed into %NEWLISPDIR% together with cygwin1.dll from the Cygwin system. The environment variable NEWLISPDIR is set after after installing the Win32 version of newLISP and in most cases points to C:\Program files\newlisp or the equivalent in other language locales than English. The functions fork, spawn, sync, send and receive, which do not work in the normal Win32 version, work on Cygwin compiled newLISP, although slow.
  • Many thanks to Niek Albers from http://daansystems.com, for doing most of the work of making complilation work on Cygwin again.The doc/INSTALL text file has an additional chapter for customized install and for package creators.
  • The editor syntax highlighting files in the util subdirectory of the source distribution have been updated - nanorc, newlisp.jsf, newlisp.vim
  • The following standard module files needed to be updated to run on both 10.1 and 10.2 versions of newLISP - canvas.lsp, ftp.lsp, gimp.lsp, postgres.lsp, sqlite3.lsp, stat.lsp, zlib.lsp
  • The following utilities shipped with the source distribution and published on http://newlisp.org have been updated to run on both 10.1 and 10.2 versions of newLISP - newlispdoc, syntax.cgi, upload.cgi, xmlrpc.cgi

New in newLISP 10.1.10 (Jan 27, 2010)

  • new functions and bug fixes

New in newLISP 10.1.5 (Sep 15, 2009)

  • This maintenance release contains improvements and fixes for time related functions.

New in newLISP 10.1.4 (Aug 13, 2009)

  • the time offset in the now function was broken and has been fixed.

New in newLISP 10.1.0 (Jun 22, 2009)

  • Release 10.1 improves concurrency support for multi core CPUs with new messaging functions for parent and child processes launched with spawn. The new non-blocking API works without locks and semaphores and is safe against collisions. Besides constants, any expression with any size can be transferred with the new send and receive functions. Objects bigger then the OS's shared memory pagesize are transferred using files internally. The new message API is only available on Mac OS X, Linux and other UNIX.

New in newLISP 10.0.8 (Jun 11, 2009)

  • 'pack' now converts floats to integer when the format is integer but the argument is a floating point (double). It already converted integers to float when the format was float, but didn't handle the other direction.
  • (int "ff" 0 16), (int "+ff" 0 16) and (int "-ff" 0 16) now all work. In former versions a leading 0 or 0x was required.
  • An optional boolean flag in 'dotree' allows filtering hash symbols or symbols from 'bayes-train' starting with an underscore character in their name.
  • Small fixes for syntax highlighting in newlisp-edit.lsp.
  • newlisp-edit.lsp now can change fonts in both, the editor and monitor areas, depending on cursor position.
  • The syntax highlighter in syntax.cgi and newlispdoc now colors newLISPdoc tags too.

New in newLISP 10.0.7 (Jun 2, 2009)

  • 'net-lookup' now sets 'net-error' when lookup fails
  • Miscellanous cleanup in nl-sock.c
  • Two NaNs should compare nil, division by zero will throw a div-zero-error now only in integer division (/) with floats (div) it will return inf(inity).
  • New 'inf?' tests for inifinity: (inf? (div 1 0)) => true now (NaN? (div 0 0)) => true
  • Thanks to Nelson H.F.Beebe from math.utah.edu to point out the correct IEE-754 behavior for division by 0.0, and NaN? and inf? tests.
  • The build process now also accepts 'make check' additionally to 'make test' for GNU compatibility: 'make all check' and then 'sudo make install' makes tests and installs.
  • When installing using 'make install' or when installing from the UBUNTU Linux binary installer a newlisp-x.x.x (where x.x.x is the version number) and a i symbolic link is created for newlisp -> newlisp.x.x.x. This way older versions stay and are still accessible. The binary installers for Win32 and Mac OS X have not changed.
  • The newlispdoc utility now accepts custom tags, which can be made up by just prepending the custom name with a: @. The text after the custom tag will be translated as usual, e.g. it may contain @link tag etc.. Like in most other tags, text is limited to the same line.

New in newLISP 10.0.6 (May 21, 2009)

  • some HTTP net errors where not registered with 'net-error'
  • readline tab expanson formatting was broken in 10.0.5
  • fixed a bug in 'replace' remove mode when all list members are nil
  • lambda functions (not lambda-macro) now allow for large or infinite
  • running bodies without stack impact

New in newLISP 10.0.4 (Apr 21, 2009)

  • Improved precision and shorter source for 'prob-z' function
  • 'expand' and 'letex' now also expand a top-level symbol not in expr list or
  • quoted:
  • (set 'x 123 'y 456)
  • (expand 'x 'x) => 123 ; threw error before
  • (letex (x 'y) x) => 456 ; returned y before
  • (letex (x '(+ 3 4)) x) => 7 ; returned (+ 3 4) before
  • previously some of these caused an error in 'expand' and did no expansion
  • in 'letex'
  • Definition of 'legal?' for symbols was to strict

New in newLISP 10.0.1 (Feb 15, 2009)

  • New features include reference returns instead of copies for many built-in functions and a generalized method to modify lists, arrays, and strings in-place.
  • Functionality added during the 8.x and 9.x series of releases was also cleaned up and streamlined.