freenode/#clasp - IRC Chatlog
Search
3:35:38
beach
I remember you wanted to talk to me about something, but I don't remember what it was.
3:37:48
drmeister
I've been told that sbcl uses a scheme where the entry points for a call are calculated for each call. I was thinking of implementing something like that. Each call would involve looking up an address in a table for the function and calling that.
3:38:40
drmeister
Then I could index into the table depending on the number of arguments at the call site.
3:40:15
beach
He investigated call sites and found that most had 1, 2, or 3 arguments, so he specializes for those.
3:41:34
drmeister
Ok. I'm going to open up space in front of every function and write the table in there.
3:42:55
beach
I don't understand what that means, but I believe you. In SICL, a function is just a funcallable standard object, so I would just add a few more slots to it, one for each additional entry point.
4:05:04
beach
So, the idea is this: One slot in the function contains its static environment, and the first element of the static environment is the "code object" that contains various tables for GC and debugging. The entry points are just addresses so the GC does not look at those.
4:06:11
beach
Code doesn't move. It is managed by the global collector which uses the same technique as malloc/free on GNU/Linux (algorithm and data structure by Doug Lea).
4:08:05
beach
That vector is what is kept alive if any of the functions that share the same code object is live, or of the code object itself is live for some other reason.
4:13:30
beach
I also use the code object in ways that you don't. The debugger, when it displays source code, looks in the code object for a vector of strings with the characters of the entire source file in it. Then it displays that vector of strings in a CLIM window.
4:19:03
beach
It is unbelievable that we still use technology that was designed 50 years ago to be a stripped down version of something really good, so that it could run on a PDP-8.
4:19:57
beach
And it is unbelievable that our programming languages still try to make us think that we are programming the bare computer with all its memory available to us as a sequence of bytes.
4:23:53
beach
Oh, and apparently, most transistors in a modern processor, and most of the power it uses up, exist to make us think that we are still programming a PDP-11.