All Manuals > LispWorks Delivery User Guide



1 Introduction

1.1 What does Delivery do?

1.1.1 Making the image smaller

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.3.3 Example files

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.5 Examples

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 examples

3 Writing Code Suitable for Delivery

3.1 Separate runtime initializations from the build phase

3.2 Error handling in delivered applications

3.3 Efficiency considerations

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 Simple Linux example

4.4.5 Further example

4.4.6 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, SYMBOL-NAME, functions, and packages Editor functionality 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 Application bundles

6.2 Bad interaction with clean-up utilities

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 Retaining Objective-C classes

6.10 X11/Motif considerations

6.11 Examples of delivering Cocoa applications

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

7.7 Example of delivering a Service

8 Delivery on Linux, FreeBSD, AIX, x86/x64 Solaris 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 LispWorks executable corrupted

8.4 Logging debugging messages

8.5 Editor emulation

8.6 Products supporting dynamic library delivery

8.7 Runtime licensing on SPARC Solaris

8.7.1 Protection of the delivery product on SPARC Solaris

8.7.2 Protection of the delivered image on SPARC Solaris

8.7.3 Unprotected runtime applications on SPARC Solaris

8.7.4 Expiration of unprotected runtime applications on SPARC Solaris

9 Delivering for mobile platforms

9.1 Delivery of iOS runtimes

9.1.1 Compiler not available in iOS runtimes

9.1.2 How to deliver an iOS runtime

9.2 Delivery of Android runtimes

9.2.1 How to deliver an Android runtime

10 Delivery and Internal Systems

10.1 Delivery and CLOS

10.1.1 Applications defining classes or methods dynamically

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

10.1.3 Delivery and the MOP

10.1.4 Compression of CLOS metaobjects

10.1.5 Classes, methods, and delivery

10.1.6 Delivery and make-instance initarg checking

10.2 Delivery and the Lisp reader

10.3 Editors for delivered applications

10.3.1 Form parsing and delivery

10.3.2 Emulation and delivery

10.3.3 Editor command groups

10.4 Delivery and CAPI

10.4.1 Interface geometry depends on Lisp symbol names

10.5 Error handling in delivered applications

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

10.5.2 Deleting of condition classes

10.6 Delivery and the FLI

10.6.1 Foreign Language Interface templates

10.6.2 Foreign callable names

10.7 Modules

10.8 Symbol, SYMBOL-NAME and package issues during delivery

10.9 Throwing symbols and packages out of the application

10.9.1 Deleting packages

10.9.2 How to delete packages

10.9.3 Smashing packages

10.9.4 How to smash packages

10.9.5 When to delete and smash packages

10.10 Keeping packages and symbols in the application

10.10.1 Ensuring that packages are kept

10.10.2 Ensuring that symbols are kept

10.11 Coping with intern and find-symbol at runtime

10.12 Symbol-name comparison

11 Troubleshooting

11.1 Debugging errors in the delivery image

11.2 Problems with undefined functions or variables

11.3 Problems with READ

11.4 Failure to find a class

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

11.6 Failed to reserve... error in compacted image

11.7 Memory clashes with other software

11.8 Possible explanations for a frozen image

11.9 Errors when finalizing classes

11.10 Warnings about combinations and templates

11.11 Valid type specifier errors

11.12 Stack frames with the name NIL in simple backtraces

11.13 Blank or obscure lines in simple backtraces

11.14 Nil is not of type hash-table errors

11.15 FLI template needs to be compiled

11.16 Failure to lookup X resources

11.17 Reducing the size of the delivered application

11.18 Symbol names changed to "Dummy Symbol Name"

11.19 Debugging with :no-symbol-function-usage

11.20 Interrogate-Symbols

12 Interface to the Delivery Process

12.1 Interface to the delivery process

13 Example: Delivering CAPI Othello

13.1 Preparing for delivery

13.1.1 Writing a delivery script

13.2 Delivering a standalone image

13.3 Creating a Mac OS X application bundle

13.3.1 Example application bundle delivery script

13.3.2 Alternative application bundle creation code

13.3.3 Further Mac OS X delivery examples

13.4 Command line applications

13.5 Making a smaller delivered image

13.5.1 Increasing the delivery level

14 Efficiency considerations when coding for delivery

14.1 Use of modules

14.2 Loading code at runtime

14.3 General strategy for reducing the image size

14.4 Use of symbols, functions, and classes

14.5 Making references to packages

14.6 Declaring the types of variables used in function calls

14.7 Avoid referencing type names

14.7.1 Referencing types via methods

14.7.2 Referencing types via predicates

14.8 Use of the INTERN and FIND-SYMBOL functions

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

14.10 User-defined and built-in packages

15 Self-contained examples

15.1 Delivering a Cocoa CAPI application examples

15.2 Delivering a CAPI application examples

15.3 Delivering a dynamic library examples

15.4 Delivering a Windows service examples

16 Delivery Reference Entries

deliver 149

delivery-value 151

deliver-keep-symbol-names 152

deliver-keep-symbols 153

deliver-keywords 154

delivery-shaker-cleanup 155

delivery-shaker-weak-pointer 157



LispWorks Delivery User Guide - 15 Feb 2015