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

Hacker News Top 工具

摘要

Mach 是一种静态类型、编译型的系统语言,旨在实现简洁性、明确性和可维护性。它是开源的,并在 GitHub 上寻求贡献。

<p>大家好,我是 Mach 的创建者(<a href="https://github.com/octalide/mach" rel="nofollow">https://github.com/octalide/mach</a> 或 <a href="https://machlang.org" rel="nofollow">https://machlang.org</a>)。两天前,我们终于实现了完全自托管。我想在这里发个帖展示一下这门语言,因为这对我们来说是一个重要的里程碑。</p><p>## 给好奇者的语言简要介绍:</p><p>- 整个流水线中没有任何外部依赖。这包括 LLVM、libc 绑定或任何类似的东西(除了历史性的引导编译器,它需要任意 C 编译器且已完全淘汰)。</p><p>- Mach 非常固执己见,并且极度反对魔法。所见即所得(WYSIWYG)是这门语言的核心原则。没有隐藏行为、隐式类型转换或“自动特性”。简洁性和消除歧义是这门语言坚守的核心原则。</p><p>- 目前,性能仅落后 C 语言约 4 倍,这几乎完全是因为缺乏深度编译器优化(如自动向量化),这些优化尚未完全实现。最终,Mach 的性能将至少与 C 持平。</p><p>## 我为什么构建它?</p><p>我喜欢像 C、Zig、Go 和(有时)Rust 这样的底层系统语言,但我想要一种积极抑制“聪明技巧”、追求长期可维护性和整体清晰度的语言。Mach 非常固执己见,并且明确要求在某些方面比其它语言更冗长。计算机不是魔法,你写的代码也不应该假装它们是。</p><p>这个项目最初只是我个人的学习机会,但随着时间的推移,它逐渐成长为功能完备的语言。不过,我还有很多东西要学,我很高兴能随着这个项目未来的发展而继续学习。</p><p>## 我(读者)为什么要关心?</p><p>如果你喜欢 C,你可能会喜欢 Mach。Mach 从 C 的“感觉”中汲取了灵感,但改进了许多语法,消除了不少陷阱,揭示了大量内部机制,并且拥有远更优秀的依赖管理系统。</p><p>如果你想尝试一种能够完全替代 C 的语言,特别是如果你愿意为其开发贡献力量,那么请务必过来折腾一下。</p><p>## 我应该去哪里查看?</p><p>GitHub 仓库中有我们 Discord 的链接,如果你想和我或我们其他几位常规用户聊天。我个人账户中包含了所有现有的工具,以及一些示例仓库,如果你有兴趣尝试的话。</p><p>## 这个项目会在 X 个月后消失吗?</p><p>我断断续续地开发这个项目已经超过 2 年了。这是一个长期项目,我计划无限期地维护下去,无论是否有用户群。如果你喜欢这门语言,我强烈建议你参与它的开发,因为它无论如何都会以某种形式一直存在下去。</p><p>我知道这有点“杂乱”,但我想说,开发这个项目给我带来了巨大的乐趣,我欢迎任何和所有的意见和贡献,特别是如果你讨厌这门语言或者发现了需要修复的问题。请告诉我你们的想法!</p>
查看原文
查看缓存全文

缓存时间: 2026/06/09 00:20

octalide/mach 源码: https://github.com/octalide/mach MACH === CI 许可证 代码大小 最后提交 问题 Mach 是一种静态类型、编译型系统语言,旨在简洁、快速、明确且直观。我们有一个官方 Discord (https://discord.com/invite/dfWG9NhGj7)! # 概览 - 核心哲学 - 开始上手 - 用法 - 示例 - 文档 - 致谢 - 许可证 ## 核心哲学 Mach 的设计遵循以下原则: - 简洁性:Mach 易于学习、阅读、编写和维护。 - 明确性:Mach 明确且冗长。所见即所得,始终如此。计算机不是魔法。你的代码不应助长这种错觉。 - 可维护性:Mach 的语义和设计原则优先考虑长期可维护性,而非短期便利性。 Mach 的设计并不优先考虑: - 功能丰富:永远不自带“电池”。 - 灵活性:Mach 不允许用多种方式做同一件事。 - 代码精简:Mach 本质上是明确且冗长的。代码多并不代表代码差。 - 手把手引导:Mach 不会阻止你做危险的事。安全是程序员做出的决定,而非强加于他们的限制。 # 开始上手 在安装之前,请先阅读语言参考文档。这些文档更像是一本小册子而非圣经,并假定你已熟悉其他语言的基本编程概念。 ## 构建 Mach Mach 可以自举,因此从源码构建需要一个已有的 mach——请先安装最新版本 (https://github.com/octalide/mach/releases)。 bash git clone --recurse-submodules https://github.com/octalide/mach cd mach mach build . 编译器将输出到 out//bin/mach。 # 用法 mach [options] | 命令 | 描述 | |—|—| | build | 将当前项目编译为可执行文件或目标文件 | | run | 构建并执行当前项目(-- args... 后接的参数将传递给程序) | | test | 构建并运行项目的测试 | | dep | 管理 vendored 依赖(listaddremovesyncvendor) | | init | 创建新项目的脚手架(--lib--name--force) | | doc | 从源文档注释生成 Markdown 参考文档 | | help | 显示用法;mach help <子命令> 获取详细信息 | 运行 mach help <子命令> 获取关于特定子命令的更多信息,或查看完整的 CLI 参考文档。 # 示例 以下示例需要标准库作为依赖。如需独立的入门项目,请参见 Mach Sieve (https://github.com/octalide/mach-sieve) 项目,或运行 mach init 创建脚手架。 ## Hello World mach use std.runtime; use print: std.print; $main.symbol = "main"; fun main(argc: i64, argv: **u8) i64 { print.println("Hello, World!"); ret 0; } ## 斐波那契数列 mach 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; } ## 阶乘 mach 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; } # 文档 完整的语言参考文档位于 doc/language/。构建系统的文档参见: - doc/manifest.md —— mach.toml 清单参考 - doc/cli.md —— mach 命令行参考 # 致谢 Mach 的灵感来源语言多到数不清。编译器本身的直接灵感来自以下几个具体来源: - Golang (https://golang.org/) - Vlang (https://vlang.org/) - Zig (https://ziglang.org/) - Rust (https://www.rust-lang.org/) Mach 站在无数巨人的肩膀上,这些巨人直接或间接地为以上语言的发展做出了贡献。出于对他们工作的尊重,Mach 将始终完全开源。感谢大家。 ## 贡献 我们欢迎对 Mach 的贡献!如果你愿意贡献,请先阅读我们的贡献指南。 # 许可证 Mach 采用 MIT 许可证

相似文章

Show HN: Nibble

Hacker News Top

Nibble 是一种类 C 的系统编程语言,用 3000 行 C 代码实现,无需外部依赖或堆分配即可生成 LLVM IR。它支持 defer、递归、多种类型、结构体、指针,并包含图形演示。

Mercury逻辑编程系统

Hacker News Top

Mercury是一种逻辑/函数式编程语言,它将声明式编程与静态分析和错误检测相结合。该仓库提供了源代码、文档以及针对多个平台的后端支持。