newLISP Changelog

What's new in newLISP 10.7.1

Feb 9, 2017
  • Additions and changes:
  • The now function on MS Windows, reports the type of daylight savings used in the GMT offset field.
  • The new history functions reports the call history of a function.
  • The maximum length of a symbol has been extended to 1022 characters from 255.
  • When creating symbols with a hash functor an error message will be thrown on symbol strings longer 1022 characters.
  • Bug fixes:
  • The GMT offset field in the now function would report the wrong value when not in daylight savings time. This bug was introduced in 10.7.0 and did not exist before.
  • On some platforms file positions went out of sync when using search, seek and read-line.
  • mat with a scalar second argument was broken on 64-bit versions when the scalar parameter was not a float.
  • fixed a problem in --, ++ when passing a nil argument which was not content of a symbol.

New in newLISP 10.7.0 (Jan 31, 2016)

  • Additions and changes:
  • The installation location prefix for OS X, Linux and other Unix like platforms has been changed from /usr to /usr/local for installation in the /usr/local/ directory. See also the file makefile-original-install in the main source directory.
  • On Mac OS X, when starting guiserver.jar first, when it is not loaded by another newLISP program, guiserver.jar expects the newlisp executable in /usr/local/bin/newlisp. On other UNIX the newlisp executable must be in the executable path of the operating system.
  • On MS Windows, newLISP can now be compiled as a 64-bit executable. Thanks to Shigeru Kobayashi for doing most of this work.
  • dolist now also accepts arrays.
  • The net-eval function now returns the evaluation of the last expression 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". In previous version 1.62 "Win32" was reported.
  • The net-eval connection timeout has 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. Previously true was returned.
  • A new trace syntax (trace int-device) writes all expression entries and exit results to the device given. int-device can be the handle of an open'ed file or 1 for stdout.
  • The stack trace in error messages now prints the entire expression passed for evaluation, not only the function name.
  • The tmp directory is now defined during newLISP startup. For UNIX this is /tmp, for Windows it is taken from the TMP environment variable or assumed as /tmp when TMP is not defined. 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.
  • In get/put/post-url the new string option "raw" inhibits 'Location' redirection. "raw" parameter can also be combined with the "list" and "debug" options, e.g. "raw debug".
  • In get/put/post-url list mode the second string in the returned list contains only the returned content. The third list member is the server HTTP response line. The fourth list member contains the status-code, which is 0 for an invalid HTTP response.
  • The save function now saves symbols with strings longer than 2027 characters appending multiple partial lines delimited by quotes "...". This way lines can contain escape characters which are not allowed when using [text]...[/text] tags as delimiters.
  • When using a new second seed syntax, all randomizing functions are based on a random generator independent of platforms and compilers used to built newLISP. When seeding using the second syntax all random functions called subsequenly like amb, normal, rand, random and randomize are based on this platform independent random generator. After initializing with the new seed syntax a subsequent call to seed without parameters returns the current seed state of the random generator, which can be used at a later time to seed the generator for the same state in a sequence.
  • A new ssq function returns the Sum of SQquares (SSQ) for a list or array vector.
  • Bug fixes:
  • date-list crashed for negative values on some MS 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 then 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 numbers also in 32-bit versions of newLISP.
  • Response string from get- put- post-url was not zero-terminated for HTTP error returns.
  • date-value did not evaluate month, day parameters.
  • PCRE options PCRE_NOTBOL, PCRE_NOTEOL and PCRE_NOTEMPTY did not work.
  • Loading an empty file now returns nil instead of throwing an error.
  • guiserver.jar version 1.66 now correctly forces updates of a gs:canvas in a gs:scroll-pane.

New in newLISP 10.6.5 (Jan 22, 2016)

  • A second PRNG with variable initial N for seed initialization via (seed S true N) and inquiry of current seed state via (seed). This PRNG is built-in with same results across all platforms and compilers. The current PRNG will stay as it offers a bigger set of random numbers on Unix platforms. This new PRNG is necessary for doing computer simulations and AI art, which is reproducable across platforms and where random number sequences can be broken up in repeatable layers using the (seed) instruction to save state. When using the default libc based PRNG (seed) now returns the last seed set by the programmer. On the new PRNG (seed) returns the last seed state. - Not yet documented, may replace old PRNG in the future.
  • A (ssq vector) sum of squares function has been added. The vector can be either a list or array vector.
  • guiserver.jar version 1.65 now correctly forces updates of a gs:canvas in a gs:scroll-pane.
  • When a deleted symbol was prefix in a dynamic symbol, memory got corrupted. The dynamic symbol reference is now replaced with nil like other symbol references.
  • A illegal symbol when trying to create a context could crash the system,
  • when referenced again after the error message.

New in newLISP 10.6.4 Dev (Nov 10, 2015)

  • Additions and changes:
  • The installation location prefix for OS X, Linux and other Unix like platforms has been changed from /usr to /ust/local for installation in the /ust/local/ directory. See also the file makefile-original-install.
  • Only on Mac OS X when starting guiserver.jar first, when it is not loaded by another newLISP program, guiserver.jar expects the newlisp executable in /usr/local/bin/newlisp.
  • In get/put/post-url the new string option "raw" inhibits 'Location' redirection. "raw" can also be combined with the "list" and "debug" options.
  • In get/put/post-url list mode the second string in the list contains only the returned content. The third list member is the server HTTP response line. The fourth list member contains the status-code, which is 0 for an invalid HTTP response.
  • The save function now saves symbols with strings longer than 2027 characters appending multiple partial lines delimited by quotes "...". This way lines can contain escape characters which are not allowed when using [text]...[/text] tags as delimiters..
  • Bug fixes:
  • Response string from 'get/put/post-url' was not zero-terminated for HTTP error returns.
  • date-value did not evaluate month, day parameters.
  • PCRE options PCRE_NOTBOL, PCRE_NOTEOL and PCRE_NOTEMPTY did not work.
  • Loading an empty file now returns nil instead of throwing an error.

New in newLISP 10.6.3 (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.

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.
  • Compatibility with previous versions:
  • Except for null translation in json-parse, this version is compatible with the previous version 10.6.0.

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 (Apr 9, 2014)

  • Additions and changes:
  • In json-parse the last element in JSON arrays may now 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 is available.
  • The macro function is now a built-in native primitive. The module macro.lsp, which implemented macro using reader-event, is now obsolete. The new native macro works like the old, but does not increase the load or reading time of source.
  • 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.
  • A fix for directory? and file? when applied to root directories on Windows.
  • Other changes:
  • Documentarion changes.
  • Additions and changes to qa scripts.

New in newLISP 10.5.8 Dev (Mar 14, 2014)

  • Additions and changes:
  • In json-parse the last element in JSON arrays may now 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.
  • 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.
  • 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.
  • 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.
  • he macro function is now a built-in native primitive.
  • 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.
  • 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.

New in newLISP 10.5.7 Dev (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.
  • 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.
  • 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.
  • 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 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. 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. '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)

  • Additions:
  • In json-parse the last element in JSON arrays may have a trailing comma.
  • In arithmetik 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 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
  • reset now also cancels command line paremeter processing.
  • map, apply, stats, corr and t-test now can be used on arrays.
  • Bug fixes:
  • The big integer version of the -- 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.
  • Other changes:
  • Documentarion changes.
  • Additions and changes to qa scripts.

New in newLISP 10.5.4 (Oct 2, 2013)

  • Additions:
  • A call pattern for the one sample t-test has been added to compare the sample mean to a number given as a parameter.
  • The Welch variant of the t-test has been added to be used when variances in the two data samples differ significantly. The new call pattern allows an automatic switch between the normal and Welch method of Student's t when specifying a critical probability value for the null hypothesis of variances being equal.
  • Bug fixes:
  • A fix for last list-element optimization in pop and pop-assoc when popping and then inserting a last element in nested lists.
  • Accessing a deleted context will never hang but give an error message.
  • Other changes:
  • The build process for OSX newLISP binary installers has been simplified.

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 26, 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.
  • Fixed handling escaped " (quote) in JSON strings.

New in newLISP 10.5.1 Dev (Jun 4, 2013)

  • 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.
  • 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

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).
  • On LINUX and BSD, when compiled with GNU libreadline support, a matching parenthesis will blink on the simple or multiple newLISP command line (REPL). For this, the line: set blink-matching-paren on should be put into the Bash .inputrc configuration file.
  • 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".
  • The OSX Intel binary distribution is now 64-bit by default.
  • 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 13, 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 [])
  • 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 7, 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 8, 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.
  • On LINUX and BSD, when compiled with GNU libreadline support, a matching parenthesis will blink on the simple or multiple newLISP command line (REPL). For this, the line: set blink-matching-paren on should be put into the Bash .inputrc configuration file.
  • 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.4 (Sep 15, 2012)

  • Changes and additions:
  • read-file, write-file, append-file and delete-file when used with http:// URLs will now return nil under error conditions instead of throwing an error. This is consistent with error behavior on local files. When nil is returned, net-error gives more error information. For remote server-side errors on URLs the server HTTP error page is returned.
  • Functions which are UTF8 sensitive on the UTF8 enabled versions of newLISP now check for the validity of the UTF8 string arguments passed. The error message: invalid UTF8 string is issued for invalid UTF8 strings.
  • Binary number format can be used with either 0b or 0B as prefix for up to 64 following 1's and 0's, e.g. 0b101010 for the number 42.
  • base64-enc can use an additional true flag to force translation of an empty string into "" instead of "====" base64 padding characters.
  • Starting with Mac OSX Mountain Lion 10.8 the clang C-compiler can also be used instead of gcc to compile newLISP.
  • Bug fixes:
  • A correct error message will now be shown when the closing [/text] tag is missing when loading a source file.
  • The widget gs:text-field in Guiserver - guiserver.jar - now handles empty strings correctly when gs:get-text is used.
  • Functions initiated via callback could cause a result stack overflow.

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.
  • Compatibility with previous versions:
  • Except for bug fixes and behavior of char* argument types in the extended import ffi interface, this version is fully compatible with previous versions.

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.
  • Compatibility with previous versions:
  • Except for bug fixes and behavior of char* argument types in the extended import ffi interface, this version is fully compatible with previous versions.

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.
  • Compatibility with previous versions:
  • Apart from the day-of-yeari value in date-list, this version is fully compatible with previous versions.

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.
  • Compatibility with previous versions:
  • Previous versions using spawn together with message functions send and receive should now include the true flag in spawn calls to enable communications channel between parent and child processes. spawn should specify the optional true flag to enable send and receive messaging with spawned child processes. The GMT offset and day-of-the-year values are reported differently. In all other areas, this version if fully compatible with the previous stable release version 10.3.3.

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:
  • 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.
  • On Mac OSX 64-bits extended callback (ffi closure) does now work.
  • SHA256 crypto algorithm has been added to the module crypto.lsp. Thanks to Marc Hildman for this contribution.

New in newLISP 10.3.8 Dev (Dec 8, 2011)

  • Make sure FFIMPORT struct memory gets freed when doing multiple 'import' of the same function or deleting the func symbol.
  • When using 'configure' and 'make' FFI will be chosen by default on Mac OSX, Linux and Windows (MinGW)
  • Both "char*" and "void*" accept either a newLISP string buffer or an address number as input. On return "char*" will return a newLISP string buffer and "void*" will return an address number.
  • Comprehensive qa-specific-tests/qa-ffitest compiles util/ffitest.c on the current platform then tests all data types.
  • Now ffi checks for nummber of arguments matching call pattern.
  • The opengl-demo-ffi.lsp now runs on both 32-bit and 64-bit newLISP and libraries. On Windows glut32.dll is required. On Mac OSX everything is installed by default.
  • ffi callback (ffi closure) working now on Mac OS X, Win32 and UBUNTU Linux with standard installed libraries. Only for compiling/linking libfffi-dev is necessary on UBUNTU linux.
  • The extended 'callback' API will not work on 64-bit Mac OSX newLISP, but there is no problem to mix extended 'import' and simple 'callback' API (see examples/opengl-demo.lsp)
  • Bit 11 for 0x400 in the last field of 'sys-info' is set for extended ffi enabled versions requiring ffilib. (not (zero? (& 0x400 (sys-info -1)))) => true for FFI support
  • Avoid passing on list or string references in primitives taking strings or lists but creating new objects. This caused an error when doing (inc (char str)) when str is protected. symbolCheck = NULL only neccessary if not set to NULL by previous evaluateExprtession() to non-string/list. Fixed on selected primitives.
  • qa-ffi and qa-libffi are now part of 'make testall'. They will not be executed on versions not compiled for libffi based FFI.

New in newLISP 10.3.7 Dev (Nov 26, 2011)

  • Fix in printing FFI primitives (FFI is disabled by default)
  • Updated newlispdoc now all tags (including custom) are title-case'ed
  • Simple ffi calls working on Mac OSX, UBUNTU Linux (Intel) and Win32three New makefiles:
  • makefile_darwin_utf8_ffi # std OSX install has libs and headers
  • makefile_linux_utf8_ffi # must install package libffi-dev
  • makefile_mingw_ffi # must install libffi.a library
  • New qa-specific-tests/qa-ffi for ffi API testing
  • The new ffi extension work with the existing 'import' functon: (import "libc.dylib" "atof" "double" "char*") (atof "123.456") => 123.456
  • No "cdecl" or "stdcall" mustbe specified. The parameter afterthe function name is the return type. The remaining parametersare the function arguments.
  • As before, the imported function can be renamed: (set 'strtof (import "libc.dylib" "atof" "double" "char*")) (strtof "123.456") => 123.456
  • The followong types are implemented for LP64, LLP64 and ILP32
  • , "byte", "char", "short int", "unsigned short int", "unsigned int", "int", "long long", "float", "double", "char*", "void*"
  • For pointer return values "char*" and "void*", the address is returned as a number. Use 'get-string' or 'unpack' to

New in newLISP 10.3.6 Dev (Nov 21, 2011)

  • Speedup of string stream conversion for 'format', 'string'.
  • A bug fix in 'spawn' when aborting child processes
  • Preparations for expanded FFI (grep for FFI in all files)

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.4 Dev (Oct 6, 2011)

  • Reworked 'send'/'receive' message API is multiple times faster and has more consistent performance on different platforms. Better on BSDs than on Linux. The channel for each child is now a dual read/write message queue. In previous version only one message could be written to the queue with send, now mutiple message can be send on the same channel and retrieved on the receiving side with multiple 'receive' until returning 'nil'.
  • In the new syntax of 'receive' the parameter is optional: (receive ) ; returns the message or nil (receive ) ; returns true or nil
  • Both 'send' and 'receive' now have syntax to return a list of all ready child channels using either (send) to get a list of child pid's ready to receive data or (receive) to get a list od child pid's ready to be read. This greatly speeds up asyncrounous messaging, where multiple child processes, but not all, have sent messages.
  • Now using only a ready subset, 'receive' can be used non-blocking and only a subset of all child pids is iterated through: (dolist (p (receive)) (receive p msg))
  • Now, when a 'spawn'ed child process ends abormally the variable in the spawn command will contain an error message and a result number, e.g. '9' from a kill signal sent by an external process.
  • Fixed longstanding bug for list-mode 'net-select'. Now returns socket numbers in the ready list not 0's.
  • Documentation for the messaging API has been updated in the reference manual and code patterns documents.

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.
  • Compatibility:
  • This version if fully compatible with the previous version.

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 (thanks Ted Walther).
  • 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 Dev (May 19, 2011)

  • Documentation changes
  • When a list reference changes while being indexed an error is thrown. Code written this way will normally not make sense, but now fails more gracefully.
  • (set 'lst '(1 2 3 4 5)) (lst (set 'lst '(1 2 3))) ---> ERR: list reference changed
  • MBCS coded characters in pathnames in the Windows UTF-8 version.
  • Better worded error message when wrong parameter type in implicit indexing of strings and lists.
  • Fixed a buffer overflow for interactive multiline mode for long input lines.
  • Fix for 'filter', 'index', 'clean', 'exist' and 'for-all' when handling empty list elements (). Also, these functions are now several times faster.
  • Check for missing parameter in inc, dec, ++, --. Using these without any parameter messed up the value of 'nil'.
  • Fixed crash bug with boolean 'true' parameter in 'dotree'
  • Minimum SDK changed to 10.5 Leopard for makefiles: makefile_darwin_utf8_leopardPPC makefile_darwin_utf8_leopardIntel to make a universal Tiger 10.4 based version the file: makefile_darwin_universal_utf8_compat still exists (for questions about this -> Greg Slepak).
  • bug fix for 'timer' when using recursively and not using symbols but lambda expressions, e.g.: (timer foo 1) instead of (timer 'foo 1) when the (timer ...) statement is part of foo.
  • New version 0.3 of json.lsp module now processes backslashed characters as of JSON spec (thanks Ted Walther).
  • Speedup and memory lossless error recovery in 'map'.
  • Better memory management in error recovery of evaluateStream() and sysEvalString()
  • Did not clear EOF error in 'read-line'.

New in newLISP 10.3.0 (Feb 3, 2011)

  • Highlights:
  • This release starts the transition to the IPv6 – Internet Protocol version 6 – based Internet with a new function to switch between the old IPv4 and the new IPv6 protocol during runtime.
  • A better interactive command-line mode (REPL) when running in an OS termnal or shell window allows multiline entry of newLISP expressions (not available in the monitor window of the newLISP-GS Java IDE).
  • New Functions and Features:
  • ! now has an optional process-creation parameter on MS Windows. Using this parameter also suppresses creation of console windows.
  • exec now allows binary zeros in the data piped in via a second parameter.
  • New date-list returns list of year, month, day, hours, minutes, seconds and day of the year, day of the week from time value in seconds since January 1st, 1970. The new function is the inverse of date-value.
  • 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 list or string.
  • net-listen now can create divert sockets to divert traffic to a divert port on BSD OS platforms. Port diversion can be used to capture and process raw network packets.
  • The mod function assumes its second parameter as 1 if missing.
  • New net-ipv switches betweeen IPv4 and IPv6 internet protocols during runtime. Prior versions had to be compiled for either IPv4 or IPv6. As of today IPv6 is not widely deployed, but will gain importance during the coming years. A command line switch -6 has been added to start up newLISP in IPv6 mode.
  • New multiline mode on the commandline, without using the [cmd] and [/cmd] tags: just hitting the enter-key on an empty line gets into and out of multiline mode. The [cmd] and [/cmd] tags still work too and are needed internally when newLISP is working in server mode, for some programming environments interfacing with newLISP 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. Multiline entry mode does not work in the Java based console of newLISP-GS. A chapter explaining more details of the interactive Lisp mode in newLISP has been added to the Users Manual.
  • newLISP HTTP server now registers the CONTENT_TYPE and CONTENT_LENGTH environment variables when present in the header received. Server mode now also handles binary content from POST requests. previously only PUT requests could handle binary data.
  • Other changes and additions:
  • Previous to version 10.3.0 the list of probability values returned by bayes-query and when using Fisher Chi² mode was normalized by dividing each value by the sum of the whole list. This normalization has been dropped.
  • The week-day value in the returned list of now – also present in the new date-list function – has been changed to conform to the ISO-8601 international standard for time and date related data. Week days from Monday thru Sunday now number 1 to 7.
  • On 64-bit compiled versions date- functions will work for dates beyond January 2038 and up to January 2100.
  • The parse-date function has been renamed to date-parse for better consistency of naming in the date functions API with functions date-list and date-value. The old spelling will still work but is not documented anymore.
  • The return value for ref has changed from () to nil, when nothing is found.
  • The signal options for ignore, default and reset have been changed from nil, true and (quote nil) to the option strings "ignore", "default" and "reset".
  • The maximum length for the interactive command-line and lines in HTTP request headers has been increased to 511 charcters, up from 254.
  • The default connection timeout for networks functions now is set to 10 secs, up from 3 secs. This always can be overwritten by timeout parameters in net-connect and HTTP web functions which take timeout parameters.
  • win32demo.lsp shows how to interface with Win32 GUI libraries. the file is available in the examples directory of the newLISP source distribution. Thanks to Cyril Slobin for providing this example.
  • The port scan and packet sniff demos have been added in the examples directory of the newLISP source distribution.
  • A table widget gs:table and supporting functions has been added to the Java based newLISP-GS guiserver. See the new demo file table-demo.lsp for details.
  • The gs:text-field widget in the newLISP-GS guiserver can now be configured as a password entry widget. The file textfield-demo.lsp has been added to the demo files accessible from the newLISP-GS IDE.
  • syntax.cgi now emits a bigger font for iPad and iPhone.
  • All HTML files shipped in the doc directory of the source distribution are now UTF-8, XHTML 1.0 compliant.
  • Bug fixes:
  • Support for UTF-8 is improved in the newLISP-GS, Java GUI server. Japanese language characters from Windows Code Page MS932 are now displayed correctly in all circumstances. For UTF-8 support, the UTF-8 version of the newlisp.exe executable must be installed. It is available in www.newlisp.org/downloads/UTF-8_win32/ directory.
  • copy and map passed on a wrong protection status under some circumstances.
  • title-case did not handle the boolean flag correctly on non-utf8 versions.
  • Various fixes for the IPv6 internet protocol mode.
  • configure-alt, the alternate build configuration utility, did not handle UTF-8 support correctly. This did not affect the standard configure script in newLISP which always worked correctly.
  • Compatibility with previous stable release 10.2.8:
  • Probability results returned by bayes-query when using the Fisher Chi² method are not normalized any longer.
  • The now function changes the numbering for the week-day field. Monday thru Sunday now number 1 to 7.
  • Special options for the signal function are written differently.

New in newLISP 10.2.18 Dev (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. BSD 'ipfw' or Linux 'ipchains' rules must be defined in the configuration of the FreeBSD, OpenBSD or Linux platform for the divert-port and the ports to be diverted. 'net-receive-from' will contain the local interface address for incoming packets and will contain 0.0.0.0 for outgoing packets. See the man page for divert. The same address received by 'net-receive-from' is used in the 'net-send-to' call when re-injecting the packet:
  • (set 'divertSocket (net-listen divertPort "" "divert"))
  • (until (net-error) (set 'rlist (net-receive-from divertSocket maxBytes)) (set 'buffer (rlist 1)) ; buffer can be processed here before reinjecting (net-send-to (rlist 0) divertPort buffer divertSocket) )
  • 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 Dev (Nov 17, 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 Dev (Oct 2, 2010)

  • New table widget and supporting functions in Guiserver.

New in newLISP 10.2.11 Dev (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 Dev (May 15, 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.6 Dev (May 7, 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.

New in newLISP 10.2.1 (Mar 17, 2010)

  • New ++ and -- increment and decrement in integer mode.
  • To make new code using ++ work with older versions of newLISP, put the following statement at the beginning of the file:
  • (when (< (sys-info -2) 10110)
  • (constant (global '++) inc)
  • (constant (global '-- ) dec))
  • The functions dec and inc now always work in floating point mode, regardless of the number of parameters. This could create problems with code interfacing to C library functions. In case integers have to be passed dec and inc should be converted to ++ and --.
  • The function crit-chi2 took (1.0 - alpha) probabilities to calculate the critical Chi2. Now alpha should be passed as probability parameter.
  • A nil parameter in the delete functions enables much faster namespace deletion without reference checking. This mode should only be used when no references external to the namespace exist to symbols inside that namespace. This is normally true for hash namespaces and object systems which strictly limit direct access to namespace variables. Deleting symbols or namespaces whose symbols are referenced externally will crash the system.
  • define-macro's (fexpr's) are now included in error reporting. Before they would be reported as part of a define function which called it.
  • In det and invert a new optional parameter controls how zero pivot elements are handled in the LU decomposition algorithm . When the optional Boolean parameter is not specified, the functions return nil on singular matrices. The optional parameter specifies 0.0 (zero) or a very small number to continue calculation, as required for some algorithms dealing with singular matrices.
  • An additional and optional list-index in now can pick an element of the result list.
  • A new extend function allows destructive appends to lists or strings. Usage of write or write-bufer and write-line for string extension is discouraged. To make newer code using extend run on older version of newLISP, insert the following statement at the beginning of the program file:
  • make new code working on older versions of newLISP
  • (when (< (sys-info -2) 10110)
  • (constant (global 'extend) write-buffer))
  • In the find function the regex option can now be specified as nil to do an offset-based search without regular expressions.
  • The name function has been deprecated; use term instead to extract the symbol name without the context prefix. The boolean flag option, which was present in name, is not present in term, use prefix to extract the prefix context from a symbol. The new term causes much less name clashes with user variables than name did. To make new code using term work with oder versions of newLISP, put the following statement at the beginning of the file:
  • make new code working on older versions of newLISP
  • (when (< (sys-info -2) 10111)
  • The pretty-print function can take an additional parameter to specify the default format string for printing floating point numbers. This is useful when printing unformatted floating point numbers without fractional parts, and these numbers should still be recognizable as floating point numbers.
  • The deprecated use of $0 in ref, ref-all, set-ref and set-ref-all has been removed. In set-ref and set-ref-all, use only the anaphoric system variable $it to refer to the old contents. ref and ref-all can take a true option to return actual elements (formerly returned in $0) instead of index vectors. The usage of the system variables $0 through $9 is reserved for the case where regular expression matching is involved (with few exceptions).
  • read and write may be used as shorter writings of the elementary I/O functions read-buffer and write-buffer.
  • In starts-with and ends-with nil is not allowed anymore as option for case insensivity. Use the regex option 1 instead:
  • instead of
  • (starts-with foo bar nil)
  • (starts-with foo bar 1)
  • This change will be compatible with previous versions of newLISP. But older code will throw an error exception if specifying nil instead of option 1 for case insensitivity.
  • The enviroment variable REQUEST_METHOD is now set by newLISP server mode to one of the strings GET, HEAD, PUT, POST, DELETE

New in newLISP 10.1.12 (Feb 24, 2010)

  • Symbol protection for containers of mutable FOOP objects
  • Functions 'crit-chi2' and 'prob-chi2' produced value too low on odd degrees of freedom. 'bayes-query' in Chi2 mode was not affected.
  • moved most qa-xxx files into qa-specific, only qa-do and qa-comma stay in main source directory. The commands 'make test' alias 'make test' work like before, but now taking qa-xxx files from qa-specific. A new 'make testall' can be used to test with allmost all qa-xxx files. To reduce output do: make test | grep '>>>>>'
  • Rework of setf for in-place changes:
  • 'caller' introduced in previous development version 10.1.11 has been eliminated.
  • 'define-macro's (fexpr's) are now included in error reporting: define (foo) (bar)) (define-macro (bar) (+ a s f)) (foo) => ; in older verssion 'bar' doesn't show ERR: value expected in function + : a called from user defined function foo
  • ; now 'bar' is reported ERR: value expected in function + : a called from user defined function bar called from user defined function foo
  • In newLISP-GS on Win32 a messagebox pops up if a connection cannot be established between the newLISP process ad Java GUI server.

New in newLISP 10.1.11 (Feb 10, 2010)

  • Various documentation fixes and changes.
  • Additional, optional list-index parameter in 'now' makes it return a list member instead of the whole list: (now 0 0) => 2010 ; year (now 0 -2) => 300 ; offset west of GMT (in EST)
  • A string slice offset out of bounds now throws error as in lists.
  • 'pretty-print' can additionally define the default print format for floating point numbers.
  • New 'prefix' returns the context of a symbol.
  • New 'term' replaces deprecated 'name'.
  • New 'caller' returns the symbol of the caller function.
  • 'read' and 'write' may be used as shorter writings of the elementary 'read-buffer' and 'write-buffer' I/O functions.
  • Addtional chapter in doc/INSTALL for package creators and installation customization.
  • Updated syntax highlighing for nano, joe, and vim editors.
  • Added back cleaning into 'make dist'.
  • Re-added Cygwin flavor with 'make -f makefile_cygwin'. The make file gets also chosen by 'configure' and makes a newlisp.exe, but has to be installed manually together with cygwin1.dll in %NEWLISPDIR%; on Win32 normally defined as C:\Program Files\newlisp

New in newLISP 10.1.10 Dev (Jan 27, 2010)

  • New 'extend' works like 'append' but modifies first list or string parameter.
  • New ++ and -- increment/decrement in integer mode.
  • Functions 'inc/dec' now always work in floating point mode.
  • In 'find' the regex option can be specified as nil when offset is present, this way 'find' with offset does not have to be a regex search.
  • In 'starts-with/ends-with' nil is not allowed as a parameter for case insensitivity anymore use the regex option 1 instead (nil always did regex anyway).
  • Changed configure-alt now allows defintion of different install and exe prefixes. For questions and support for configure-alt, please contact Ted Walther: [email protected].
  • Makefile has been simplified and the install part extracted as: makefile_original_install, (used by configure).

New in newLISP 10.1.9 Dev (Jan 13, 2010)

  • Fixed executeCommandLine() for 64-bit UBUNTU, which could cause writeStreamStr()related functions to crash.
  • (delete nil) will delete symbols without checking any references. The symbol can be a context symbol. Note that this mode of 'delete' can crash the system if if symbols are referenced from anywhere else.
  • Fixed double evaluation in nil? predicate
  • Fixed a bug in 'legal?'.
  • Better error reporting for url based file operations.
  • A sign-extension fix for 'get-int' under 64-bit
  • Fix in gmp.lsp for 64-bit >,=,

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:
  • 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.

New in newLISP 10.1.6 (Oct 21, 2009)

  • Fixes for 'net-error' and 'sys-error' when supplying out-of range numberso 0s.
  • Documentation fixes in the 'Users Manual and Reference'.
  • 'inf' is now signed in floating point opertions: (div -1 0) => -inf 'mod' will return NaN for a 0 divisor, % will still throw an exceptionwhen divisor is 0.
  • Fixed a memory bug in 'starts-/ends-with' when using regular expressions.
  • 'nil' and 'true' symbols where not always taken as boolean value whichaffected 'sort' and 'difference'.
  • New 'reader-event' triggers when an expression was read. The functionspecified in 'reader-event' can translate the expression beforeevaluation returning a modified version of the input. This can be usedto create a reader macro facility.
  • New module file macro.lsp implements reader/rewrite macros by meansof the new 'reader-event' function.
  • Change in sqlite3.lsp in bind-parameter, how text and blobs are retrieved.
  • deprecate usage of $0 in set-ref and set-ref-all .
  • throw error when trying to do a replace on a system symbol
  • some cleanup of itSymbol

New in newLISP 10.1.5 (Sep 16, 2009)

  • A maintenance release for all flavors. Feature additions are tagged with (v.10.1.5)

New in newLISP 10.1.3 (Aug 10, 2009)

  • 'inf?' and 'NaN?' where not working correctly on Win32, a new qa-floatcan be used to check several aspects of IEE 754 Floating point complianceregarding inifinitive and NaN (not a number) floating point values.
  • In 'now' the last 2 fields "minutes west of UCT" and "daylight savings" are now working correctly on Linux, Mac OS X, SunOS, BSDs and Win32.Daylight savings on Win32 as minutes on all others as 0 to 6 flag dependingon geographical area. On AIX, OS2 and TRU64 0 is returned for both fields.
  • The 'time' function now returns float milliseconds with fractional partinstead integer milliseconds.
  • The return string size from 'command-event' is now unlimited, before254 length was maximum.
  • New -t commandline option, specifies timeout inmicrsoseconds after connection when in demon mode. This avoids an un-responsive server when a client connects, but doesn't do anything else.
  • New makefile_darwin_utf8_llvm on OSX for building newLISP using the LLVMcompiler. Improves performance by about 10%, needs developer tools installed.
  • New versions of syntax.cgi and newlispdoc correct highlighting for & and ^.
  • New version of nls (combined newLISP and BASH shell) adapted to the manualformatting introduced in 10.1.1.
  • Long overdue removal of internal cell mark/sweep routines.
  • Net sessions list now avoids socket doubles in server mode.

New in newLISP 10.1.1 (Jul 24, 2009)

  • find for strings can take an additional offset option
  • net-eval can take either an expression or a string for remote evaluation
  • regex can take an additional offset option
  • Any datatype can now be specified as a start expression in series
  • eval-string did not restore correct eror handling when an error procedure was specified in the parameters
  • swap now throws and error when the second parameter is mising

New in newLISP 10.1.0 (Jun 22, 2009)

  • dotree can filter hash symbols starting with an underscore character as used in hashes and bayes-train when using an optional true flag.
  • expand when used with an association list as second parameter can now take an optional third boolean parameter to indicate evaluation of the value part in associations:
  • (expand '(a b) '((a (+ 1 2)) (b (+ 3 4))) true) → (3 7)
  • expand and letex now also expand symbols on the top level of an expression or letex body:
  • (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
  • Eliminated stack-size dependence in functions find and map.
  • A new inf? predicate tests if a number is infinite:
  • (inf? (div 1 0)) → true
  • Before, a floating point division by zero would throw a "divsion by zero" error.
  • lambda - functions now can be of unlimited length in their body without affecting the runtime result-stack. Before the number of statements in a lambda was limited to 2 to 4 thousand.
  • New last-error replaces eliminated error-number and error-text and returns number and text in a list consistent with the behavior of net-error and sys-error. All three functions now behave the same way and can enumerate all errors when given the error number as parameter.
  • The prob-z function is now implemented using the error function errf and gives results with a higher precision.
  • The receive function receives a messge from a parent or child process launched with spawn.
  • The send functions sends a message to a parent or child process launched with spawn.
  • The share function now can share any lisp expression and size. On older versions only boolean, number and strings constants were supported.
  • The function swap now can swap the contents of two places in lists, arrays or variables specifying locations in the same form as done by the functions setf or setq and inc or dec. The old syntax of swap using three parameters has been eliminated. The new syntax also allows swapping places from two different data objects. In the old form this was only possible when swapping the contents of two variables. Now two elements from two different lists or arrays can be swapped too:
  • swap places in one list
  • (set 'lst '(a b c d e f))
  • (swap (first lst) (last lst)) → a
  • lst → (f b c d e a)
  • swap places in two lists
  • (set 'lst-b '(x y z))
  • (swap (lst 0) (lst-b -1)) → f
  • lst → (z b c d e a)
  • lst-b → (x y f)
  • (set 'lst '((a 1 2 3) (b 10 20 30)))
  • (swap (lookup 'a lst -1) (lookup 'b lst 1))
  • lst → ((a 1 2 10) (b 3 20 30))
  • The function sys-info now also returns the process id (pid) of the parent process which launched the current process using fork or spawn. The pid is 0 (zero) if newLISP was launched not from fork or spawn. The pid can be found at position -4. It is recommended to access the last four members with negative offsets, to be compatible with older versions of newLISP.
  • The function write-buffer now behaves like write-line. When no parameters are given the contents of (current-line) line is written to stdout. Whithout the second parameter the contents of (current-line) is written to either the string buffer or file handle sepcified in the first parameter.

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.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 23, 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:
  • 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.3 (Mar 26, 2009)

  • Expanded 3rd syntax in 'swap' (swap ) The first two old call patterns are deprecated and will be removed in a future version.
  • Eliminated a stacksize dependence when using 'find' with 'match'
  • IBM AIX for PPC has been added as a platform and using the IBM xlc_r or gcc compiler. Some issues with newLISP server mode are not resolved yet.
  • Fixed a memory mapping problem surfacing on IBM AIX 32-bit compiles
  • Better handling of status in HTTP headers sent back from server
  • 'nil' and 'true' confused 'sort' and 'unique', fixed.