Nature と呼ばれる新しいプログラミング言語が登場し、Go にインスパイアされた代替言語として、Go の強みを維持しながらその限界に対処することを目指している。この言語は安定した構文 API を持つ初期の実用バージョンに到達したが、そのマーケティング上の主張が、真のシステムプログラミング言語とは何かについてコミュニティで大きな議論を呼んでいる。
Nature は、Go を日常的に使用している開発者によって作られたが、その開発者は Go の過度に単純化された構文、不十分な型システム、扱いにくいエラーハンドリングに不満を感じていた。この言語は goroutine、ガベージコレクション、チャネル、クロスコンパイル機能など Go の成功した機能の多くを取り入れながら、ユニオン型、ジェネリクス、パターンマッチング、try/catch エラーハンドリングなどの改善を追加している。
Go に対する言語の改善点:
- Union 型と包括的な型システム
- 最初からの Generics サポート
- 明示的なエラーチェックの代わりに Try/catch エラーハンドリング
match
キーワードによるパターンマッチング- Nullable 型(
string?
)による Null 値安全性 - より良い C 相互運用性
システムプログラミング言語論争
最も激しい議論は、ガベージコレクションを使用しているにも関わらず Nature がシステムプログラミング言語として分類されることを中心に展開されている。コミュニティメンバーは、この用語が安易に使用されすぎており、用語の意味を薄めてしまう可能性があるという懸念を表明している。批判者は、ガベージコレクションを持つ言語は真のシステムプログラミングに適しているとは言えず、特にストップ・ザ・ワールドの停止が問題となる可能性があるオペレーティングシステムカーネルには適さないと主張している。
「ランダムな言語のランタイムがメモリガベージを回収したいがために突然全世界を停止するようなオペレーティングシステムを誰が使うだろうか?」
Nature の作者はこれらの懸念を認め、言語のマーケティング資料を調整することに同意している。しかし、特定のシステムコンテキストにおけるガベージコレクション言語の実用的な使用を擁護し、RISC-V、MIPS、ARM バリアントなど様々なアーキテクチャで動作するルーターや TV ボックスなどの IoT デバイスに Go を使用した自身の経験を引用している。
技術アーキテクチャとパフォーマンスの主張
Nature は LLVM への依存を避け、代わりにターゲットプラットフォームのマシンコードに直接コンパイルすることで差別化を図っている。この設計選択により、Zig と同様のパスを辿り、より高速なコンパイル速度とよりカスタマイズされたエラーハンドリングが約束されている。この言語は現在 AMD64 と ARM64 の両方で Linux と macOS をサポートしており、WebAssembly と RISC-V サポートの追加が計画されている。
ランタイムには Go の実証済みアーキテクチャから借用したパフォーマンス重視の機能がいくつか組み込まれており、短いストップ・ザ・ワールド時間を持つ高性能ガベージコレクター、Google の tcmalloc に似たメモリアロケーター、毎秒数百万回のコルーチンスイッチのサポートが含まれている。この言語には IO イベントループを処理するための組み込み libuv も含まれており、直接的な C ライブラリ統合のためにシステム ABI 規約に従っている。
主要な技術的特徴:
- LLVM への依存なし - マシンコードに直接コンパイル
- 短い STW 時間を持つ高性能ガベージコレクター
- Google の tcmalloc に類似したメモリアロケーター
- IO イベントループ用の組み込み libuv
- 毎秒数百万回のコルーチン切り替えをサポート
- クロスコンパイルと静的リンクのサポート
言語設計と今後の開発
Nature の構文は馴染みのある概念を維持しながら Go とは異なっている。この言語はクエスチョンマーク構文を持つ nullable 型、タプル型をサポートし、Go よりも優れた C 相互運用性の提供を目指している。注目すべきは、この言語が現在文字列に UTF-8 ではなく ASCII エンコーディングを使用していることで、これは Unicode サポートを現代のプログラミング言語にとって不可欠と考える開発者からの批判を招いている。
作者はプログラミング言語設計において比較的経験が浅いことを認めており、コミュニティのフィードバックを受け入れている。計画には enum サポートの追加、Unicode 処理の改善、検索エンジン最適化の懸念による言語名の変更の可能性が含まれている。このプロジェクトは、完全なクロスコンパイルサポートを可能にする macOS クロスプラットフォームリンカーの実装など、実用的な課題にも直面している。
Nature は機能強化された Go の代替として有望性を示しているが、その初期段階と位置づけに関する継続的な議論は、より広範な採用を得る前に成熟する時間が必要であることを示唆している。コミュニティでの議論は、プログラミング言語カテゴリの継続的な進化と、ますます混雑する分野で自分たちのニッチを切り開こうとする新しい言語が直面する課題を浮き彫りにしている。