libera/#sicl - IRC Chatlog
Search
9:52:46
beach
In SICL, the FASL file is the printed representation of the AST, so that's the representation of the forms.
9:53:11
jackdaniel
as far as I can tell (based on cursory glance) bir entry point is a "module" that maintains a set of constants and a set of functions (and I don't see where top level forms fall in this picture - as an implicit "init" function perhaps?)
10:24:49
jackdaniel
perhaps the wording is wrong - "how does cleavir represent the code that needs to be executed when the fasl is loaded (in bir)"
10:26:01
beach
And what would be some reasons for not representing that code as the same kind of native instructions that compiled functions contain?
10:27:49
beach
That was in fact my initial plan for SICL. Just mmap() the file and jump to the first address.
10:27:50
jackdaniel
I find it hard to talk to you and I'm too busy to keep rephrasing questions to match exact semantic meaning you'd understand. I'll rephrase it one more time and get back to my tasks and see later whether perhaps bike answered: "how does cleavir /store/ the code (in bir) that needs to be executed when the fasl is loaded"
10:28:43
beach
I am sorry I am getting on your nerves. My question is a serious one. I don't know any answers, and I don't understand the reason for doing it in any other way.
10:29:14
jackdaniel
don't worry, I believe you mean well. that's why I've emphasized that _I_ find it hard
12:00:06
ogamita
It's like in modula-2, each module can have a body, which acts like lisp toplevel. So when we compile each module, we generate a set of functions, but also a module initialization function, that is called when the module is loaded. The linker/loader will generate the calls to module initialization function.
12:03:03
ogamita
In the case of fasl, you may load them with a REPL, so you may keep the same "structure" as source files (this is eg. what clisp does, using just a specific reader macro to read the binary code). Or you may structure the fasl as a mini-heap, and mmap it, then you have lisp objects and you need to have one that refers the toplevel code (a single function or code vector may do). Or your fasl could be some object file (eg. elf), in which
12:03:03
ogamita
case you need to generate explicitely this module initialization function (section), and the linker/loader will call it. Note that even for C, there's some initialization code that is called when loading a shared library, to complete the initialization of globals, etc.