zemo-g/rail
GitHub: zemo-g/rail
一种零 C 依赖的自托管系统语言,内置纯语言实现的 TLS 1.3 与 X.509 证书链验证,支持 ARM64、x86_64 和 WASM 四种编译后端。
Stars: 9 | Forks: 0
Rail
一种只讲 TLS 的自托管系统语言。
零 C 依赖。ARM64 汇编编写的 GC。纯 Rail 实现的 HTTPS。
快速开始 ·
Rail 的功能 ·
为什么选择 Rail ·
更新日志 ·
发布版本
Rail 可以自编译。其编译器——共 4,687 行 Rail 代码——能生成一个 729 KB 的 ARM64 二进制文件,该文件可再次编译编译器并达到字节完全一致的不动点。运行时中没有 C,二进制文件中没有 libc。垃圾回收器是由 ARM64 汇编编写的。自 v3.0.0 起,TLS 1.3 客户端也由 Rail 编写:只需 `import "stdlib/anthropic_client.rail"`,你的程序就能与 `api.anthropic.com` 进行 HTTPS 通信,全程零 OpenSSL、零 curl、零 socat 依赖。
```
./rail_native self && cp /tmp/rail_self ./rail_native
./rail_native self && cmp rail_native /tmp/rail_self # byte-identical
./rail_native test # 116/116
```
## 快速开始
```
git clone https://github.com/zemo-g/rail
cd rail
./rail_native run examples/hello.rail
```
Apple Silicon (ARM64 macOS) 是主要目标平台;同时支持 Linux ARM64、Linux x86_64 和 WASM 后端。
```
./rail_native
# compile to /tmp/rail_out
./rail_native run # compile + execute
./rail_native test # run the 116-test suite
./rail_native self # self-compile, fixed point
./rail_native x86 # cross-compile to Linux x86_64
./rail_native linux # cross-compile to Linux ARM64
```
## Rail 的功能
### 1. 自编译,字节一致
```
./rail_native self -- 4,687 lines of Rail →
-- a 729 KB ARM64 binary
cp /tmp/rail_self ./rail_native
./rail_native self -- that binary compiles the
-- compiler again
cmp rail_native /tmp/rail_self -- and the output is identical
```
GC、分配器和运行时支持是嵌入在编译器本身的 ARM64 汇编代码。无需 `gcc`,无需 `libc`,无需链接器脚本——只需 `as` 和 `ld`。
### 2. 原生支持 HTTPS ✨ *v3.0.0 新增*
```
import "stdlib/anthropic_client.rail"
main =
let (status, reply) = anthropic_chat
"claude-haiku-4-5-20251001"
"Reply with exactly: hello from pure rail"
40
"/Users/me/.fleet/anthropic_key"
let _ = print reply
0
-- → "hello from pure rail"
-- → 6.9 s wall. Full TLS 1.3: x25519 ECDHE, ECDSA-P256 cert verify,
-- SAN hostname match, validity period, ChaCha20-Poly1305 record
-- layer. Zero OpenSSL, zero curl, zero socat.
```
针对 `api.anthropic.com` 的完整 X.509 证书链(叶证书 → WE1 中间证书 → GTS Root R4 根证书)端到端验证至 macOS `/etc/ssl/cert.pem` 信任库——叶证书使用 ECDSA-P256-SHA256,根证书边缘使用 ECDSA-P384-SHA384,全部在 Rail 中验证完成。
### 3. 训练其专有的 AI,由编译器验证
```
-- The self-training loop, in one flow:
-- LLM generates Rail → rail_native compiles (the oracle) →
-- passes harvested → training data feeds next round
```
编译器充当适应度函数。能够编译的程序成为训练数据;不能编译的程序则作为梯度。三个独立的谱系(Gemma 上的 LoRA、Metal-GPU MLP、PCFG-REINFORCE)均使用相同的编译器作为二进制验证器。PCFG 谱系在 30 个滴答内达到了 92% 的严格通过率。
## 为什么选择 Rail
- **零 C 传递依赖。** 种子二进制文件仅需要 `as` + `ld` + 内核。没有 glibc。没有 OpenSSL。完全没有运行时 C——GC 是位于编译器内部的 300 行 ARM64 汇编代码。
- **字节一致的自编译。** `./rail_native self` 生成的输出与生成它的二进制文件完全一致。编译器自身的源代码就是回归测试套件。
- **编译器是事实的来源。** 训练循环、测试、站点生成、HTTPS 客户端——它们全部由你克隆的同一个二进制文件编译。只要能编译,就能运行。
- **生产环境范围精确且诚实。** Rail v3.0.0 只随附其使用的密码学原语(ChaCha20-Poly1305、x25519、SHA-256/384/512、ECDSA-P256/P384、RSA-PSS/PKCS1),绝无多余。每个原语均经过 NIST 或 RFC 向量验证。
- **四大后端与语言相伴。** macOS ARM64、Linux ARM64 (Pi Zero 2 W)、Linux x86_64 和 WASM——同一个编译器即可交叉编译到所有平台。
## 语言特性
```
-- Functions, pattern matching, ADTs
type Expr = | Num x | Add a b | Mul a b
eval e = match e
| Num x -> x
| Add a b -> eval a + eval b
| Mul a b -> eval a * eval b
main = let _ = print (show (eval (Add (Num 3) (Mul (Num 4) (Num 5))))) in 0
-- → 23
```
```
-- Higher-order, pipes, real I/O
gt3 x = x > 3
inc x = x + 1
main =
let _ = print (show (fold (\a b -> a + b) 0 (range 101))) -- 5050
let _ = print (show (length (filter gt3 [1,2,3,4,5,6]))) -- 3
let _ = write_file "/tmp/out.txt" "hello"
let _ = print (read_file "/tmp/out.txt") -- hello
0
```
```
-- Native floats (unboxed IEEE 754 in ARM64 d-registers)
-- Effect handlers (setjmp/longjmp non-local error recovery)
-- WASM output (closures + ADTs + pattern matching in the browser)
-- Metal GPU IR (JIT-compiled GPU kernels from Rail AST)
```
## 工作原理
| 组件 | 实现方式 | 详情 |
|---|---|---|
| **词法分析器 + 解析器** | Rail | Tokenizer + 递归下降 AST 构建器,约 900 行 |
| **类型检查器** | Rail | 前向推断,穷尽性警告 |
| **代码生成** | Rail | 遍历 AST,直接发射 ARM64 / x86_64 / WASM 代码 |
| **分配器** | ARM64 assembly | 512 MB 凸区域 + 空闲列表 + malloc 回退机制 |
| **GC** | ARM64 assembly | 保守标记-清除。扫描栈帧,追踪带标签的对象,清除至空闲列表。 |
| **标记指针** | 内联 | 整数:`(v << 1) \| 1`。堆:原始指针。标签位 0 用于区分。 |
| **运行时浮点数** | d-registers | 未装箱的 IEEE 754。直接使用 `fadd`/`fmul`,无堆装箱。相比装箱方式约 10 倍速度提升。 |
尾递归循环的性能可媲美 C 语言的 `-O2`(每次迭代 5 条指令)。完整的架构记录在 [`CHANGELOG.md`](CHANGELOG.md) 中——请参阅 v2.0.0 了解编译器/运行时详情;v3.0.0 了解 TLS 协议栈详情。
## 发布版本
### v3.0.0 — 2026-04-18 — *Rail 支持 TLS*
完整的纯 Rail 实现的 TLS 1.3 协议栈 + X.509 证书链验证 + HTTPS 客户端。`~/.fleet/tls_proxies.sh` 中的 socat 守护进程已不再出现在任何关键路径上。
**在发布当天即上线并用于生产环境:**
```
anthropic_chat "claude-haiku-4-5-20251001" "Reply with exactly: hello from pure rail"
→ HTTP 200, "hello from pure rail" (6.9 s, pure Rail → Anthropic)
slack_post_text "D0ATHQ1BQD7" "v3.0.0 smoke: pure-Rail TLS"
→ ok=true, HTTP 200 (1.0 s, pure Rail → Slack)
https_get_url "https://www.amazon.com/"
→ HTTP 200 with set-cookie, x-amz-rid (4.0 s, RSA chain validated
to DigiCert Global Root G2)
```
横跨 16 个新的 stdlib 模块,包含约 3,800 行新的纯 Rail 密码学及 TLS 代码。每个原语均经过 NIST 或 RFC 向量验证。22 个纯 Rail TLS 测试全部通过。自编译的两次迭代保持字节完全一致。
| 层级 | 模块 |
|---|---|
| Hash / MAC | `sha256`, `sha512` (SHA-384/512), `hmac`, `hkdf` |
| 对称加密 | `chacha20`, `poly1305`, `aead` (ChaCha20-Poly1305) |
| 公钥 | `x25519`, `ecdsa_p256`, `ecdsa_p384`, `rsa_pss` (PSS + PKCS1) |
| 大数 | `bignum_n` — 参数化的 n-limb 算术 |
| X.509 / PKI | `asn1`, `b64`, `pem` (来自 `/etc/ssl/cert.pem` 的 128 个根证书) |
| TLS 1.3 | `tls13`, `tls13_hs`, `tls13_record`, `tls13_cert_verify`, `tls13_client`, `cert_chain`, `cert_p384` |
| 应用层 | `https_client`, `dns`, `anthropic_client`, `slack_client` |
完整发布说明:[**CHANGELOG.md**](CHANGELOG.md)。
### v2.0.0 — 2026-04-06 — *Rail 成为自我改进的系统*
ARM64 d-registers 中的原生浮点数,通过 setjmp/longjmp 实现的 effect handlers,汇编语言编写的 GC,四个后端(macOS ARM64 / Linux ARM64 / Linux x86_64 / WASM),以及三个独立的训练谱系——全部由同一个编译器作为二进制适应度函数驱动。121 次提交。92/92 测试通过。[**详情请参阅 CHANGELOG.md →**](CHANGELOG.md)。
### 历史记录
| 版本 | 日期 | 标题 |
|---|---|---|
| **v3.0.0** | 2026-04-18 | Rail 支持 TLS——纯 Rail 实现的 HTTPS,至 macOS 信任库的证书链验证 |
| **v2.23.0** | 2026-04-17 | 纯 Rail HTTP/1.1 客户端 + `char_from_int` |
| **v2.0.0** | 2026-04-06 | 自我改进的飞轮,原生浮点数,effect handlers,汇编中的 GC |
| **v1.5** | 2026-03-25 | 媲美 C 的性能,hyperagent,DNA 训练 |
| **v1.4** | 2026-03-22 | 汇编中的 GC,嵌套 lambda,穷尽性 |
| **v1.3** | 2026-03-21 | MCP server,32层 LoRA,开源 |
| **v1.1** | 2026-03-20 | Metal GPU,WASM,x86_64,fibers,飞轮 |
| **v1.0** | 2026-03-17 | 自托管。删除 Rust。67 个测试。 |
## 诚实的局限性
以下是 Rail v3.0.0 **做不了**的事情,以便你不会在遇到时感到惊讶:
- TLS 仅随附一个密码套件(`TLS_CHACHA20_POLY1305_SHA256`),一个 ECDHE 组(`x25519`),以及三个签名算法(`rsa_pss_rsae_sha256 | ecdsa_secp256r1_sha256 | rsa_pkcs1_sha256`)。适用于现代 CDN 前端;传统服务器可能不支持。
- 不支持 TLS 会话恢复,不支持 0-RTT,不支持客户端证书。
- 不提供恒定时间或侧信道抵抗保证。这不是 OpenSSL;请勿将其交付给国防客户。
- 每个 HTTPS 连接的挂钟时间为 5-8 秒(主要由公钥验证时间主导)。适用于一次性 API 调用,但不适用于 HTTP 代理。
- 响应体通过 `join ""` 拼装——时间复杂度为 O(N²),在约 64 KB 处触及性能上限。流式处理将包含在 v3.1 中。
- Rail 不是 ANSI 标准化的。没有形式化的类型系统或可靠性证明。使用它是因为它快速、小巧且诚实——而不是因为它像 Haskell 那样。
## 许可证
[Business Source License 1.1](LICENSE)。免费用于非生产用途;附加使用授权涵盖了研究、教育和个人项目。将于 2030-04-06 转换为 Apache 2.0。
## 备注标签:Anthropic客户端, ARM64, BSL 1.1, HTTPS, TLS 1.3, X.509证书验证, 内存安全, 内核驱动, 加密通信, 垃圾回收器, 快速连接, 标准库, 汇编语言, 系统编程语言, 编程语言, 编译原理, 网络协议, 网络安全, 自举编译器, 自托管, 隐私保护, 零C依赖, 高安全性语言