On Thu, Jul 15, 2010 at 3:08 AM, Gabriel Dos Reis <gdr@integrable-solutions.net> wrote:
 Do you have a documentation for ECL's FASL format (and data structures)?

Not really: read.d and more precisely read_VV document the process of initializing a FASL file, while load.d shows how it is loaded.

FASL files are just shared libraries. We do not use "formats" as such, but just link together object files.

Each object file contains a single initialization routine, which is just a C function with the statements in the lisp file, compiled.

This routine is called twice by read_VV. The first time it just returns a structure (ecl_codeblock) with some fields filled in, such as the text representation of all constants, the text representation of those constants that are only used during initialization (and can be eliminated afterwards), and some debug information.

The second time, the init function executes the compiled statements I mentioned before. Now all constants and packages have been set up and thus the lisp code works just fine. Functions will be installed by the statements that implement DEFUN, and macros, classes, and other things will be defined.

But again, this is _how_ it works. There is no format as such. ECL just uses whatever the operating system provides in terms of binary file formats, system calls to load them, etc.


Instituto de Física Fundamental, CSIC
c/ Serrano, 113b, Madrid 28006 (Spain)