言語設計

明示的な低レベル制御、静的型付け、ネイティブ相互運用性、明確な機能境界という Wave の原則を説明します。

Wave Foundation

設計方針

Wave は、システムレベルの制御をソースコード上で見える状態に保つことを目指します。この方針は、次の具体的な機能に表れています。

  • ローカル変数宣言を含め、関数とデータの境界で型を明示します。
  • ptr<T>&deref によってアドレスとメモリアクセスを明示します。
  • C ABI の境界は extern(c)export(c) で宣言します。
  • wavec はターゲット、CPU 機能、リンカー、フリースタンディングビルドの制御を公開します。
  • 関数、構造体、列挙型、ジェネリクス、proto が高水準のプログラム構造を提供します。

言語と標準ライブラリ

言語構文と標準ライブラリは別の層です。たとえば、printprintlninput は言語の文ですが、文字列検索、ファイルシステム、ネットワーク、メモリ補助機能は標準ライブラリのモジュールです。

この区別を明確にすると、ある機能が言語文法、ライブラリ API、ツールチェーンのどこに属するか判断しやすくなります。

ローカル変数

var fixed: i32 = 10;
var state: i32 = 0;
var counter: i32 = 0;

var はローカル変数を宣言する構文です。

明示的な契約

Wave の文書では、各言語機能を構文と観測可能な動作によって説明します。低レベル操作については、プログラムが守る必要のあるメモリ、ABI、ターゲット、所有権の規則も示します。これにより、コンパイラ内部の知識に依存せずにソースコードを理解できます。