標準ライブラリ

NagiScript の標準ライブラリを解説します。

現行仕様(v0.2.0)

std: モジュール群(io / math / fs / args / async / net 等)は現行コンパイラー v0.2.0 では未実装です。実際に使えるのは下記の組み込み print / println / panic と、ランタイムの __ngs_* 関数のみです。これら std: モジュールは将来(ロードマップ)として扱ってください。


組み込み API

現行の NagiScript が提供する出力 API は組み込みの print(値) と println(値) です。引数はちょうど 1 個で、文字列・数値・bool を表示できます。

main.ngs
fn main() {
    println("Hello, World!")
    print("no newline")
    print(42)
    println(true)
}

panic

panic は実行時エラーを発生させて停止します。

main.ngs
fn main() {
    panic("something went wrong")
}

文字列比較・数値変換

文字列比較や数値変換はランタイムの __ngs_* 関数を経由して行われます(詳細は内部実装)。型名は str ではなく string です。str と書くと unknown type str エラーになります。

文字列結合には f"..."(文字列補間)を使用します。 + による文字列連結は未実装です。


List<T>

既知バグ

List<T> は List.new() / push / len / get / set の API としては定義されていますが、現行 v0.2.0 では LLVM コード生成時に zext i64 to i64 エラーが発生し、リンクに失敗する既知バグがあります。当面は構造体 + 値渡しを推奨します。

main.ngs
// なお、List は現行ビルドでリンクに失敗する既知バグがあるため、
// 当面は構造体 + 値渡しでの実装を推奨します
struct IntList {
    items: [i32; 4]
    len: i32
}

Rc<T>

要検証

Rc.new(値) と .get() は API としては存在しますが、v0.2.0 では .get() の戻り値が意図と異なる場合があります。安定性を確認するまで続けて、当面は構造体 + 値渡しを推奨します。

main.ngs
// Rc の .get() の戻り値は要検証のため、当面は構造体 + 値渡しで実装します
struct Data {
    x: i32
}

fn main() {
    val d = Data { x: 10 }
    println(d.x)
}

ロードマップ

以下の std: モジュール群は将来のバージョンでの実装予定(ロードマップ)であり、現行 v0.2.0 では 使用できません。

現行では上記の組み込み print / println / panic と、C 標準関数を extern "C" fn で宣言して利用してください。