libera/#clasp - IRC Chatlog
Search
16:52:10
yitzi
drmeister: Looks like we have got some missing defines. Getting https://plaster.tymoon.eu/view/3346#3346
17:03:57
Colleen
karlosz: drmeister said 3 hours, 9 minutes ago: I implemented multiple entry points in cclasp for the simple cases that only involve required + optional arguments. If the function lambda list involves &rest or &key or anything else - then the fixed arity entry points jump to the general entry point. You could do the same couldn't you?
17:05:28
karlosz
hm... the part im getting hung up on is somethng like &optional (x nil x-p). You make an entry point for 0 arguments and 1 arguments, but the 1-argument entry point still needs to set X-P to T, so its not as if the 0 argument entry point could just fall through to the 1 argument entry point
17:24:48
Bike
yitzi: where does koga/ninja put fasls now? i'd like to delete them so i can start rebuilding from bclasp. or is there some koga thing i can use
17:26:47
yitzi
I have a branch to simplify that down to lib/cclasp/ ... not sure if I should finish or wait for bytecode to land
18:01:44
Bike
i wouldn't anticipate a bytecode changeover in the immediate future. we have a ways to go.
18:02:41
Bike
::notify karlosz can we not just have each entry point unconditionally jump to the function body after setting all the parameters? i don't think jumps will be meaningfully slower than fallthrough?
18:12:36
Colleen
karlosz: Bike said 9 minutes, 55 seconds ago: can we not just have each entry point unconditionally jump to the function body after setting all the parameters? i don't think jumps will be meaningfully slower than fallthrough?
18:12:46
karlosz
if i have 7 optionals it seems like kinda of a waste to have defaulting logic repeated 7 times
18:28:58
karlosz
it seems like the presence of supplied-p parameters also makes in-place processing on the stack hard... im thnking we might need an additional args register pointing to the region where the passed args are
18:30:36
karlosz
otherwise if you have (x &optional (y nil y-p) &rest rest-arg) supplying y-p will overwrite the args needed for the rest-arg
19:13:40
karlosz
when calling in from machine code the trampoline doesn't even have to push any of the stuff on the normal stack
19:14:42
karlosz
i don't think its possible to have the args area and the local variable frame overlap
19:15:11
drmeister
Missing defines - did you fix it? I had a fix and got distracted before I pushed.
19:15:35
karlosz
where args is loaded with the arguments - this could be done when calling into a bytecode function
19:16:06
karlosz
the vm also needs an args-count register, but we need that for argument checking anyway
19:16:56
drmeister
Somehow the merges gave me a duplicate bytecode_call function. I removed the second one - it had old code that used those defines.
19:17:45
karlosz
anyway, still figuring out the details. once i get it working in the prototype i will update the vm page
19:19:41
drmeister
karlosz: Regarding "hm... the part im getting hung up on is somethng like &optional (x nil x-p). You make an entry point for 0 arguments and 1 arguments, but the 1-argument entry point still needs to set X-P to T, so its not as if the 0 argument entry point could just fall through to the 1 argument entry point" - agreed. I don't recall what I did - but it's in our argument processing source code.
19:20:40
drmeister
https://github.com/clasp-developers/clasp/blob/main/src/lisp/kernel/cmp/arguments.lisp#L427
19:21:05
Bike
i don't think it's a big deal honestly, most functions don't have &optional parameters, and even if they do they have more like two than seven
19:23:41
drmeister
`compile-only-req-and-opt-arguments` takes an `arity` argument - I think it generates standalone code for each arity of arguments that doesn't depend on any other code.
19:26:21
drmeister
That code evolved from earlier code with a single entry point. I didn't consider any fancy pants ideas like "elegance" or "flow".
19:26:48
drmeister
ACTION subscribes to the "if brute force doesn't work - then you aren't using enough of it" school of programming.
19:31:17
drmeister
stassats: Howdy - we are finally building a bytecode virtual machine to replace our s-expression walking interpreter. We are going to have a bytecode compiler and interpreter implemented in C++. Fun fun!
19:34:58
drmeister
I am oh so tired of the constraints that our s-exp interpreter puts on us. I look forward to ripping out the eval::evaluate(...) and sp_xxx interpreter functions.
19:55:47
karlosz
yeah, that's what i am trying to do. the problem is interleaving the defaulting code, so not everything can be combined into one bytecode instruction
19:56:19
karlosz
i'll try to get the single entry point model working first with &rest and &key then see what opportunities there are
19:59:38
karlosz
actually teaching the vm how to tell where the flow came from may be more complicated though
20:01:54
karlosz
it would have to be something like that, except we can't have a small fixed bound for how many branches to keep, since we actually need it or correctness, not just prediction
20:01:56
drmeister
I'm just tossing out cheap ideas - I'm not doing the hard work of implementing them.
20:55:46
drmeister
yitzi: It looks like the Ubuntu cando build failed because of a spurious file descriptor problem.
22:39:17
drmeister
yitzi: On my M1 Macbook Pro I did `./koga --deep-clean` and then `ninja -C build` and I'm getting that missing symbol ON-REMOVE error.
22:47:49
yitzi
Yes. `jupyter-labextension install -y --no-build @jupyter-widgets/jupyterlab-sidecar && jupyter-labextensions update --all`
22:48:32
yitzi
Meant `jupyter-labextension install -y --no-build @jupyter-widgets/jupyterlab-sidecar && jupyter-labextension update --all`
22:49:32
drmeister
I should add this to the documentation wherever we use jupyter-labextension - correct?
22:58:11
yitzi
I updated the readme on the cando repo. Did they have instructions in the that google doc? if so then yes that needs to be updated.
23:12:44
yitzi
For show I've added some details to its docstring. You can see some examples in demo 5.
23:17:38
yitzi
For reference: https://github.com/cando-developers/cando/blob/32ee982bb5809e96614713e5877354c33e88a0df/src/lisp/leap/commands.lisp#L82-L97
23:18:55
karlosz
more or less settled on a scheme for &key that seems to be compact in bytecode. updated the VM page for that
0:12:45
yitzi
You have to wait for all jobs to fail or end. Then there is a restart button in the upper right hand corner https://i.imgur.com/pyUuJ2d.png
0:39:49
drmeister
::notify karlosz I just realized I'd need to expose stack manipulation functions, closure slot accessing functions, and multiple-value accessing functions if we want to implement the VM in Common Lisp for testing. Should I?