[Openmcl-devel] save-application

Gary Byers gb at clozure.com
Thu Oct 23 17:25:58 PDT 2014

One possible sourcce of confusion is that SAVE-APPLICATION is misnamed;  
a better name might be something like "SAVE-HEAP-IMAGE".  A "heap  
image" is a file that contains lisp data and compiled lisp code and a  
little bit of metainformation in some simple ad hoc format that's  
supposed to be easy to map into memory.

The :native t option only works on OSX; it saves the same information  
in a native OSX
shared library.  (Such files often have an extension of ".dylib")  The  
only advantages that I know of to mapping the lisp code and data from a  
.dylib rather than from a heap image file are (a) some profiling tools  
that Apple used to provide can't understand how executable code that  
it's profiling got mapped into memory unless it was mapped from a  
.dylib and (b) some other tools - the gdb debugger - can recognize lisp  
function names more easily if some debugging info is present in the  
.dylib file.

Whether it comes from an image file or from a native shared library,  
you can't directly execute the code directly from the shell; you can  
execute the CCL kernel from the shell and CCL kernel] can map an image  
file (or a .dylib with certain contents) into its address space and  
call the compiled lisp code that it contains.  You can either run the  
CCL kernel from the shell and tell it to try to load a non-default  
image by using the -I option when running CCL or (as Tim Bradshaw  
suggested) tell SAVE-APPLICATION to prepend the running kernel to the  
image (in which case the resulting file contains both an executable  
program and a heap image.)

If you try to execute some file from a Unix shell and the shell and the  
shell doesn't know how to execute it, you'll get a (possibly cryptic)  
error message; this is true whether CCL is involved or not.

I actually think that (at least as far as the above goes) what the CCL  
documentation says about what SAVE-APPLICATION does is accurate and  
intelligble; see section 4.9.

On 10/23/2014 03:10:14 PM, Tim Bradshaw wrote:
> On 23 Oct 2014, at 21:36, Devon Sean McCullough <OpenMCL at jovi.net>  
> wrote:
> >
> > $ ccl -e '(save-application "ccl-app-native" :toplevel-function  
> (lambda () (print "ccl-app-native")) :native t)'
> You want
> (save-application "ccl-app-native"
>                   :toplevel-function (lambda () (print  
> "ccl-app-native"))
>                   :prepend-kernel t)
> _______________________________________________
> Openmcl-devel mailing list
> Openmcl-devel at clozure.com
> https://lists.clozure.com/mailman/listinfo/openmcl-devel

More information about the Openmcl-devel mailing list