Mach システム言語の概要
Mach は、透明性と保守性を優先する開発者のために設計された、静的型付けのコンパイル型システムプログラミング言語です。その核心的な目的は、「隠れた動作」を排除し、書かれたコードが暗黙的なマジックや自動化された抽象化なしに、コンピュータが実行するものと正確に一致するようにすることです。
コア設計哲学
Mach は、コンピュータは魔法ではなく、プログラミング言語はそのような錯覚を助長すべきではないという原則に基づいて構築されています。この言語は、短期的な開発者の利便性よりも、長期的な保守性とシンプルさを優先します。
優先される原則
- 明示性 (Explicitness): Mach は意図的に冗長です。設計は「見たままがその通りになる (WYSIWYG)」アプローチに従っており、プログラマーから動作が隠されないようにしています。
- シンプルさ (Simplicity): この言語は、学習、読み、書き、そして保守が容易になるように設計されています。
- 保守性 (Maintainability): コードが長期間にわたって管理可能な状態を維持できるように、セマンティクスが選択されています。
優先されない原則
- 組み込み機能 (Built-in Features): Mach は「電池付属 (batteries included)」の機能を含んでいません。機能は意図的にコア言語から除外されています。
- 柔軟性 (Flexibility): 一貫性を維持するために、同じ結果を得るための複数の方法を提供することを避けています。
- コード削減 (Code Reduction): 冗長性は、明快さのための意味のあるトレードオフと見なされます。コードが多いことは、必ずしも悪いコードを意味しません。
- 自動化された安全性 (Automated Safety): 安全性は、言語によって課される制限ではなく、プログラマーの決定として扱われます。Mach は、プログラマーが危険な操作を行うことを防ぎません。
技術的な実装とツール
Mach はセルフホストされたコンパイラであり、つまり Mach で書かれており、自身をビルドします。LLVM やその他の外部依存関係に頼らずに開発されており、その規模のプロジェクトとしては特に印象的であるとコミュニティによって注目されています。
コマンドラインインターフェース (CLI)
Mach は、mach コマンドを通じて統合されたツールチェーンを提供します。
| コマンド | 説明 |
|---|---|
build |
現在のプロジェクトを、実行ファイルまたはオブジェクトファイルにコンパイルします |
run |
現在のプロジェクトをビルドし、その後に実行します |
test |
プロジェクトのテストをビルドして実行します |
dep |
ベンダー管理された依存関係を管理します (list, add, remove, sync, vendor) |
init |
新しいプロジェクトの雛形を作成します |
doc |
ソースの doc-comments から 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;
}
再帰的な 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 よりも遅いことを観察しており、一部では特定のベンチマークにおいて約 4 倍遅いと指摘しています。このことは、実行速度を向上させるための高度な最適化パスの将来的な計画に関する疑問を生じさせています。
安全性 vs. コントロール
安全性に関する言語の姿勢(開発者に委ねる)は、注目を集めました。一部のユーザーは「アンチマジック」の哲学を評価していますが、他のユーザーは、安全/unsafe コードの分離や代数的型のような現代的な安全性機能が、隠れた動作を導入せずに透明性を実現できるのではないかと疑問を呈しています。
実装の成果
コントリビューターや観察者は、このプロジェクトが完全にセルフホストされており、LLVM のような外部依存関係を避けていることを、2 年の開発期間ということを考慮すると「信じられないほど印象的」であると称賛しています。
"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 want to use Mach instead of Go or C."
現在の状態
Mach は MIT License の下で公開されているオープンソースプロジェクトであり、現在は macOS バックエンドの開発が進められています。