libera/#clasp - IRC Chatlog
Search
2:10:11
Bike
for the exit stuff i made a tiny little new structure VirtualMachineStackState that includes the frame pointer, and ENTRY uses it to restore the stack pointer after a nonlocal exit
2:10:29
Bike
could it like... get reclaimed wrongly by boehm somehow... i guess not, since fib doesn't even do nonlocal exits
2:15:38
Bike
maybe there's a size_t overflowing into a stupid high number, and that's ending up in push_frame or something
2:41:25
drmeister
I do say this though: static constexpr size_t MaxStackWords = 16384; // 16K words for now.
3:41:03
drmeister
I evaluate (fib 33) and print the stack for every instruction and there's no problem.
4:16:32
drmeister
I evaluate (fib 33) and the stack stays at 1000 bytes or so all the way except at the end it balloons.
5:28:33
drmeister
::notify Bike There is something deeply wrong. When I evaluate (fib 31) the evaluation goes off the rails at some point. So I'm trying to compile the following but the compiler isn't ready for it yet. I want to ID where it goes off the rails and then get udb in there to figure it out.
5:28:35
drmeister
(setf (fdefinition 'fib) (compile-to-vm::bcompile '(lambda (n cn) (setf (car cn) (+ (car cn) 1)) (format t "cn ~a~%" (car cn)) (if (eql n 1) 0 (if (eql n 2) 1 (+ (fib (- n 1) cn) (fib (- n 2) cn)))))))
9:23:38
karlosz
Bike, drmeister: i just implemented cell elision so now we don't make any unnecessary cells and no longer cons for stuff like fib. its pretty much as optimal as we can get for 1 pass at least (though the fixup logic may not be so good asymptotically speaking at the moment)
9:24:00
karlosz
also Bike i changed the order of CELL-SET's arguments in order to facilitate this, so the c++ vm will need to be modified.
12:43:28
drmeister
I print the height of the stack just inside the while (1) loop and just before the switch statement.
12:43:46
drmeister
(setf (fdefinition 'fib) (compile-to-vm::bcompile '(lambda (n) (if (eql n 1) 0 (if (eql n 2) 1 (+ (fib (- n 1)) (fib (- n 2))))))))