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.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 Security issues

1.4.6 Libraries

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 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 Use of TYPEP, TYPECASE and SUBTYPEP for type discrimination

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 How to deliver a standalone version of your application

4.4 How to deliver a smaller and faster application

4.4.1 Making the image smaller

4.5 How Delivery makes an image smaller

4.5.1 Garbage collecting the image

4.5.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 Delivering the application 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 and Internal Systems

6.1 Delivery and CLOS

6.1.1 Applications defining classes or methods dynamically

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

6.1.3 Delivery and the MOP

6.1.4 Compression of CLOS metaobjects

6.1.5 Classes, methods, and delivery

6.1.6 Delivery and make-instance initarg checking

6.2 Editors for delivered applications

6.2.1 Form parsing and delivery

6.2.2 Emulation and delivery

6.2.3 Modified buffers warnings

6.2.4 Editor command groups

6.3 Delivery and CAPI

6.4 Error handling in delivered applications

6.4.1 Making the application handle errors Handling errors generated by the application Handling errors generated by the Lisp system

6.4.2 Deleting of condition classes

6.5 Foreign Language Interface templates

6.6 Modules

6.7 Symbol and package issues during delivery

6.8 Throwing symbols and packages out of the application

6.8.1 Deleting packages

6.8.2 How to delete packages

6.8.3 Smashing packages

6.8.4 How to smash packages

6.8.5 When to delete and smash packages

6.9 Keeping packages and symbols in the application

6.9.1 Making sure that packages are kept

6.9.2 Making sure that symbols are kept

6.10 Coping with intern and find-symbol at runtime

6.11 Symbol-name comparison

7 Troubleshooting

7.1 Debugging errors in the delivery image

7.2 Problems with undefined functions or variables

7.3 Failure to find a class

7.4 Possible explanations for a frozen image

7.5 Errors when finalizing classes

7.6 Warnings about combinations and templates

7.7 Warnings about saving editor buffers

7.8 Valid type specifier errors

7.9 Stack frames with the name NIL in simple backtraces

7.10 Blank or obscure lines in simple backtraces

7.11 Nil is not of type hash-table errors

7.12 FLI template needs to be compiled

7.13 Reducing the size of the delivered application

7.14 Interrogate-Symbols

8 User Actions in Delivery

8.1 General strategy for reducing the image size

8.2 User interface to the delivery process

9 Delivering CAPI Othello

9.1 Preparing for delivery

9.1.1 Writing a delivery script

9.2 Delivering a standalone image

9.3 Creating a Mac OS X application bundle

9.3.1 Example application bundle delivery script

9.3.2 Further Mac OS X delivery examples

9.4 Command line applications

9.5 Making a smaller delivered image

9.5.1 Increasing the delivery level


LispWorks Delivery User Guide - 7 Apr 2005