All Manuals > LispWorks Release Notes and Installation Guide > 15 Release Notes


15.9 More new features

For details of these, see the documentation in the LispWorks User Guide and Reference Manual , unless a manual is referenced explicitly.

15.9.1 Support for remote debugging

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.

15.9.2 Support for using Asynchronous I/O with SSL

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.

15.9.3 Support for OpenSSL 1.1

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 .

15.9.4 Support for SNI in socket streams

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.

15.9.5 Control over handshake time in SSL

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.

15.9.6 User-defined declaration handlers

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.

15.9.7 Tracing and advising subfunctions

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 .

15.9.8 Specifying function names using a declaration

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 .

15.9.9 Additional function for use with code coverage

The new function hcl:map-code-coverage-data calls a function on each of the files in a hcl:code-coverage-data object.

15.9.10 Rotating bits within an integer

The new function lw:rotate-byte rotates specified bits within an integer.

15.9.11 reduce-memory implemented for 64-bit LispWorks

The function hcl:reduce-memory is now also implemented for 64-bit LispWorks.

15.9.12 New function to return the current function name

The new function hcl:current-function-name returns the name of the current function, which is useful for debugging.

15.9.13 New function to close a pipe stream

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.

15.9.14 New function to return a date/time string

The new function hcl:date-string returns a string representing the date and time (including seconds) from a universal time.

15.9.15 Saving profiler results to a file

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.

15.9.16 New arguments to set-up-profiler

hcl:set-up-profiler now has kw-contexts and subfunctions arguments to control profiling KnowledgeWorks contexts and subfunctions.

15.9.17 New keyword to print timing information when profiling

The function hcl:start-profiling now takes a :time keyword argument, which causes timing information to be printed by hcl:stop-profiling.

15.9.18 New output stream variable in the Java interface

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.

15.9.19 lw-ji:send-message-to-java-host can add text without a newline

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.

15.9.20 Change to meaning of append in com.lispworks.Manager.addMessage

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.

15.9.21 Changing the Java interface callbacks

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.

15.9.22 New Java method to wait for Lisp initialization

The method waitForInitialization has been added to the Java class com.lispworks.LispCalls to wait for Lisp to become initialized.

15.9.23 New constant to represents Java null values

The new constant lw-ji:*java-null* represents a Java null pointer, when this needs to be passed from Lisp to Java.

15.9.24 New length and predicate for simple-int32-vector and simple-int64-vector

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.

15.9.25 Counting occurrences of a regular expression in a string

The new function lw:count-regexp-occurrences counts the occurrences of a regular expression in a string.

15.9.26 Trimming whitespace from a string

The new function hcl:string-trim-whitespace trims whitespace characters from the beginning and end of a string.

15.9.27 Using color and menus in text output

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.

15.9.28 Pushing an element on the end of a list

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.

15.9.29 Serial Port API implemented on non-Windows platforms

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.

15.9.30 Obtaining a dspec for an object

The new function dspec:object-dspec returns the dspec for an object that represents some definition, such as a function, method or class.

15.9.31 The debugger now shows unused variables at debug level 3

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.

15.9.32 Automatic detection of valid file encodings

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

15.9.33 New functions to handle errors while printing

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.

15.9.34 Creating a volatile registry key

The function win32:create-registry-key has a new keyword :volatile, which allows a volatile registry key to be created.

15.9.35 Accessing android.os.Build on Android

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