SailfinIO/sailfin

GitHub: SailfinIO/sailfin

Sailfin 是一门以编译时 capability/effect 检查为核心特性的自托管系统级编程语言,旨在通过显式副作用标注和 capsule 能力声明在源码层面实现严格的资源访问控制。

Stars: 6 | Forks: 0

Sailfin

Sailfin

一种具有编译时能力检查的自托管系统级语言。

网站 · 安装 · 语言规范 · 路线图 · 博客 · llms.txt

Latest release License: GPL v2 GitHub stars

## 什么是 Sailfin? Sailfin 是一种围绕显式能力构建的系统编程语言。 函数会标明它们所使用的 effect,例如 `![io]`、`![net]` 或 `![clock]`,并且 capsule 会声明它们需要哪些能力。编译器 会检查这两个层面,因此能力的使用在源码中是可见的,并且当其 超出了声明的范围时会被拒绝。 其长期目标是打造一个可用于生产环境的编译器、runtime 和 capsule 生态系统,并带有能力密封的 runtime。该仓库已经实现了 自托管:编译器是用 Sailfin 编写的,从一个发布的 seed 自举编译,并从 `runtime/sfn/` 和 `runtime/prelude.sfn` 链接 Sailfin runtime。 ## 仓库布局 - `compiler/src/` - Sailfin 编译器,使用 Sailfin 编写。 - `runtime/` - Sailfin runtime capsule,包括平台适配器、 内存、字符串、进程、时钟和并发支持。 - `capsules/sfn/` - 标准库 capsule,例如 `strings`、`json`、 `fs`、`http`、`net`、`cli`、`test` 以及面向数值/ML的 capsule。 - `compiler/tests/` - 单元测试、集成测试和端到端编译器测试。 - `examples/` - 小型的语言和库示例。 - `docs/` - 工程文档、状态矩阵、提案、性能说明 和 RCA。 - `site/` - 公共网站和面向用户的语言文档。 - `tools/mcp-server/` - 基于编译器诊断的 MCP 集成。 ## 当前能力 当前的自托管编译器支持核心语言:函数、 带有 payload 的 struct、enum、interface、type alias、array、具有部分类型推断的泛型、带有捕获的闭包、模式匹配、`Result` 和 `?`、`unsafe` / `extern fn`、原子内联函数和显式的数值类型转换。 effect 系统对 `io`、`net` 和 `clock` 进行了强制检查,包括 跨模块传播和 capsule 能力检查。所有权强制 机制目前对 owned-buffer 系列以及 affine / linear 绑定生效,而更广泛的借用检查仍在开发中。 工具链包括: - `sfn build` 和 `sfn run` - 带有结构化 JSON 诊断的 `sfn check` - `sfn fmt --check` / `sfn fmt --write` - 具有过滤、快照、并行执行和每个测试 二进制缓存功能的 `sfn test` - `sfn init`、`sfn add`、`sfn lock`、`sfn package` 和 `sfn publish` 结构化并发作为一个 v0 接口可用:`routine`、`channel`、 `spawn` / `await` 和 `parallel` 均可端到端运行,而类型化的 channel 构造器、更丰富的结果收集以及 1.0 之后的 async I/O runtime 仍在计划中。 有关详细的状态矩阵,请参阅 [`docs/status.md`](docs/status.md)。 有关语言语义,请参阅 [规范](https://sfn.dev/docs/reference/spec/)。 ## 示例 ``` struct User { id: int; name: string; } fn greet(user: User) -> string ![io] { let msg = "Hello, {{ user.name }}!"; print(msg); return msg; } test "greet produces correct output" { let u = User { id: 1, name: "Alice" }; let result = greet(u); assert(result == "Hello, Alice!"); } ``` `greet` 调用了 `print`,因此它声明了 `![io]`。如果移除该注解, `sfn check` 将报告编译时 effect 错误。如果 capsule 暴露的代码 使用了 `io`,其 `capsule.toml` 必须在 `[capabilities].required` 中包含 `io`。 ## 安装 发布版本以按操作系统/架构区分的 tarball 形式发布,其中包含 `bin/sailfin`(或在 Windows 上为 `bin/sailfin.exe`)。安装程序默认安装最新版本, 并在 Linux/macOS 上安装到 `~/.local/bin`,或在 Windows 上安装到 `%LOCALAPPDATA%\sailfin\bin`。 ### Linux / macOS ``` curl -fsSL https://raw.githubusercontent.com/SailfinIO/sailfin/main/install.sh | bash ``` 要固定特定的发布版本: ``` curl -fsSL https://raw.githubusercontent.com/SailfinIO/sailfin/main/install.sh | VERSION= bash ``` ### Windows PowerShell ``` irm https://raw.githubusercontent.com/SailfinIO/sailfin/main/install.ps1 | iex ``` 要固定特定的发布版本: ``` $env:VERSION = "" irm https://raw.githubusercontent.com/SailfinIO/sailfin/main/install.ps1 | iex ``` 发布资产遵循 `sailfin___.tar.gz` 的命名模式。 如果发布版本查找 受到限制,请设置 `GITHUB_TOKEN` 以提高 GitHub API 的速率限制。 ## 从源码构建 编译器从发布的 seed 二进制文件进行自举。`make compile` 会 在需要时获取 seed 并构建 `build/native/sailfin`。 ``` make compile # Build the self-hosted native compiler make test # Run the test suite with an existing build make check # Build as needed, build seedcheck, and run the full gate make install # Install to PREFIX/bin, defaulting to ~/.local/bin make clean # Remove packaged artifacts under dist/ ``` 编译完成后: ``` build/native/sailfin --version build/native/sailfin run examples/basics/hello-world.sfn build/native/sailfin check compiler/src/ ``` 如果已安装: ``` sfn --version sfn run examples/basics/hello-world.sfn sfn fmt --check compiler/src/ runtime/ ``` ## 开发说明 - 当前后端会生成 Sailfin 原生 IR (`.sfn-asm`),将其降低为 LLVM IR, 并与平台工具链进行链接。 - 编译器具有确定性的自托管覆盖率:完整的验证 关卡会检查连续的编译器阶段是否产生字节完全相同的 LLVM IR。 - `docs/status.md` 是已发布、部分完成和计划中 行为的唯一事实来源。 - 面向用户的文档位于 `site/src/content/docs/` 并发布在 [sfn.dev/docs](https://sfn.dev/docs/)。 - 公共路线图根据 GitHub 里程碑生成,网址为 [sfn.dev/roadmap](https://sfn.dev/roadmap)。 ## 贡献 请参阅 [`CONTRIBUTING.md`](CONTRIBUTING.md) 了解贡献指南。已整理的 工作记录在 [issue 追踪器](https://github.com/SailfinIO/sailfin/issues)中, 而 [sfn.dev/roadmap](https://sfn.dev/roadmap) 上的路线图追踪了 更大的里程碑。
标签:权限控制, 系统编程, 编程语言, 编译器, 运行时, 默认DNS解析器