FFI
このドキュメントは、Wave言語における外部で実装された関数を呼び出すためのFFI(外国機能インターフェース)規格を説明します。 FFIを介して、Waveプログラムは他の言語で書かれたネイティブライブラリと直接連携することができます。
概要
WaveのFFIは宣言ベースで動作します。 外部関数はWaveコードで実装されず、該当する関数がどのABI(アプリケーションバイナリインターフェース)に従うのかを明示するだけです。 実際の実装はリンク段階で外部ライブラリから解決されます。
FFIはコンパイル時に関数の存在のみを宣言し、実行ファイル生成時にリンカが実際のシンボルを接続する方法で動作します。
extern宣言
外部関数はexternキーワードを使用して宣言します。
現在のWaveではABIの指定が必須であり、extern(c)のみサポートします。
extern(c) fun 関数名(引数...) -> 返却型;
ABI指定
extern宣言にはABIを明示しなければなりません。
現在サポートされているABIはcのみです。
extern(c) fun printf(fmt: ptr<u8>);
extern(rust)のような宣言はパースされることがあっても、意味解析段階でエラーが発生します。
関数単位のextern宣言
外部関数を1つ宣言する場合は次のように書きます。
extern(c) fun InitWindow(width: i32, height: i32, title: ptr<u8>);