mrkeyoor.com_
Thu 29 Oct 05:31 UTC
Open Source3 min read

Hoot 0.10.0 adds R6RS library versioning for Scheme on the web

Hoot expands its Scheme library support, but its versioned manual still warns of partial R6RS coverage and runtime costs. Here is what to check before a browser port.

Spritely Institute released Hoot 0.10.0 on October 28, adding library versioning for R6RS compatibility to its Scheme-to-WebAssembly compiler. The release notes also list new Scheme modules. For developers moving Scheme code into browsers, that expands the available library surface, though the versioned manual still describes only partial R6RS support.

Hoot is built on GNU Guile and compiles Scheme programs to run on the web. Its project page lists R7RS-small and a subset of Guile Scheme as supported. Those boundaries matter when deciding whether an existing program is a plausible port.

More libraries, with a compatibility boundary

Version 0.10.0 adds modules including (rnrs hashtables) and (rnrs io ports). Its string-library and integer-bit-library implementations, SRFI-13 and SRFI-60, are explicitly partial, according to the announcement.

The 0.10.0 status page says Hoot's API remains unstable. Maximum Guile compatibility is a longer-term goal. A sensible porting check therefore starts with the modules and procedures your program actually imports, before committing to a browser interface. An added module name alone doesn't establish that every operation your code needs is implemented.

There are execution costs to consider, too. The same manual explains that Hoot uses an explicitly managed stack to implement Guile's delimited continuations because WebAssembly 3.0 cannot capture stack frames. It says this adds runtime overhead in both time and space. That is a documented limitation, rather than a performance result we measured.

A browser build includes JavaScript support

The versioned deployment guide documents this bundling command:

hoot compile --bundle -o hello.wasm hello.scm

Given a Scheme source file named hello.scm, the command copies support files alongside the compiled binary, including reflect.js and reflect.wasm. The guide also requires JavaScript to load the program. If you're planning deployment, account for those files and the bootstrap code alongside the Wasm artifact. We reviewed the documentation; we did not compile this example or inspect browser output.

For an adoption decision, watch Hoot's documented compatibility boundary and the WebAssembly stack-switching support it needs to replace its explicit-stack workaround. The manual makes that migration conditional on support arriving in Node.js and all major browsers. Until then, test a representative program's behavior and resource use before relying on broader Scheme compatibility.

Sources

  1. Hoot 0.10.0 released!
  2. Hoot: Scheme on WebAssembly
  3. Guile Hoot 0.10.0: Status
  4. Guile Hoot 0.10.0: Web deployment