# scheme

Scheme is a general-purpose programming language in the Lisp family, supporting functional and other programming paradigms.

This is one page of public article previews, not the complete archive. Follow Next page to continue. Summaries are not the original full articles.

## wastrel milestone: full hoot support, with generational gc as a treat

DevFeed: [wastrel milestone: full hoot support, with generational gc as a treat](<https://devfeed.tech/articles/wastrel-milestone-full-hoot-support-with-generational-gc-as-a-treat-35036.md>)

Original publisher: [Read original article](<https://wingolog.org/archives/2026/04/09/wastrel-milestone-full-hoot-support-with-generational-gc-as-a-treat>)

Author: Andy Wingo

Published: 2026-04-09T13:48:04Z

Content type: article

Language: en

Sources: [wingolog](<https://devfeed.tech/sources/wingolog.md>)

Topics: [WebAssembly](<https://devfeed.tech/topics/web-assembly.md>), [scheme](<https://devfeed.tech/topics/scheme.md>), [toolchain](<https://devfeed.tech/topics/toolchain.md>), [gcc](<https://devfeed.tech/topics/gcc.md>)

Tags: [binaries](<https://devfeed.tech/tags/binaries.md>), [garbage-collection](<https://devfeed.tech/tags/garbage-collection.md>), [gc](<https://devfeed.tech/tags/gc.md>), [gcc](<https://devfeed.tech/tags/gcc.md>), [hoot](<https://devfeed.tech/tags/hoot.md>), [optimization](<https://devfeed.tech/tags/optimization.md>), [repl](<https://devfeed.tech/tags/repl.md>), [scheme](<https://devfeed.tech/tags/scheme.md>), [spidermonkey](<https://devfeed.tech/tags/spidermonkey.md>), [toolchain](<https://devfeed.tech/tags/toolchain.md>), [treats](<https://devfeed.tech/tags/treats.md>), [v8](<https://devfeed.tech/tags/v8.md>), [wasm](<https://devfeed.tech/tags/wasm.md>), [wastrel](<https://devfeed.tech/tags/wastrel.md>), [web](<https://devfeed.tech/tags/web.md>), [webassembly](<https://devfeed.tech/tags/webassembly.md>)

### AI overview

The article describes a Wastrel milestone: compiling WebAssembly files produced by the Hoot Scheme toolchain into native binaries, including a console-based read-eval-print loop. It covers the build process, runtime modules, binary size, dependencies, and initial performance observations.

### Source excerpt

Hear ye, hear ye: Wastrel and Hoot means REPL! Which is to say, Wastrel can now make native binaries out of WebAssembly files as produced by the Hoot Scheme toolchain, up to and including a full read-eval-print loop. Like the REPL on the Hoot web page, but instead of requiring a browser, you can just run it on your console. Amazing stuff! try it at home First, we need the latest Hoot. Build it from source, then compile a simple REPL: echo '(import (hoot repl)) (spawn-repl)' > repl.scm ./pre-inst-env hoot compile -fruntime-modules -o repl.wasm repl.scm This takes about a minute. The resulting wasm file has a pretty full standard library including a full macro expander and evaluator. Normally Hoot would do some aggressive tree-shaking to discard any definitions not used by the program, but with a REPL we don't know what we might need. So, we pass -fruntime-modules to instruct Hoot to record all modules and their bindings in a central registry, so they can be looked up at run-time. This results in a 6.6 MB Wasm file; with tree-shaking we would have been at 1.2 MB. Next, build Wastrel from source, and compile our new repl.wasm: wastrel compile -o repl repl.wasm This takes about 5 minutes on my machine: about 3 minutes to generate all the C, about 6.6MLOC all in all, split into a couple hundred files of about 30KLOC each, and then 2 minutes to compile with GCC and link-time optimization (parallelised over 32 cores in my case). I have some ideas to golf the first part down a bit, but the the GCC side will resist improvements. Finally, the moment of truth: $ ./repl Hoot 0.8.0 Enter `,help' for help. (hoot user)> "hello, world!" => "hello, world!" (hoot user)> statics When I first got the REPL working last week, I gasped out loud: it's alive, it's alive!!! Now that some days have passed, I am finally able to look a bit more dispassionately at where we're at. Firstly, let's look at the compiled binary itself. By default, Wastrel passes the -g flag to GCC, which results in bi

## Wastrel Compiles Hoot Scheme-to-WebAssembly Output

DevFeed: [Wastrel Compiles Hoot Scheme-to-WebAssembly Output](<https://devfeed.tech/articles/wastrelly-wabbits-35034.md>)

Original publisher: [Read original article](<https://wingolog.org/archives/2026/03/31/wastrelly-wabbits>)

Author: Andy Wingo

Published: 2026-03-31T20:34:23Z

Content type: article

Language: en

Sources: [wingolog](<https://devfeed.tech/sources/wingolog.md>)

Topics: [WebAssembly](<https://devfeed.tech/topics/web-assembly.md>), [Compiler](<https://devfeed.tech/topics/compiler.md>), [scheme](<https://devfeed.tech/topics/scheme.md>)

Tags: [accidentally-quadratic](<https://devfeed.tech/tags/accidentally-quadratic.md>), [aot](<https://devfeed.tech/tags/aot.md>), [bigint](<https://devfeed.tech/tags/bigint.md>), [bignums](<https://devfeed.tech/tags/bignums.md>), [compiler](<https://devfeed.tech/tags/compiler.md>), [compilers](<https://devfeed.tech/tags/compilers.md>), [exception-handling](<https://devfeed.tech/tags/exception-handling.md>), [exceptions](<https://devfeed.tech/tags/exceptions.md>), [gc](<https://devfeed.tech/tags/gc.md>), [gcc](<https://devfeed.tech/tags/gcc.md>), [gmp](<https://devfeed.tech/tags/gmp.md>), [hoot](<https://devfeed.tech/tags/hoot.md>), [igalia](<https://devfeed.tech/tags/igalia.md>), [library](<https://devfeed.tech/tags/library.md>), [maps](<https://devfeed.tech/tags/maps.md>), [precision](<https://devfeed.tech/tags/precision.md>), [scheme](<https://devfeed.tech/tags/scheme.md>), [standard](<https://devfeed.tech/tags/standard.md>), [tail-calls](<https://devfeed.tech/tags/tail-calls.md>), [wasm](<https://devfeed.tech/tags/wasm.md>), [wastrel](<https://devfeed.tech/tags/wastrel.md>), [webassembly](<https://devfeed.tech/tags/webassembly.md>), [whippet](<https://devfeed.tech/tags/whippet.md>)

### AI overview

The article describes recent work on Wastrel, an ahead-of-time WebAssembly compiler, including compiling output from the Hoot Scheme-to-Wasm compiler. It covers implementing bignum operations with mini-gmp and updating Hoot to use standardized WebAssembly exception handling.

### Source excerpt

Good day! Today (tonight), some notes on the last couple months of Wastrel, my ahead-of-time WebAssembly compiler. Back in the beginning of February, I showed Wastrel running programs that use garbage collection, using an embedded copy of the Whippet collector, specialized to the types present in the Wasm program. But, the two synthetic GC-using programs I tested on were just ported microbenchmarks, and didn't reflect the output of any real toolchain. In this cycle I worked on compiling the output from the Hoot Scheme-to-Wasm compiler. There were some interesting challenges! bignums When I originally wrote the Hoot compiler, it targetted the browser, which already has a bignum implementation in the form of BigInt, which I worked on back in the day. Hoot-generated Wasm files use host bigints via externref (though wrapped in structs to allow for hashing and identity). In Wastrel, then, I implemented the imports that implement bignum operations: addition, multiplication, and so on. I did so using mini-gmp, a stripped-down implementation of the workhorse GNU multi-precision library. At some point if bignums become important, this gives me the option to link to the full GMP instead. Bignums were the first managed data type in Wastrel that wasn't defined as part of the Wasm module itself, instead hiding behind externref, so I had to add a facility to allocate type codes to these "host" data types. More types will come in time: weak maps, ephemerons, and so on. I think bignums would be a great proposal for the Wasm standard, similar to stringref ideally (sniff!), possibly in an attenuated form. exception handling Hoot used to emit a pre-standardization form of exception handling, and hadn't gotten around to updating to the newer version that was standardized last July. I updated Hoot to emit the newer kind of exceptions, as it was easier to implement them in Wastrel that way. Some of the problems Chris Fallin contended with in Wasmtime don't apply in the Wastrel case: sinc

## Using AI to aid color scheme migrations

DevFeed: [Using AI to aid color scheme migrations](<https://devfeed.tech/articles/using-ai-to-aid-color-scheme-migrations-37678.md>)

Original publisher: [Read original article](<https://carlosbecker.com/posts/ai-colorschemes/>)

Author: Carlos Alexandro Becker

Published: 2024-10-31T00:00:00Z

Content type: tutorial

Language: en

Sources: [Carlos Becker](<https://devfeed.tech/sources/carlos-becker.md>)

Topics: [Artificial Intelligence](<https://devfeed.tech/topics/ai.md>), [color](<https://devfeed.tech/topics/color.md>), [scheme](<https://devfeed.tech/topics/scheme.md>), [Claude](<https://devfeed.tech/topics/claude.md>), [dotfiles](<https://devfeed.tech/topics/dotfiles.md>), [Terminal](<https://devfeed.tech/topics/terminal.md>), [Command-line interface](<https://devfeed.tech/topics/cli.md>)

Tags: [ai](<https://devfeed.tech/tags/ai.md>), [claude](<https://devfeed.tech/tags/claude.md>), [code](<https://devfeed.tech/tags/code.md>), [color](<https://devfeed.tech/tags/color.md>), [command-line](<https://devfeed.tech/tags/command-line.md>), [fzf](<https://devfeed.tech/tags/fzf.md>), [scheme](<https://devfeed.tech/tags/scheme.md>), [terminal](<https://devfeed.tech/tags/terminal.md>)

### AI overview

A short practical post about using AI, especially Claude, to migrate color themes across dotfiles and developer tools. It demonstrates adapting a Catppuccin fzf theme to Gruvbox and suggests refactoring existing theme files with editor or command-line AI tools.

### Source excerpt

Recently I found a good use case for AI when migrating my dotfiles to another theme. This is a short post about it.

## Key Switching in LWE

DevFeed: [Key Switching in LWE](<https://devfeed.tech/articles/key-switching-in-lwe-40456.md>)

Original publisher: [Read original article](<https://www.jeremykun.com/2022/08/29/key-switching-in-lwe/>)

Published: 2022-08-29T08:00:00Z

Content type: tutorial

Language: en

Sources: [Jeremy Kun](<https://devfeed.tech/sources/jeremy-kun.md>)

Topics: [Encryption](<https://devfeed.tech/topics/encryption.md>), [Cryptography](<https://devfeed.tech/topics/cryptography.md>), [scheme](<https://devfeed.tech/topics/scheme.md>)

Tags: [cryptography](<https://devfeed.tech/tags/cryptography.md>), [decrypt](<https://devfeed.tech/tags/decrypt.md>), [encryption](<https://devfeed.tech/tags/encryption.md>), [gadget-decomposition](<https://devfeed.tech/tags/gadget-decomposition.md>), [gaussian](<https://devfeed.tech/tags/gaussian.md>), [homomorphic-encryption](<https://devfeed.tech/tags/homomorphic-encryption.md>), [learning-with-errors](<https://devfeed.tech/tags/learning-with-errors.md>), [mathematics](<https://devfeed.tech/tags/mathematics.md>), [modulus-switching](<https://devfeed.tech/tags/modulus-switching.md>), [real-analysis](<https://devfeed.tech/tags/real-analysis.md>), [secret](<https://devfeed.tech/tags/secret.md>)

### AI overview

This tutorial explains key switching in the LWE encryption scheme: transforming a ciphertext encrypted under one secret key into a ciphertext under another without knowing either key. It introduces the key-switching key, shows why the naïve approach causes excessive error growth, and explains how gadget decomposition reduces that error.

### Source excerpt

Last time we covered an operation in the LWE encryption scheme called modulus switching, which allows one to switch from one modulus to another, at the cost of introducing a small amount of extra noise, roughly $\sqrt{n}$, where $n$ is the dimension of the LWE ciphertext. This time we'll cover a more sophisticated operation called key switching, which allows one to switch an LWE ciphertext from being encrypted under one secret key to another, without ever knowing either secret key.

## (An ((Even Better) Lisp) Interpreter (in Python))

DevFeed: [(An ((Even Better) Lisp) Interpreter (in Python))](<https://devfeed.tech/articles/an-even-better-lisp-interpreter-in-python-40573.md>)

Original publisher: [Read original article](<http://norvig.com/lispy2.html>)

Published: 2010-10-05T00:00:00Z

Content type: tutorial

Language: en

Sources: [Peter Norvig](<https://devfeed.tech/sources/peter-norvig.md>)

Topics: [Python](<https://devfeed.tech/topics/python.md>), [Lisp](<https://devfeed.tech/topics/lisp.md>), [scheme](<https://devfeed.tech/topics/scheme.md>), [implementation](<https://devfeed.tech/topics/implementation.md>)

Tags: [class](<https://devfeed.tech/tags/class.md>), [interpreter](<https://devfeed.tech/tags/interpreter.md>), [lisp](<https://devfeed.tech/tags/lisp.md>), [python](<https://devfeed.tech/tags/python.md>), [repl](<https://devfeed.tech/tags/repl.md>)

### AI overview

This article presents an improved version of Lispy, a Lisp interpreter implemented in Python. It adds input ports for reading complete expressions across multiple lines, improved error handling, macro examples, and a non-recursive evaluator implemented with a loop and mutable evaluation state.

### Source excerpt

A new version of Lispy (Lisp interpreter in Python). I released an earlier version on Sept. 30th, but this version is improved.

## (How to Write a (Lisp) Interpreter (in Python))

DevFeed: [(How to Write a (Lisp) Interpreter (in Python))](<https://devfeed.tech/articles/how-to-write-a-lisp-interpreter-in-python-40572.md>)

Original publisher: [Read original article](<http://norvig.com/lispy.html>)

Published: 2010-09-30T00:00:00Z

Content type: tutorial

Language: en

Sources: [Peter Norvig](<https://devfeed.tech/sources/peter-norvig.md>)

Topics: [Lisp](<https://devfeed.tech/topics/lisp.md>), [Python](<https://devfeed.tech/topics/python.md>), [Programming](<https://devfeed.tech/topics/programming.md>), [scheme](<https://devfeed.tech/topics/scheme.md>), [compilers](<https://devfeed.tech/topics/compilers.md>)

Tags: [compilers](<https://devfeed.tech/tags/compilers.md>), [how-to](<https://devfeed.tech/tags/how-to.md>), [interpreter](<https://devfeed.tech/tags/interpreter.md>), [lisp](<https://devfeed.tech/tags/lisp.md>), [programming-languages](<https://devfeed.tech/tags/programming-languages.md>), [python](<https://devfeed.tech/tags/python.md>), [semantics](<https://devfeed.tech/tags/semantics.md>), [syntax](<https://devfeed.tech/tags/syntax.md>)

### AI overview

This tutorial explains how to implement computer-language interpreters in general and presents Lispy, an interpreter for most of Scheme written in Python 3. It introduces Scheme syntax and semantics and compares its simplicity with Java and Python.

### Source excerpt

A Lisp interpreter in 90 lines of Python

## Turn on debug output in SVN

DevFeed: [Turn on debug output in SVN](<https://devfeed.tech/articles/turn-on-debug-output-in-svn-35477.md>)

Original publisher: [Read original article](<https://darkcoding.net/software/turn-on-debug-output-in-svn/>)

Author: Graham King

Published: 2009-05-07T23:02:38Z

Content type: tutorial

Language: en

Sources: [Graham King](<https://devfeed.tech/sources/graham-king.md>)

Topics: [debug](<https://devfeed.tech/topics/debug.md>), [client](<https://devfeed.tech/topics/client.md>), [Authentication](<https://devfeed.tech/topics/authentication.md>), [repo](<https://devfeed.tech/topics/repo.md>), [scheme](<https://devfeed.tech/topics/scheme.md>)

Tags: [authentication](<https://devfeed.tech/tags/authentication.md>), [client](<https://devfeed.tech/tags/client.md>), [debug](<https://devfeed.tech/tags/debug.md>), [repo](<https://devfeed.tech/tags/repo.md>), [scheme](<https://devfeed.tech/tags/scheme.md>), [software](<https://devfeed.tech/tags/software.md>), [upgrade](<https://devfeed.tech/tags/upgrade.md>)

### AI overview

A troubleshooting guide explains how to enable Subversion debug output when an SVN client repeatedly requests credentials after a desktop and server upgrade. The reported cause involves an Apache AuthDigestDomain configuration that requires a scheme, although the relevant commands and full configuration values are missing from the supplied text.

### Source excerpt

After a desktop and server upgrade, my subversion client stopped working. I am using Digest authentication, and it kept asking me for the username and password. Wireshark showed me that the SVN client wasn't sending the Authentication header. To find out more, I turned on Subversion's debug output. Here's how you do it: Edit Add this line at the end: That showed me this error: This means that the path I was requesting (the root of the repo) was not considered inside the I had set in Apache.

## JScheme

DevFeed: [JScheme](<https://devfeed.tech/articles/jscheme-40571.md>)

Original publisher: [Read original article](<http://norvig.com/jscheme.html>)

Published: 2005-08-08T00:00:00Z

Content type: tutorial

Language: en

Sources: [Peter Norvig](<https://devfeed.tech/sources/peter-norvig.md>)

Topics: [Java](<https://devfeed.tech/topics/java.md>), [scheme](<https://devfeed.tech/topics/scheme.md>), [Programming language](<https://devfeed.tech/topics/programming-language.md>), [implementation](<https://devfeed.tech/topics/implementation.md>), [Programming](<https://devfeed.tech/topics/programming.md>)

Tags: [implementation](<https://devfeed.tech/tags/implementation.md>), [java](<https://devfeed.tech/tags/java.md>), [language](<https://devfeed.tech/tags/language.md>), [programming](<https://devfeed.tech/tags/programming.md>), [programming-language](<https://devfeed.tech/tags/programming-language.md>), [scheme](<https://devfeed.tech/tags/scheme.md>)

### AI overview

This page documents Jscheme, an implementation of the Scheme programming language in Java. It describes version 1.4, its compatibility with R4RS Scheme, known limitations, and planned features such as improved error handling, Java integration, multithreading, web access, GUI support, and R5RS support.

### Source excerpt

An implementation of the Scheme programming language in Java.