Robin Templeton (they/them) <robin@spritely.institute>
FOSDEM 2024
We are building decentralized, secure infrastructure and standards for networked communities!
We are a 501(c)(3) non-profit research institution
Distributed, transactional programming with a security model you can understand.
"If you don't have it, you can't use it!"
More later in Christine's talk!
"Bring your whole self." — Andy Wingo
This is the update loop for a particular cellular automaton:
(define (update from to)
(do ((y 0 (+ y 1)))
((= y grid-size))
(do ((x 0 (+ x 1)))
((= x grid-size))
(let* ((t (grid-ref from x y))
(t* (cond
((= t empty) empty)
((= t cu)
(if (<= 1 (neighbors from x y) 2) ehead cu))
((= t ehead) etail)
((= t etail) cu))))
(grid-set! to x y t*)))))
Can we run it in a web browser?
Hoot provides a new compiler backend and Wasm runtime for Guile
Scheme →
Tree-IL →
CPS →
Guile Bytecode Wasm
libguile
guile-hoot
Latest Firefox and Chromium have it all!
Should be in stable releases of all major browsers soon
The good:
The bad:
(define (port? x)
(%inline-wasm '(func (param $obj (ref eq))
(result (ref eq))
(if (ref eq)
(ref.test $port (local.get $obj))
(then (ref.i31 (i32.const 17)))
(else (ref.i31 (i32.const 1)))))
x))
guild tool for hooking into build systemsscheme@(guile-user)> ,use (hoot reflect) (wasm parse)
scheme@(guile-user)> (define hoot-square
(compile-value '(lambda (x) (* x x))))
scheme@(guile-user)> hoot-square
$1 = #<hoot #<procedure>>
scheme@(guile-user)> (hoot-square 4)
$2 = 16
Learn more about Hoot:
https://spritely.institute/hoot/
Join our community forum!
https://community.spritely.institute/
Chat with us!
#spritely on irc.libera.chat