libera/#sicl - IRC Chatlog
Search
12:48:18
beach
I was able to create instances of SICL SIMPLE-FUNCTION in environment E5 when functions are imported from the host, according to the plan I outlined the other day, but other parts of the code does not use this new way, so I have to restructure things.
12:48:19
beach
In particular, at the time, I thought I was smart and imported a bunch of host functions in the :AFTER method on INITIALIZE-INSTANCE specialized to the base class of the bootstrapping environments, and that way won't work anymore. I guess I'll make an indirection via the environment, since the way to import is potentially specific to each environment.
13:19:12
beach
Interestingly, there is a possible bootstrapping technique that I hadn't thought of before. When we create an ersatz function in E5, the HEADER is a host FUNCALLABLE-STANDARD-OBJECT that is used when the function is to be executed in the host, but the rack is (or will be) what determines the code that goes into the executable, and the two are entirely separate.
13:19:18
beach
Right now, when we load a function definition in the form of a file containing a DEFUN form into E5, the HIR evaluator will create an object of its own type which is also a host funcallable-standard-object, and it will call the host SET-FUNCALLABLE-INSTANCE-FUNCTION to make that object executable. This object is then stored in the environment as usual.
13:19:23
beach
But I want to change that so that the HIR evaluator creates instances of SICL SIMPLE-FUNCTION. But nothing prevents us from calling SET-FUNCALLABLE-INSTANCE-FUNCTION with an imported host function while keeping the rack as the result of the compilation.
13:19:24
beach
We could then sometimes use a faster host version of a function, like say MEMBER for execution during bootstrapping, while still have the rack reflect the compiled SICL version. Of course, doing it that way means the SICL version won't be tested during bootstrapping.