May 8th, 2012Additions 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.
May 2nd, 2012Additions 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.
April 4th, 2012Additions 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.
February 15th, 2012Additions 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.
January 11th, 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.
December 22nd, 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.
December 8th, 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.
November 26th, 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
November 21st, 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)
November 9th, 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.
October 6th, 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.
September 22nd, 2011Bug 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.
July 21st, 2011Additions:
· 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.
May 19th, 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'.
February 3rd, 2011Highlights:
· 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.
January 7th, 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.
November 17th, 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.
October 2nd, 2010· New table widget and supporting functions in Guiserver.
August 4th, 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.
May 20th, 2010Additions 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.
May 15th, 2010Additions 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.
May 7th, 2010Additions 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.
March 17th, 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)
· do
· (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
February 24th, 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.
February 10th, 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
January 27th, 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: ted@reactor-core.org.
· Makefile has been simplified and the install part extracted as: makefile_original_install, (used by configure).
January 13th, 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 >,=,
December 9th, 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.
October 21st, 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
September 16th, 2009· A maintenance release for all flavors. Feature additions are tagged with (v.10.1.5)
August 10th, 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.
July 24th, 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
June 22nd, 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.
June 11th, 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.
May 21st, 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
April 23rd, 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
March 26th, 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.