libera/#clasp - IRC Chatlog
Search
3:01:32
drmeister
You are coming at it following what clisp does - I'm coming at it from what I did for the interpreter and aclasp/bclasp and C++ wrapping works.
3:05:41
drmeister
I'll walk you through how the LambdaListHandler_O object works in a few days once I refresh my memory and we can all get on zoom
3:06:42
drmeister
If it looks too inefficient we take a look through the clisp approach or something else.
3:09:14
drmeister
It's a class that contains everything the system needs to turn a vector of caller arguments to a vector of callee arguments and it uses integer indices for everything.
3:12:41
karlosz
ah yeah, that's basically intepreting lambda lists instead of bytecode compiling some of the dispatch work away
3:14:33
Bike
i am really pretty sure the lambda list handler is not going to work for our purposes, and that we should do something more like we do in cclasp
3:14:41
drmeister
Yeah, and we can compile the default initializers into bytecode and the LambdaListHandler_O code will evaluate it.
3:16:41
Bike
the lambda list handler is based on eval-ing default forms and stuff. it has control of the interpreter. it will not have control of the bytecode. just running some bytecode and then returning back into the handler doesn't make sense. why not just transfer control into the bytecode entirely?
3:21:41
drmeister
LambdaListHandler_O would work though, before you enter the bytecode for the function body the LambdaListHandler_O would bind all of the arguments in slots in the side-stack. It would call into bytecode for each of the argument defaults.
3:24:44
Bike
say we have (&optional (a (f)) (b (g))). We compile that into bytecode like "a-default: constant(1) push call return-to-lambda-list-handler; b-default: constant(2) call push return-to-lambda-list-handler;" and then i guess the lambda list handler has to be modified so that it can pop the value from the vm and set it up in the right place in the vm stack, which it would also have to be taught about
3:25:02
drmeister
Indeed, in cclasp we bypass LambdaListHandler_O by recompiling the lambda lists for all the builtin functions.
3:26:02
drmeister
Let me refresh my memory about how it will work and then I'll propose it to you both.
3:28:31
drmeister
Here's an idea - if bytecode can do lambda list processing better than LambdaListHandler_O then we could compile lambda-lists for builtin functions into bytecode.
3:30:28
Bike
i just don't think we could practically do very much code reuse. we'd already have to make a lot of changes to both lambda list handler and the bytecode to let them interoperate.
3:36:45
Bike
well we can figure it out later... i'm going to sleep now. good night, see you tomorrow
11:16:23
yitzi
Looks like the nightly builds failed. Appears that the static analyzer needs to be run. Doing so on zeus now.
14:48:49
Bike
and the compiler will do inline fixnum or float arithmetic a lot of the time for them when it can