kern-project/kern
GitHub: kern-project/kern
Kern 是一门专为内核、固件和裸机软件设计的系统编程语言,提供现代语言特性同时摒弃垃圾回收和隐式运行时策略。
Stars: 47 | Forks: 6
A systems programming language for kernels, firmware, and freestanding software.
English | 简体中文
Kern 专为那些希望拥有现代语言结构的底层软件而设计:显式模块、泛型、代数数据类型、trait、穷尽式模式匹配,以及一个能够理解独立 (freestanding) 目标的包/构建工具。 这里没有垃圾回收机制,没有异常,没有隐式内存分配,也没有隐藏的运行时策略。标准库是对 `base`、`rt` 和托管内部组件的可选封装,而不是编译器的强制要求。 ## 安装 Linux 和 macOS: ``` curl -sSf https://raw.githubusercontent.com/kern-project/kern/main/install.sh | bash ``` Windows PowerShell: ``` powershell -Command "Set-ExecutionPolicy Bypass -Scope Process -Force; Invoke-Expression (Invoke-WebRequest -Uri https://raw.githubusercontent.com/kern-project/kern/main/install.ps1 -UseBasicParsing).Content" ``` 安装程序会引导启动 `kernup`,它会在 Unix 上的 `~/.kern` 和 Windows 上的 `%USERPROFILE%\.kern` 下安装 SDK,然后验证 `kernc`、`craft` 和 `kern-lsp` 是否能成功启动。 如果您使用的是 NixOS 或通过 Nix 管理工具链,请参阅 [docs/nix.md](./docs/nix.md),而不是使用 shell 安装程序流程。 对于离线安装、源码构建、本地 SDK 归档以及可复现性细节,请参阅[安装 Kern](docs/install.md)。 ## 快速开始 创建一个包: ``` mkdir hello cd hello craft init ``` `craft init` 会创建一个包含 `Craft.toml` 和 `src/main.kn` 的最小包。 编辑 `src/main.kn`: ``` use std.io; fn main() i32 { "hello, {}!" .fmt(.{"kern"}) .println(); return 0; } ``` 然后再次运行它: ``` craft run ``` 常用命令: ``` craft check craft build craft run craft test craft clean ``` 选择一个包、二进制文件、示例或发布配置: ``` craft build -p path/to/package craft run -b my-tool craft run --example smoke craft build --profile release ``` `craft init` 作为一个单包项目启动。多包仓库使用 `[workspace]` 根节点来命名成员,通过 `[workspace.package]` 集中管理共享元数据,并通过 `[workspace.exports]` 导入选定的成员包。有关完整的 Craft 模型,请参阅 [docs/craft.md](docs/craft.md)。 ## 单文件 对于直接使用编译器的情况,请通过显式指定 runtime 和库来调用 `kernc`: ``` kernc --runtime-entry rt --library-bundle std examples/hello_world.kn -o hello ./hello ``` 仅编译: ``` kernc -c --runtime-entry rt --library-bundle std examples/hello_world.kn -o hello.o ``` 查看 LLVM IR: ``` kernc --emit-llvm --runtime-entry rt --library-bundle std examples/hello_world.kn ``` 有关完整的编译器驱动程序用法,请参阅 [docs/kernc.md](docs/kernc.md)。 ## 小试牛刀 ``` use std.io; enum ParseResult { Number: i32, Missing, }; fn describe(result: ParseResult) void { match (result) { .{ Number: value } => "number = {}".fmt(.{value}).println(), .Missing => "missing".println(), } } fn main() i32 { describe(.{ Number: 42 }); return 0; } ``` Kern 语法使 effect 的所有权一目了然: - `let mut value` 使存储可变。 - `&T`、`&mut T`、`^T` 和 `^mut T` 是显式指针值。 - `?T` 和 `T!E` 是内置的 enum 形式,而不是隐式的可空引用或异常。 - `match` 是穷尽的。 - 返回值不能被静默忽略。 ## 示例 该仓库包含适用于托管和独立程序的易运行示例: - [examples](examples):由 Craft 管理的入门示例。使用 `craft build --project-path examples --examples` 构建全部示例,或使用 `craft run --project-path examples --example hello_world` 运行其中一个。 - [examples/limine-smoke](examples/limine-smoke):独立内核示例,通过 `craft` 构建可引导的 Limine ISO。 - [examples/limine-mkiso](examples/limine-mkiso):Limine 示例使用的托管构建工具。 从仓库根目录运行示例包: ``` craft build -p examples/limine-smoke craft run -p examples/limine-mkiso -- --help ``` ## 工具链 Kern 提供了以下工具: - `kernc`:编译器、分析、目标文件生成和链接驱动程序。 - `craft`:包管理器、自动 lockfile 同步器和构建编排器。 - `kern-lsp`:用于编辑器集成的 language server。 - `kernlib`:官方库工作区,包含 `base`、`rt` 和 `std`。 当您需要包发现、依赖解析、构建脚本、生成文件或测试/示例选择时,请使用 `craft`。当您想直接驱动特定的编译或链接操作时,请使用 `kernc`。 ## 编辑器 第一方 VS Code 扩展位于 [editors/vscode](editors/vscode)。 它提供了 Kern 语言支持、语言图标、语义 token、自动补全、悬停提示、诊断、重命名、代码操作、code lens、文档链接、折叠范围、选择范围、inlay hint 和工作区符号功能。 ## 源码构建 对于本地编译器开发: ``` git clone https://github.com/kern-project/kern.git cd kern cargo build --release cargo test ``` 这会在 `target/release/` 目录下构建 `kernc`、`craft` 和 `kern-lsp`。 官方库工作区已检入至 `library/` 目录下。在测试备用库快照时,您仍然可以将 `KERNLIB_PATH` 设置为外部的兼容库工作区。 仓库维护命令正逐步迁移至 Rust 宿主工具。对于分组的编译器集成测试,建议使用: ``` cargo run -p kernworker -- ci kernc-tests --mode smoke ``` Windows 源码构建需要完整的 LLVM 21 开发环境,而不仅仅是已安装的最终用户 SDK。`kernup` 用于安装 SDK 归档文件;它不会从源码构建 Kern,也不会添加 `cargo build` 所需的 LLVM 开发库。如果 `cargo build` 报告缺少 LLVM 库(例如 `libxml2.lib` 或 `libxml2s.lib`),请遵循 [Windows 发行版](docs/windows-distribution.md#local-development-build) 中的 Windows 源码构建设置指南。 有关已安装的 SDK 布局、本地归档、离线安装以及 Rust `kernup` 入口点,请参阅[安装 Kern](docs/install.md)。 ## 文档 - [文档地图](docs/documentation-map.md):各类文档的具体位置。 - [安装 Kern](docs/install.md):SDK 安装、离线安装、源码构建、本地归档打包和可复现性检查。 - [Kern 教程](docs/tutorial/README.md):涵盖工具、语言基础、核心语义、库和独立入口点的入门引导。还提供[简体中文](docs/tutorial/zh/README.md)版本。 - [Kern 语言设计](docs/design.md):当前的语言语义和语法。 - [源码风格指南](docs/style.md):仓库级别的 Kern 代码风格。 - [`kernc` 编译器指南](docs/kernc.md):CLI、链接、LLVM 输出和集成细节。 - [`craft` 包与构建指南](docs/craft.md):包、lockfile、构建脚本、生成的文件、资源和命令行为。 - [运行时与库架构](docs/runtime-architecture.md):`base`/`rt`/`std` 的拆分和独立模型。 - [Unix 发行版](docs/unix-distribution.md) 和 [Windows 发行版](docs/windows-distribution.md):特定于平台的发布打包策略和宿主基线说明。 ## Star 历史标签:内核, 可视化界面, 固件, 底层开发, 系统编程语言, 编译器, 裸机编程, 通知系统