Show HN: 一种每个函数调用都会运行 Docker 容器的 Lisp
发布: (2026年2月19日 GMT+8 12:19)
2 分钟阅读
原文: Hacker News
Source: Hacker News
Docker Lisp
Docker 镜像是一段可执行代码,能够在给定输入时产生相应输出。
要求
- Docker
设置
-
构建基础镜像和内置镜像:
./scripts/build-base ./scripts/build-builtins -
运行测试(请耐心等待):
./scripts/run-tests
使用方法
求值表达式
./scripts/run eval "(cons 1 2)"
跟踪求值过程
./scripts/run --trace eval "(car (cdr (cons 1 (cons 2 (list)))))"
你也可以使用 docker stats 和 docker events 来监控求值过程。
编写并运行程序
创建一个以 docker-lisp/eval 为基础镜像并将程序作为命令提供的 Dockerfile,例如:
FROM docker-lisp/eval
CMD ["(define fact (lambda (n) (if (number-equals n 0) 1 (multiply n (fact (subtract n 1))))))", "(fact 3)"]
构建程序:
./scripts/build [name]
如果省略 name,将使用文件名。
运行已构建的程序:
./scripts/run
脚本
| 脚本 | 用途 |
|---|---|
build [name] | 将 Dockerfile 构建到 docker-lisp/ 中。默认使用文件的基名。 |
build-base | 构建基础镜像(docker-lisp/base-racket、docker-lisp/base-call)。 |
build-builtins | 构建所有内置镜像。 |
run [--trace] [--no-cleanup] [args] | 运行 docker-lisp/ 容器。 |
run-tests [--no-trace] [--rebuild-base] [prefix filter] | 运行测试套件(默认启用跟踪)。 |
clean | 终止所有 docker-lisp/* 容器并删除所有已构建的 docker-lisp/* 镜像。 |
