LispWorks Delivery User Guide



1 Introduction

1.1 What does Delivery do?

1.2 What do you get with Delivery?

1.2.1 Programming libraries and facility support code

1.2.2 Functionality removed by delivery

1.3 Conventions and terminology used in this manual

1.3.1 Common Lisp reference text

1.3.2 Platform-specific keywords

1.4 A breakdown of the delivery process

1.4.1 Developing your application

1.4.2 Managing and compiling your application

1.4.3 Debugging, profiling and tuning facilities

1.4.4 Delivering your compiled application

1.4.5 Licensing issues

1.4.6 Modules

1.4.7 Error handling

1.4.8 Troubleshooting

1.4.9 Examples

1.5 Runtime licensing on UNIX

1.5.1 Protection of the delivery product on UNIX

1.5.2 Protection of the delivered image on UNIX

1.5.3 Unprotected runtime applications on UNIX

1.5.4 Expiration of unprotected runtime applications on UNIX

2 A Short Delivery Example

2.1 Developing the program

2.2 Delivering the program

2.2.1 Delivering the program using the LispWorks IDE

2.2.2 Delivering the program using a command shell

2.2.3 Further example

3 Writing Code Suitable for Delivery

3.1 Basic considerations when coding for delivery

3.2 Efficiency considerations when coding for delivery

3.2.1 Use of modules

3.2.2 Loading code at runtime

3.2.3 Use of symbols, functions, and classes

3.2.4 Making references to packages

3.2.5 Declaring the types of variables used in function calls

3.2.6 Avoid referencing type names Referencing types via methods Referencing types via predicates

3.2.7 Use of the INTERN and FIND-SYMBOL functions

3.2.8 Use of the EVAL function and the invocation of uncompiled functions

3.2.9 User-defined and built-in packages

4 Delivering your Application

4.1 The delivery function: deliver

4.2 Using the delivery tools effectively

4.2.1 Saving the image before attempting delivery

4.2.2 Delivering the application in memory

4.3 Delivering a standalone application executable

4.4 Delivering a dynamic library

4.4.1 Simple delivery of a dynamic library

4.4.2 Using the dynamic library

4.4.3 Simple Windows example Using the Application Builder

4.4.4 Further example

4.4.5 More about building dynamic libraries

4.5 How to deliver a smaller and faster application

4.5.1 Making the image smaller

4.6 How Delivery makes an image smaller

4.6.1 Garbage collecting the image

4.6.2 Shaking the image

5 Keywords to the Delivery Function

5.1 Topic-based list of deliver keywords

5.1.1 Controlling the behavior of the delivered application

5.1.2 Testing and debugging during delivery

5.1.3 Behavior of the delivery process

5.1.4 Retaining or removing functionality Directing the behavior of the treeshaker and garbage collector Classes and structures Symbols, functions, and packages LispWorks environment CLOS metaclass compression Input and output Dynamic code Numbers Conditions deletion

5.2 Alphabetical list of deliver keywords

6 Delivery on Mac OS X

6.1 Universal binaries

6.2 Application bundles

6.3 Cocoa and GTK images

6.4 Terminal windows and message logs

6.4.1 Controlling use of a terminal window

6.4.2 Logging debugging messages

6.5 File associations for a Macintosh application

6.6 Editor emulation

6.7 Standard Edit keyboard gestures

6.8 Quitting a CAPI/Cocoa application

6.9 Platforms supporting dynamic library delivery

7 Delivery on Microsoft Windows

7.1 Runtime library requirement

7.2 Application Manifests

7.3 DOS windows and message logs

7.3.1 Controlling use of a DOS window

7.3.2 Logging debugging messages

7.4 File associations for a Windows application

7.5 Editor emulation

7.6 ActiveX controls

8 Delivery on Linux, FreeBSD and Unix

8.1 GTK+ considerations

8.1.1 GTK+ libraries on the target machine

8.1.2 Fallback resources

8.2 X11/Motif considerations

8.2.1 Loading Motif

8.2.2 Motif on the target machine

8.2.3 Fallback resources

8.2.4 X resource names use Lisp symbol names

8.3 Logging debugging messages

8.4 Editor emulation

8.5 Products supporting dynamic library delivery

9 Delivery and Internal Systems

9.1 Delivery and CLOS

9.1.1 Applications defining classes or methods dynamically

9.1.2 Special dispatch functions and templates for them Finding the necessary templates Incorporating the templates into the application

9.1.3 Delivery and the MOP

9.1.4 Compression of CLOS metaobjects

9.1.5 Classes, methods, and delivery

9.1.6 Delivery and make-instance initarg checking

9.2 Editors for delivered applications

9.2.1 Form parsing and delivery

9.2.2 Emulation and delivery

9.2.3 Editor command groups

9.3 Delivery and CAPI

9.3.1 Interface geometry depends on Lisp symbol names

9.4 Error handling in delivered applications

9.4.1 Making the application handle errors Handling errors generated by the application Handling errors generated by the Lisp system Providing a fallback handler for uncaught errors

9.4.2 Deleting of condition classes

9.5 Delivery and the FLI

9.5.1 Foreign Language Interface templates

9.5.2 Foreign callable names

9.6 Modules

9.7 Symbol and package issues during delivery

9.8 Throwing symbols and packages out of the application

9.8.1 Deleting packages

9.8.2 How to delete packages

9.8.3 Smashing packages

9.8.4 How to smash packages

9.8.5 When to delete and smash packages

9.9 Keeping packages and symbols in the application

9.9.1 Ensuring that packages are kept

9.9.2 Ensuring that symbols are kept

9.10 Coping with intern and find-symbol at runtime

9.11 Symbol-name comparison

10 Troubleshooting

10.1 Debugging errors in the delivery image

10.2 Problems with undefined functions or variables

10.3 Failure to find a class

10.4 REQUIRE was called after delivery time with module ...

10.5 Failed to reserve... error in compacted image

10.6 Memory clashes with other software

10.7 Possible explanations for a frozen image

10.8 Errors when finalizing classes

10.9 Warnings about combinations and templates

10.10 Valid type specifier errors

10.11 Stack frames with the name NIL in simple backtraces

10.12 Blank or obscure lines in simple backtraces

10.13 Nil is not of type hash-table errors

10.14 FLI template needs to be compiled

10.15 Failure to lookup X resources

10.16 Reducing the size of the delivered application

10.17 Debugging with :no-symbol-function-usage

10.18 Interrogate-Symbols

11 User Actions in Delivery

11.1 General strategy for reducing the image size

11.2 User interface to the delivery process

12 Delivering CAPI Othello

12.1 Preparing for delivery

12.1.1 Writing a delivery script

12.2 Delivering a standalone image

12.3 Creating a Mac OS X application bundle

12.3.1 Example application bundle delivery script

12.3.2 Further Mac OS X delivery examples

12.4 Command line applications

12.5 Making a smaller delivered image

12.5.1 Increasing the delivery level



LispWorks Delivery User Guide - 22 Dec 2009