Mach 系統語言概覽

Mach 是一種靜態型別、編譯式的系統程式語言,專為優先考慮透明度與可維護性的開發者而設計。其核心目標是消除「隱藏行為」,確保編寫的程式碼正是電腦所執行的內容,而沒有隱含的魔法或自動化抽象。

核心設計哲學

Mach 的建立基於一個原則:電腦並非魔法,程式語言也不應助長這種錯覺。該語言優先考慮長期可維護性與簡單性,而非開發者的短期便利性。

優先考慮的原則

  • 明確性 (Explicitness):Mach 刻意保持冗長。其設計遵循「所見即所得」(WYSIWYG) 的方法,確保程式設計師不會被隱藏的行為所誤導。
  • 簡單性 (Simplicity):該語言旨在易於學習、閱讀、編寫與維護。
  • 可維護性 (Maintainability):選擇語義是為了確保程式碼在長期內仍可管理。

非優先考慮的原則

  • 內建功能 (Built-in Features):Mach 不包含「內建電池」(batteries included) 的功能;核心語言刻意省略了許多功能。
  • 靈活性 (Flexibility):該語言避免提供多種達成相同結果的方法,以維持一致性。
  • 程式碼縮減 (Code Reduction):冗長被視為為了清晰度而進行的有意義權衡;更多的程式碼並不被視為較差的程式碼。
  • 自動化安全性 (Automated Safety):安全性被視為程式設計師的決定,而非語言強加的限制。Mach 不會阻止程式設計師執行危險的操作。

技術實作與工具鏈

Mach 是一個自我託管 (self-hosted) 的編譯器,這意味著它是用 Mach 編寫並自我構建的。它在開發過程中不依賴 LLVM 或其他外部依賴項,這一成就被社群認為對於如此規模的專案來說非常令人印象深刻。

命令列介面 (CLI)

Mach 透過 mach 指令提供統一的工具鏈:

Command Description
build 將目前的專案編譯成執行檔或物件檔
run 建置並執行目前的專案
test 建置並執行專案測試
dep 管理委託的依賴項 (list, add, remove, sync, vendor)
init 初始化新專案
doc 從原始碼文件註解中生成 Markdown 參考文件

語言語法範例

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;
}

Recursive Fibonacci

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;
}

社群討論與分析

在 Hacker News 上發表後,Mach 語言引發了關於其設計權衡與效能的討論。

效能與優化

社群成員觀察到 Mach 目前比 C 語言慢,有些指出在某些基準測試中大約慢了四倍。這引發了關於未來是否會進行進階優化階段以提升執行速度的疑問。

安全性 vs. 控制權

該語言對於安全性的立場——交由開發者決定——引起了關注。雖然有些使用者欣賞這種「反魔法」的哲學,但其他人則質疑現代安全性功能(例如安全/不安全程式碼的分離,或代數型別)是否能在不引入隱藏行為的情況下提供透明度。

實作成就

貢獻者與觀察者都稱讚該專案是完全自我託管的,並且避免了 LLVM 等外部依賴項,在兩年的開發時間內,將此工作描述為「令人難以置信地令人印象深刻」。

"Quite impressive to develop so much without turning to LLVM. But it’s unclear to me from the docs the value prop of why developers would want to use Mach instead of Go or C."

目前狀態

Mach 是一個採用 MIT License 的開源專案,目前正在開發 macOS 後端。

Sources