Hello everybody,
So I just started programming in guile. I am using raylib-guile. I have a main while-loop that handles input/drawing the scene:
(define move-blue-cube -15.0)
(while (not (WindowShouldClose))
    ;; input
   (DrawCube (make-Vector3 move-blue-cube 2.5 0.0) 1.0 5.0 32.0 BLUE))
When I run this in the repl, because of the while loop I assume, I cannot then eval (set! move-blue-cube -30.0). So I am wondering is there a way to update the repl when a while loop is running? Or should I rethink on how to organize my code, to take advantage of the repl?
             
            
              
              
              1 Like
            
            
           
          
            
            
              Guile has a coop repl for this purpose. I used it for the last lisp game jam.
You can let it output and check for input each time you go through the game loop.
(define-module (game main)
  ...
  #:use-module (system repl coop-server)
  ...
  #:export (launch-game))
(define repl #f)     ; somewhere to store the repl 
(define (load)
  "Load the game initial game state."
  ...
  (set! repl (spawn-coop-repl-server))  ; create the coop repl 
  ...)
(define (update dt)
  "Update the game state."
  (poll-coop-repl-server repl)    ; update the repl and check repl input
  ...
  )
And this allows to do the interactive development stuff. It opens a socket to connect to and allows geiser et al to connect to it.
See Cooperative REPL Servers (Guile Reference Manual) for more details.
             
            
              
              
              3 Likes
            
            
           
          
            
            
              Excellent! Thank you, I was really hoping something like this was possible. For anyone wondering here is my final setup:
(use-modules (raylib))
(use-modules (system repl coop-server))
(define repl #f)
(set! repl (spawn-coop-repl-server))
(while (not (WindowShouldClose))
  (poll-coop-repl-server repl)
  ;; logic
  )
and then:
- M-x geiser
 
- M-x geiser-eval-buffer
 
- C-u M-x connect-to-guile localhost 37146
 
I have to say this is pretty awesome- it’s like editing emacs/elisp.
             
            
              
              
              3 Likes