All Manuals > Delivery User Guide

Contents

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 run time initializations from the build phase

3.2 Error handling in delivered applications

3.2.1 Handling errors generated by the application

3.2.2 Handling errors generated by the Lisp system

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

4.4.3.1 Using the Application Builder

4.4.4 Simple non-Windows 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 Controlling aspects of the executable or dynamic library

5.1.4 Behavior of the delivery process

5.1.5 Retaining or removing functionality

5.1.5.1 Directing the behavior of the treeshaker and garbage collector

5.1.5.2 Classes and structures

5.1.5.3 Symbols, SYMBOL-NAME, functions, and packages

5.1.5.4 Editor functionality

5.1.5.5 CLOS metaclass compression

5.1.5.6 Input and output

5.1.5.7 Dynamic code

5.1.5.8 Numbers

5.1.5.9 Conditions deletion

5.2 Alphabetical list of deliver keywords

6 Delivery on macOS

6.1 Universal binaries

6.2 Application bundles

6.3 Bad interaction with clean-up utilities

6.4 Cocoa and GTK+ images

6.5 Terminal windows and message logs

6.5.1 Controlling use of a terminal window

6.5.2 Logging debugging messages

6.6 File associations for a Macintosh application

6.7 Editor emulation

6.8 Standard Edit keyboard gestures

6.9 Quitting a CAPI/Cocoa application

6.10 Retaining Objective-C classes

6.11 X11/Motif considerations

6.12 Examples of delivering Cocoa applications

7 Delivery on Microsoft Windows

7.1 Run time 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 and x86/x64 Solaris

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

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

10.1.2.1 Finding the necessary templates

10.1.2.2 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 The condition system in delivered applications

10.5.1 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 run time

10.12 Symbol-name comparison

10.13 Delivery and Java interface

11 Troubleshooting the delivery process

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 Warnings about combinations and templates

11.10 FLI template needs to be compiled

11.11 Failure to lookup X resources

11.12 Reducing the size of the delivered application

11.13 Symbol names changed to "Dummy Symbol Name"

11.14 Debugging with :no-symbol-function-usage

11.15 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 macOS application bundle

13.3.1 Example application bundle delivery script

13.3.2 Alternative application bundle creation code

13.3.3 Further macOS 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 run time

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 of delivery

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

deliver-keep-symbol-names

deliver-keep-symbols

deliver-keywords

delivery-shaker-cleanup

delivery-shaker-weak-pointer

delivery-value

Index


Delivery User Guide - 01 Dec 2021 19:35:07