[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
GOOPS and fibers - need help understanding what's wrong, bug in fibers/g
From: |
Jan Wielkiewicz |
Subject: |
GOOPS and fibers - need help understanding what's wrong, bug in fibers/guile? |
Date: |
Wed, 22 Jul 2020 01:56:53 +0200 |
Hello,
I started writing my project in Guile with GOOPS and fibers (I'll
release it once it stops being a shame and starts working!), but I
encountered a problem:
The example from fibers' manual doesn't work:
(lambda ()
(spawn-fiber (lambda () (display "hey!\n")))))
It doesn't print "hey" as documented in the manual.
I use guile 3.0.4 and fibers 1.0.0 (from Guix).
I also tried making a simple proof of concept, but it doesn't seem to
do anything. I would like to understand what's wrong with my code or
report a bug, if this is the case. No errors, warnings, syntax errors,
just silence.
My code:
(define-module (blocks block)
#:use-module (fibers)
#:use-module (fibers channels)
#:use-module (oop goops)
#:use-module (srfi srfi-9) ;; records
#:export (<peer>
connect-peers
send-message
handle-message
start-listening))
(define-class <peer> ()
(input #:init-form '() #:getter get-input
#:setter set-input #:init-keyword #:input)
(output #:init-form '() #:getter get-output
#:setter set-output #:init-keyword #:output))
;; Only connection, no messaging started.
(define-method (connect-peers (p1 <peer>) (p2 <peer>))
(let ((p1-p2 (make-channel)) ;; p1 to p2
(p2-p1 (make-channel))) ;; p2 to p1
(set-input p1 p2-p1)
(set-output p1 p1-p2)
(set-input p2 p1-p2)
(set-output p2 p2-p1)))
(define-method (send-message (p <peer>) msg)
(put-message (get-output p) msg))
(define-method (handle-message (p <peer>))
(let loop ()
(define msg (get-message (get-input p)))
(match (pk msg)
('ping (send-message p 'pong)))
(loop)))
(define-method (start-listening (p1 <peer>) (p2 <peer>))
(run-fibers
(lambda ()
(spawn-fiber
(lambda ()
(connect-peers p1 p2)
(handle-message p1)
(send-message p1 'ping)
(handle-message p2))))))
I run this in repl:
(define p1 (make <peer>))
(define p2 (make <peer>))
(start-listening p1 p2)
-----
Thanks in advance,
Jan Wielkiewicz
- GOOPS and fibers - need help understanding what's wrong, bug in fibers/guile?,
Jan Wielkiewicz <=