The idea that one can change and modify code while it is running sounds great, but I have never really gotten to the point that I understand practically how to do it in a non-trivial circumstance. As a concrete example where I think I should be able to do it, but I can’t, is when running one of the examples from the claylib
system. I am using slime/emacs and I open claylib/examples/shapes/bouncing-ball.lisp
. In slime I use (in-package :claylib/examples/bouncing-ball)
and then (main)
and I have the bouncing ball demo working fine. What I have tried to do is to change the color of ball from its current +maroon+
to some other color. I have tried editing that part of the function definition in bouncing-ball.lisp
and recompiling, but nothing changes. If I kill the running example, recompile the bouncing-ball.lisp
and then re-run main
I see the new color, so I know that I am specifying a color correctly. Would someone tell me the steps to change the ball color while it is bouncing around to help me get started on this “live” coding method? Of if they think one of the other raylib wrappers would be better for this I can change. I am just using this as a learning tool to give me some visual feedback as I make changes. Thanks.
All that happens when you recompile a function is that a new function object gets created, and the name of the function is updated to point to that new function object.
But the old function is still the one actually running. For your new function to be used, it has to be called, first. What you can usually do then, is to create a secondary function,
step
, or whatever you want to call it, and have that be called in the main loop. Then, because step will exit and be re-called every update, when you recompile it, the newstep
will be executed, too.