freenode/#clasp - IRC Chatlog
Search
0:01:02
drmeister
I had already made a big push towards this by eliminating the definition of several C++ classes that derived from Class_O
0:03:37
drmeister
What about funcallable instances? Currently all Instance_O classes are funcallable.
0:04:15
drmeister
The only difference between an instance and a funcallable-instance is that funcallable-instance has a function entry point associated with it.
0:04:47
drmeister
"The only difference between an instance and a funcallable-instance should be that funcallable-instance has a function entry point associated with it."
0:09:38
drmeister
It's layout is going to be different than the layout of Function_O and everything that derives from it. The function entry_point pointer is the first thing in Function_O and everything that derives from it.
0:11:50
Bike
i mean, right now you have instance as a subclass of function_o so that they have the same layout, right?
0:17:05
drmeister
So it's more like Instance_O -> FuncallableInstance_O and I have to create an Instance_O class
0:22:03
drmeister
I'm thinking about aligning slots for faster/easier access and asking myself what I can stick into the slot that holds the function entry-point in FuncallableInstance_O. I can stick the instance_stamp (the stamp that instances of a class get) into that slot if FuncallableInstance_O can never be a class.
3:02:45
drmeister
It was just a shock to see you say good morning when it's still light out - no matter - don't mind me.
3:23:58
Bike
beach: so yeah, i think i understand how environments would work here, and why you were surprised at how i did the sbcl cleavir thing
3:27:13
beach
How does Clasp currently access a function in compiled code, as in when it does (my-function ....) or #'(setf my-function)?
3:32:00
Bike
what i figured it would be is you have a hash table in the environment, and then you bind fdefinition to read from that hashtable, and setf fdefinition to write to it.
3:33:01
beach
So When compiled code is loaded, instead of finding symbols for those functions, it must find the cells in the environment.
3:34:09
beach
The only time a hash-table lookup is strictly necessary is when FDEFINITION and (SETF FDEFINITION) are used with non-constant symbol names.
3:35:22
beach
So (my-fun ...) at runtime, instead of turning into something like (funcall (symbol-function 'my-fun) ...) it turns into (funcall (car cell-i) ...).
3:36:36
drmeister
Yes, each symbol has a value slot - but it got a bit more complicated for threading.
3:36:39
beach
I knew I couldn't do hash-table lookup for a function call, and I knew the indirection was required.
3:38:50
beach
The value slot, if you have such a thing, must be similarly disembodied and become part of the environment as a cell.
3:40:03
beach
So now, when compiled code is loaded, the "linking" must be against a particular first-class global environment.
3:40:35
beach
But you probably want to make that a second layer, so that below, you can choose what environment to link to.
3:45:16
Bike
ok, so how i figured this would work is that when clasp is building itself, it makes an environment where there are no packages or bindings or anything for cleavir, and compile cleavir in that environment.
3:46:28
Bike
well, that's the concrete version, but you know what i mean. it's the same as how sbcl does a bunch of package junk (and you want to avoid package junk)
3:47:39
beach
But if that is what is done at the moment, then there could be significant changes required.
3:48:17
Bike
in clasp nothing is done at the moment. you load the compiler, and then have it build itself, meaning it recompiles and changes its own definitions as it goes
3:52:17
Bike
so i guess the compiler has to know to output a different kind of fdefinition based on the environment
3:53:15
beach
In the general case, when fdefinition takes a non-constant symbol, it needs to know the current environment, so that has to be one of the things available to compiled code.
3:56:30
beach
CL:FDEFINITION <mumble>) calls (env:fdefinition <mumle> (car current-environment-cell))
4:01:01
beach
You may want to look in Data-and-control-flow/fdefinition.lisp to see how I do it in SICL.
4:03:22
beach
Otherwise, presumably you have a compiler macro that turns cl:fdefinition into a direct access to the cell at run-time.
4:25:21
beach
In SICL, I define all of the functions that use an implicit global environment to trampoline to a generic function that takes an environment as an additional argument.
4:26:51
beach
Then, for SICL system code, I try to avoid using the Common Lisp function, and instead I use the generic function so that I can choose which environment to use.
8:06:19
Shinmera
drmeister: I've started setting up a VM. Let me know if there's any software you'd like preinstalled beyond a standard desktop, clasp, sbcl, emacs, and python.
8:13:49
loke
ACTION is checking the wikipedia page on edlin, and it claims that EDLIN is availabnle in the 32-bit release of Win10.