Skip to content
/ fibers Public

Concurrent ML-like concurrency for Guile

License

LGPL-3.0, GPL-3.0 licenses found

Licenses found

LGPL-3.0
COPYING.LESSER
GPL-3.0
COPYING
Notifications You must be signed in to change notification settings

wingo/fibers

Folders and files

NameName
Last commit message
Last commit date

Latest commit

76211c1 · Dec 22, 2022
Dec 18, 2022
Jun 18, 2017
Dec 12, 2022
Dec 12, 2022
Dec 18, 2022
Dec 21, 2022
Nov 23, 2022
Dec 12, 2022
Dec 12, 2022
Dec 18, 2022
Jul 3, 2016
Jul 3, 2016
Jul 3, 2016
Jul 3, 2016
Jul 3, 2016
Dec 21, 2022
Dec 22, 2022
Sep 11, 2016
Nov 23, 2022
Jan 8, 2017
Jul 3, 2016
Dec 22, 2022
Nov 23, 2022
Dec 12, 2022
Dec 22, 2022
Dec 12, 2022

Repository files navigation

Fibers

Fibers is a facility that provides Go-like concurrency for Guile Scheme, in the tradition of Concurrent ML.

GNU Guile 2.0 GNU Guile 3.0

A pasteable introduction to using Fibers

;; Paste this into your guile interpreter!

(use-modules (fibers) (fibers channels) (ice-9 match))

(define (server in out)
  (let lp ()
    (match (pk 'server-received (get-message in))
      ('ping! (put-message out 'pong!))
      ('sup   (put-message out 'not-much-u))
      (msg    (put-message out (cons 'wat msg))))
    (lp)))

(define (client in out)
  (for-each (lambda (msg)
              (put-message out msg)
              (pk 'client-received (get-message in)))
            '(ping! sup)))

(run-fibers
 (lambda ()
   (let ((c2s (make-channel))
         (s2c (make-channel)))
     (spawn-fiber (lambda () (server c2s s2c)))
     (client s2c c2s))))

If you paste the above at into a Guile REPL, it prints out:

;;; (server-received ping!)

;;; (client-received pong!)

;;; (server-received sup)

;;; (client-received not-much-u)

Contact info

Mailing List: [email protected]

Homepage: https://github.com/wingo/fibers

Download: https://github.com/wingo/fibers/releases

Manual: https://github.com/wingo/fibers/wiki/Manual

Build dependencies

Guile 2.1.7 or newer (https://www.gnu.org/software/guile/).

If you build from source you also need autoconf, automake and libtool.

Installation quickstart

Install from a release tarball using the standard autotools incantation:

./configure --prefix=/opt/guile && make && make install

Build from Git is the same, except run autoreconf -vif first.

You can run without installing, just run ./env guile.

Copying Fibers

Distribution of Fibers is under the LGPLv3+. See the COPYING and COPYING.LESSER files for more information.

Copying this file

Copyright (C) 2016 Free Software Foundation, Inc.

Copying and distribution of this file, with or without modification, are permitted in any medium without royalty provided the copyright notice and this notice are preserved.