← 返回信息流
AI 资讯Hacker News·1 小时前

Show HN: 寻求贡献的编译型系统语言 Mach

原标题:Show HN: Mach – A compiled systems language looking for contributions

速览

Mach 是一个新推出的编译型系统编程语言,旨在提供高性能和安全性。该项目目前处于早期阶段,正在通过 Show HN 平台寻求社区贡献和反馈。

AI 深度解读

Show HN: Mach – 一个寻求贡献的编译型系统语言

背景

在系统级编程语言领域,C、C++、Rust 和 Zig 等语言长期占据主导地位。然而,随着软件复杂度的增加,开发者对于语言设计的哲学思考也在不断演变。近期在 Hacker News 上引发关注的 Mach 语言,正是这种探索的一部分。

Mach 是一个静态类型、编译型的系统语言,其设计初衷是追求简单、快速、冗长且直观。与许多旨在通过抽象层简化开发或提供极致灵活性的现代语言不同,Mach 选择了一条更为“固执”的道路:它明确拒绝将“特性丰富度”、“灵活性”或“代码精简”作为优先事项。相反,它强调显式(Explicivity)和可维护性,主张“所见即所得”(WYSIWYG),认为代码不应制造魔法般的幻觉。

该项目由 octalide 发起,目前处于早期阶段,正在积极寻求社区贡献。其核心理念是:计算机不是魔法,代码应当清晰透明,长期可维护性优于短期便利性。

核心内容

Mach 的设计哲学和工程实现具有鲜明的特点,主要体现在以下几个方面:

1. 设计原则与反原则

Mach 明确界定了其“是”与“非”的设计边界:

Mach 致力于:

  • 简单性(Simplicity): 易于学习、阅读、编写和维护。
  • 显式性(Explicivity): 代码必须冗长且明确。遵循“所见即所得”原则,拒绝隐藏逻辑。
  • 可维护性(Maintainability): 语义和设计原则优先考虑长期维护,而非短期便利。

Mach 明确不优先:

  • 功能堆砌(Features): “电池”不包含在内(Batteries are not included)。这意味着标准库可能非常精简,不提供开箱即用的广泛工具集。
  • 灵活性(Flexibility): 不允许通过多种不同方式实现同一功能。语言强制单一、明确的实现路径。
  • 代码精简(Code Reduction): 冗长是设计使然。更多的代码并不等于更差的代码。
  • 保姆式保护(Hand-holding): 语言不会阻止开发者执行危险操作。安全性被视为程序员的决策,而非强加的限制。

2. 语言特性与语法示例

Mach 是一门编译型语言,其语法风格受到多种语言的影响,但具有独特的显式风格。以下是基于原文的代码示例解读:

Hello World 示例:

use std.runtime;
use print: std.print;
$main.symbol = "main";
fun main(argc: i64, argv: **u8) i64 {
    print.println("Hello, World!");
    ret 0;
}
  • 显式声明: 使用 use 导入模块,$main.symbol = "main" 显式指定入口点符号。
  • 类型标注: 参数和返回值都明确标注了类型(如 i64, **u8)。
  • 返回值: 使用 ret 关键字显式返回。

斐波那契数列示例:

use std.runtime;
use print: std.print;
fun fibr(n: u64) u64 {
    if (n < 2) {
        ret n;
    }
    ret fibr(n - 1) + fibr(n - 2);
}
$main.symbol = "main";
fun main(argc: i64, argv: **u8) i64 {
    print.printf("fib(%d) = %d\n", 10::i64, fibr(10));
    ret 0;
}
  • 递归实现: 展示了基本的控制流和递归逻辑。
  • 格式化输出: 使用 print.printf,注意类型转换 10::i64 的显式写法,体现了语言对类型安全的严格把控。

阶乘示例:

use std.runtime;
use print: std.print;
fun fact(n: u64) u64 {
    if (n == 0) {
        ret 1;
    }
    ret n * fact(n - 1);
}
$main.symbol = "main";
fun main(argc: i64, argv: **u8) i64 {
    print.printf("fact(%d) = %d\n", 10::i64, fact(10));
    ret 0;
}
  • 进一步验证了函数的定义、递归调用及主函数的结构。

3. 构建与开发流程

Mach 编译器自身是用 Mach 编写的(Bootstrapping),因此从源码构建需要预先安装一个已发布的 Mach 版本。

  • 获取源码:
    git clone --recurse-submodules https://github.com/octalide/mach
    cd mach
    
  • 构建步骤:
    mach build .
    
  • 输出位置: 编译器二进制文件位于 out/<target>/bin/mach
  • CLI 参考: 使用 mach help <command> 查看子命令帮助,完整 CLI 参考见 doc/cli.md

4. 文档与资源

  • 语言参考: 位于 doc/language/,风格类似小册子(pamphlet)而非百科全书,假设读者已具备其他编程语言的基础概念。
  • 构建系统: 文档位于 doc/manifest.md,涉及 themach.toml 清单文件。
  • 标准库依赖: 示例代码依赖标准库。若需独立起点,可参考 Mach Sieve 项目或运行 mach init 生成脚手架。

5. 灵感与许可

  • 灵感来源: Mach 的设计灵感来自无数语言,编译器本身直接借鉴了特定来源。作者强调 Mach 站在巨人的肩膀上,并出于尊重,承诺始终保持完全开源。
  • 许可证: MIT License。
  • 贡献指南: 欢迎贡献,但需先阅读贡献指南。官方 Discord 频道已建立,用于社区交流。

关键要点

  • 极简主义哲学: Mach 拒绝“电池 included”模式,不提供大量内置功能,强调核心语言的简洁。
  • 显式优于隐式: 代码冗长是设计目标,旨在消除“魔法”,让所有逻辑和操作都清晰可见。
  • 安全性由开发者负责: 语言不提供强制的安全限制,开发者需自行决定如何处理危险操作,这与 Rust 等强调内存安全的语言形成鲜明对比。
  • 单一实现路径: 不鼓励通过多种语法糖或抽象层来实现同一功能,减少认知负担。
  • 自举构建: 编译器由 Mach 自身编写,构建过程需要依赖已发布的 Mach 版本。
  • 开源与社区驱动: 项目采用 MIT 许可证,积极寻求社区贡献,并设有官方 Discord 频道。
  • 文档定位: 官方文档假设读者有编程基础,风格简明,侧重于快速上手而非详尽的理论阐述。

意义与影响

Mach 语言的提出,反映了系统级编程领域对“过度工程化”和“抽象泄漏”的反思。在 Rust 试图通过所有权系统解决内存安全,而 C++ 因复杂性备受争议的背景下,Mach 提供了一种回归本质的思路。

对开发者的意义: 对于厌倦了复杂类型系统、宏元编程或庞大标准库的开发者来说,Mach 提供了一种“回归基础”的选择。它迫使开发者直面底层细节,通过冗长但清晰的代码来保证可维护性。这种设计特别适合那些将长期维护性和代码可读性置于开发速度之上的团队或项目。

对语言生态的影响: Mach 的“反特性”和“反灵活性”设计是对主流语言趋势的一种挑战。它证明了在系统编程中,限制选择权可能反而能提升代码的一致性和可预测性。如果 Mach 能够成功构建起社区和标准库,它可能会成为 C/C++ 替代方案中的一个独特分支,

查看原文 →github.com