For details of these, see the documentation in the LispWorks User Guide and Reference Manual , unless a manual is referenced explicitly.
Support for remote debugging has been added, which allows you to debug a LispWorks process that is running on one machine using a LispWorks IDE that is running on another machine. It is intended to make it easier to debug applications running on machines that do not have the LispWorks IDE, mainly mobile device applications on iOS and Android, but also applications running on servers where you cannot run the LispWorks IDE.
The Asynchronous I/O API has been extended to support connections using SSL. The existing functions comm:create-async-io-state-and-connected-tcp-socket
and comm:accept-tcp-connections-creating-async-io-states
now have keyword arguments such as :ssl-ctx
and new functions comm:async-io-state-attach-ssl
and comm:async-io-state-detach-ssl
have been added.
New functions comm:async-io-state-ssl-side
, comm:async-io-state-ssl
and comm:async-io-state-ctx
allow access to details of the SSL objects from an comm:async-io-state
object.
LispWorks 7.1 supports OpenSSL 1.1 as well as older versions of OpenSSL.
Previous versions of LispWorks will not work with OpenSSL 1.1 because the API has changed.
Note: On Windows, you will need to call comm:set-ssl-library-path
to set the path when using OpenSSL 1.1. See "How LispWorks locates the OpenSSL libraries" in the
LispWorks User Guide and Reference Manual
.
A new keyword argument :tlsext-host-name
has been added to various functions in the socket stream API such as comm:open-tcp-stream
, to allow the SNI extension to be set when making an SSL connection.
Functions that create SSL connections (for example comm:open-tcp-stream
) can now control when to perform the SSL handshake and how long to wait for it using the new keyword argument :handshake-timeout
. See "Keyword arguments for use with SSL" in the
LispWorks User Guide and Reference Manual
.
In addition, the new functions comm:socket-stream-handshake
and comm:async-io-state-handshake
perform a SSL handshake.
The new macro hcl:define-declaration
defines a declaration handler for code walkers. The implementation of is based on the specification in Common Lisp the Language, 2nd Edition.
The new function hcl:undefine-declaration
removes declaration handlers.
It is now possible to trace and "advise" subfunctions that are created by flet
, labels
or lambda
. See cl:trace
, lw:defadvice
and "Subfunction dspecs" in the
LispWorks User Guide and Reference Manual
.
The hcl:lambda-name
declaration can be used to change the name of the surrounding lambda, which is useful for debugging purposes and does not affect the behavior of the program. See "Description of hcl:lambda-name" in the documentation of cl:declare
in the
LispWorks User Guide and Reference Manual
.
The new function hcl:map-code-coverage-data
calls a function on each of the files in a hcl:code-coverage-data
object.
The new function lw:rotate-byte
rotates specified bits within an integer.
The function hcl:reduce-memory
is now also implemented for 64-bit LispWorks.
The new function hcl:current-function-name
returns the name of the current function, which is useful for debugging.
The new function system:pipe-close-connection
can be used to close the connection underlying the pipe-stream without closing the stream itself, which allows the exit status of the pipe to be read.
The new function hcl:date-string
returns a string representing the date and time (including seconds) from a universal time.
The new function hcl:save-current-profiler-tree
saves the current profiler output to a file. This can be used later by the Profiler tool or can be opened in a text editor.
hcl:set-up-profiler
now has kw-contexts and subfunctions arguments to control profiling KnowledgeWorks contexts and subfunctions.
The function hcl:start-profiling
now takes a :time
keyword argument, which causes timing information to be printed by hcl:stop-profiling
.
The new variables lw-ji:*to-java-host-stream*
and lw-ji:*to-java-host-stream-no-scroll*
are bound to output streams that send anything that is written to them to Java (by calling lw-ji:send-message-to-java-host
). They can be used anywhere an output stream is needed to make the output go to the Java host.
The where-keyword argument to the function lw-ji:send-message-to-java-host
now has addition values :add-no-scroll
and :add
, which add text without a newline.
This keyword might also be passed to the send-message-to-java-host argument to lw-ji:init-java-interface
.
The Java method com.lispworks.Manager.addMessage
also allows the where argument to be ADDMESSAGE_ADD
or ADDMESSAGE_ADD_NO_SCROLL
.
The values of ADDMESSAGE_APPEND
and ADDMESSAGE_APPEND_NO_SCROLL
for the where argument to the Java method com.lispworks.Manager.addMessage
now insert a newline after the message. In LispWorks 7.0, the newline was inserted before the message so you may have to modify your code if you rely on that.
This also changes the effect of calling lw-ji:send-message-to-java-host
on Android with :append
and :append-no-scroll
.
The new function lw-ji:setup-java-interface-callbacks
can be called after lw-ji:init-java-interface
was called to change the values of class-finder, java-to-lisp-debugger-hook, report-error-to-java-host or send-message-to-java-host. This is useful in the situations where LispWorks performs the call to lw-ji:init-java-interface
, which happens in Android and in a dynamic library delivered with lw-ji:setup-deliver-dynamic-library-for-java
.
The method waitForInitialization
has been added to the Java class com.lispworks.LispCalls
to wait for Lisp to become initialized.
The new constant lw-ji:*java-null*
represents a Java null pointer, when this needs to be passed from Lisp to Java.
The new functions system:simple-int32-vector-length
and system:simple-int64-vector-length
return the lengths of system:simple-int32-vector
and system:simple-int64-vector
objects.
The new functions system:simple-int32-vector-p
and system:simple-int64-vector-p
act as predicates.
The new function lw:count-regexp-occurrences
counts the occurrences of a regular expression in a string.
The new function hcl:string-trim-whitespace
trims whitespace characters from the beginning and end of a string.
The new function hcl:write-string-with-properties
is like cl:write-string
, but when it writes to an Editor buffer it can add properties to the text it has written. This is especially useful for writing in different colors, bold, italic or underlined.
The new macros lw:push-end
and lw:push-end-new
push an element on the end of a list. These macros were available in all previous versions of LispWorks too, but have not been documented until now.
The Serial Port API, as described in chapter "The SERIAL-PORT Package" in the LispWorks User Guide and Reference Manual has been implemented for non-Windows platforms as well.
The new function dspec:object-dspec
returns the dspec for an object that represents some definition, such as a function, method or class.
The debugger now shows unused variables in code that is compiled at debug level 3. In LispWorks 7.0 and earlier versions, these variables were eliminated.
The new function system:specific-valid-file-encoding
can be included in the list system:*file-encoding-detection-algorithm*
to allow detection of the character encoding in a file, according to a configurable list of encodings in system:*specific-valid-file-encodings*
.
The new functions hcl:safe-format-to-string
, hcl:safe-prin1-to-string
and hcl:safe-princ-to-string
format and print to a string without signaling any errors. These functions are intended to be used in code that handles and reports errors, where it is important to avoid recursive errors.
The function win32:create-registry-key
has a new keyword :volatile
, which allows a volatile registry key to be created.
The new function hcl:android-build-value
returns the value of a field in the android.os.Build
Java class on Android.
LispWorks Release Notes and Installation Guide - 19 Oct 2017