標準ライブラリ
NagiScript の標準ライブラリを解説します。
std: モジュール群(io / math / fs / args / async / net
等)は現行コンパイラー v0.2.0
では未実装です。実際に使えるのは下記の組み込み
print / println /
panic と、ランタイムの
__ngs_* 関数のみです。これら std:
モジュールは将来(ロードマップ)として扱ってください。
組み込み API
現行の NagiScript が提供する出力 API は組み込みの
print(値) と
println(値) です。引数はちょうど 1
個で、文字列・数値・bool を表示できます。
fn main() {
println("Hello, World!")
print("no newline")
print(42)
println(true)
}
panic
panic は実行時エラーを発生させて停止します。
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
エラーが発生し、リンクに失敗する既知バグがあります。当面は構造体
+ 値渡しを推奨します。
// なお、List は現行ビルドでリンクに失敗する既知バグがあるため、
// 当面は構造体 + 値渡しでの実装を推奨します
struct IntList {
items: [i32; 4]
len: i32
}
Rc<T>
Rc.new(値) と .get() は API
としては存在しますが、v0.2.0 では
.get()
の戻り値が意図と異なる場合があります。安定性を確認するまで続けて、当面は構造体
+ 値渡しを推奨します。
// Rc の .get() の戻り値は要検証のため、当面は構造体 + 値渡しで実装します
struct Data {
x: i32
}
fn main() {
val d = Data { x: 10 }
println(d.x)
}
以下の std: モジュール群は将来のバージョンでの実装予定(ロードマップ)であり、現行 v0.2.0 では 使用できません。
-
std:io— 入出力(io.println等) -
std:math— 数値演算(math.sin,math.pow等) std:fs— ファイル操作std:args— コマンドライン引数std:async— 非同期処理std:net— ネットワーク
現行では上記の組み込み print /
println / panic と、C 標準関数を
extern "C" fn で宣言して利用してください。
