コンテンツにスキップ

Zig/組込み関数

出典: フリー教科書『ウィキブックス(Wikibooks)』
< Zig

組込み関数

[編集]

組込み関数( Builtin Functions )はコンパイラによって提供され、接頭辞に @ が付けられます。 パラメーターについての comptime キーワードは、そのパラメーターがコンパイル時に既知である必要があることを意味します[1]

組込み関数一覧
関数プロトタイプ 種別 説明
@addrSpaceCast(ptr: anytype) anytype
[2]
キャスト ポインターを1つのアドレス空間から別のアドレス空間に変換します。新しいアドレス空間は結果の型に基づいて推論されます。現在のターゲットとアドレス空間に応じて、このキャストは無効、複雑な操作、または違法である場合があります。キャストが適法である場合、結果のポインターはポインターオペランドと同じメモリー位置を指します。同じアドレス空間間でのポインターのキャストは常に有効です。
@addWithOverflow(a: anytype, b: anytype) struct { @TypeOf(a, b), u1 }
[3]
数値演算 a + b を実行し、結果と可能なオーバーフロービットを持つタプルを返します。
@alignCast(ptr: anytype) anytype
[4]
アライメント ptr*T, ?*T, または []T のいずれかです。ポインターのアライメントを変更します。使用するアライメントは結果の型に基づいて推論されます。生成されたコードには、ポインターが約束されたようにアラインされていることを確認するためのポインターアライメント安全検査が追加されます。
@alignOf(comptime T: type) comptime_int
[5]
アライメント この関数は、現在のターゲットがCのABIに適合するために、この型がアライメントされるべきバイト数を返します。ポインターの子供の型がこのアライメントを持っている場合、アライメントを省略することができます。
@as(comptime T: type, expression) T
[6]
キャスト 型強制を行います。このキャストは、変換が曖昧でなく安全である場合に許可され、可能な限り、型間の変換に好ましい方法とされています。
@atomicLoad(comptime T: type, ptr: *const T, comptime ordering: AtomicOrder) T
[7]
不可分操作 ポインターをアトミックにデリファレンスしてその値を返します。 T は、ポインター、bool、整数、浮動小数点数あるいは enum でなければなりません。
@atomicRmw(comptime T: type, ptr: *T, comptime op: AtomicRmwOp, operand: T, comptime ordering: AtomicOrder) T
[8]
不可分操作 メモリーをアトミックに変更した後、以前の値を返します。 T は、ポインター、bool、整数、浮動小数点数あるいは enum でなければなりません。
@atomicStore(comptime T: type, ptr: *T, value: T, comptime ordering: AtomicOrder) void
[9]
不可分操作 値をアトミックに保存します。 T は、ポインター、bool、整数、浮動小数点数あるいは enum でなければなりません。
@bitCast(value: anytype) anytype
[10]
キャスト 1つの型の値を別の型に変換します。戻り型は推論された結果型です。
@bitOffsetOf(comptime T: type, comptime field_name: []const u8) comptime_int
[11]
オフセット フィールドのビットオフセットを、それを含む struct からの相対値で返します。
@bitSizeOf(comptime T: type) comptime_int
[12]
特性 型がパックされたstruct/unionのフィールドであった場合に、Tをメモリーに格納するために必要なビット数を返します。
@breakpoint()
[13]
デバッグ プラットフォーム固有のデバッグトラップ命令を挿入し、デバッガがそこでブレークするようにします。
@mulAdd(comptime T: type, a: T, b: T, c: T) T
[14]
数値演算 積和演算(Fused multiply-add)を実行します。
@byteSwap(operand: anytype) T
[15]
キャスト オペランドのバイト順序を逆転させます。
@bitReverse(integer: anytype) T
[16]
キャスト 整数値のビットパターンを逆転させます。
@offsetOf(comptime T: type, comptime field_name: []const u8) comptime_int
[17]
オフセット フィールドのバイトオフセットを、それを含む struct からの相対値で返します。
@call(modifier: std.builtin.CallModifier, function: anytype, args: anytype) anytype
[18]
呼び出し 指定された関数を呼び出します。
@cDefine(comptime name: []const u8, value) void
[19]
マクロ定義 Cマクロを定義します。
@cImport(expression) type
[20]
C インタフェース この関数は C コードを解析し、関数、型、変数、および互換性のあるマクロ定義を新しい空の構造体型にインポートし、その型を返します。expression はコンパイル時に解釈されます。この式内で、@cInclude、@cDefine、@cUndef の組み込み関数が動作し、一時バッファに追加され、それが C コードとして解析されます。通常、アプリケーション全体で 1 つの @cImport のみを持つべきです。これにより、コンパイラが複数回 clang を起動するのを防ぎ、インライン関数が重複しないようにします。複数の @cImport 式が必要な理由は次のとおりです:
  1. シンボルの衝突を回避するため(例:foo.h と bar.h がともに CONNECTION_COUNT を #define している場合)
  2. 異なるプリプロセッサの定義で C コードを解析するため
@cInclude(comptime path: []const u8) void
[21]
C インタフェース この関数は @cImport 内でのみ発生します。これは c_import 一時バッファに #include <$path>\n を追加します。
@clz(operand: anytype) anytype
[22]
キャスト 整数の最上位ビット(ビッグエンディアンでの先頭ビット)からのゼロの数を数えます。
@cmpxchgStrong(comptime T: type, ptr: *T, expected_value: T, new_value: T, success_order: AtomicOrder, fail_order: AtomicOrder) ?T
[23]
不可分操作 強力な原子比較交換操作を実行し、現在の値が指定された期待値でない場合はnullを返します。
@cmpxchgWeak(comptime T: type, ptr: *T, expected_value: T, new_value: T, success_order: AtomicOrder, fail_order: AtomicOrder) ?T
[24]
不可分操作 弱い原子比較交換操作を実行し、現在の値が指定された期待値でない場合はnullを返します。
@compileError(comptime msg: []const u8) noreturn
[25]
コンパイル時エラー 意味解析されると、メッセージmsgを持つコンパイルエラーが発生します。
@compileLog(args: ...) void
[26]
コンパイルログ 引数をコンパイル時に出力します。
@constCast(value: anytype) DestType
[27]
キャスト ポインターからconst修飾子を削除します。
@ctz(operand: anytype) anytype
[28]
キャスト 整数の最下位ビット(ビッグエンディアンでの末尾ビット)からのゼロの数を数えます。
@cUndef(comptime name: []const u8) void
[29]
マクロ定義解除 Cマクロを無効にします。
@cVaArg(operand: *std.builtin.VaList, comptime T: type) T
[30]
可変引数 Cマクロva_argを実装します。
@cVaCopy(src: *std.builtin.VaList) std.builtin.VaList
[31]
可変引数 Cマクロva_copyを実装します。
@cVaEnd(src: *std.builtin.VaList) void
[32]
可変引数 Cマクロva_endを実装します。
@cVaStart() std.builtin.VaList
[33]
可変引数 Cマクロva_startを実装します。
@divExact(numerator: T, denominator: T) T
[34]
数値演算 完全な除算。デノミネーター != 0 であり、@divTrunc(numerator, denominator) * denominator == numerator を保証する必要があります。
@divFloor(numerator: T, denominator: T) T
[35]
数値演算 床付きの除算。負の無限大に向かって丸めます。符号なし整数の場合、分子 / 分母と同じです。
@divTrunc(numerator: T, denominator: T) T
[36]
数値演算 切り捨て除算。ゼロに向かって丸めます。符号なし整数の場合、分子 / 分母と同じです。
@embedFile(comptime path: []const u8) *const [N:0]u8
[37]
ファイル操作 ファイルの内容を持つ、ヌル終端の固定サイズ配列へのコンパイル時定数ポインターを返します。
@enumFromInt(integer: anytype) anytype
[38]
キャスト 整数を列挙値に変換します。
@errorFromInt(value: std.meta.Int(.unsigned, @bitSizeOf(anyerror))) anyerror
[39]
キャスト エラーの整数表現からグローバルエラーセット型に変換します。
@errorName(err: anyerror) [:0]const u8
[40]
文字列操作 エラーの文字列表現を返します。
@errorReturnTrace() ?*builtin.StackTrace
[41]
エラー処理 エラーの返り値が追跡されている場合、スタックトレースオブジェクトを返します。それ以外の場合はnullを返します。
@errorCast(value: anytype) anytype
[42]
キャスト エラーセットまたはエラーユニオンの値を別のエラーセットに変換します。
@export(declaration, comptime options: std.builtin.ExportOptions) void
[43]
シンボル出力 出力オブジェクトファイルにシンボルを作成します。
@extern(T: type, comptime options: std.builtin.ExternOptions) T
[44]
外部シンボル参照 出力オブジェクトファイルに外部シンボルへの参照を作成します。
@fence(order: AtomicOrder) void
[45]
同期操作 発生前後のエッジを導入するために使用されます。
@field(lhs: anytype, comptime field_name: []const u8) (field)
[46]
フィールドアクセス コンパイル時文字列でフィールドアクセスを実行します。
@fieldParentPtr(comptime ParentType: type, comptime field_name: []const u8, field_ptr: *T) *ParentType
[47]
ポインター操作 フィールドへのポインターから、構造体のベースポインターを返します。
@floatCast(value: anytype) anytype
[48]
キャスト 1つの浮動小数点数型から別の浮動小数点数型に変換します。
@floatFromInt(int: anytype) anytype
[49]
キャスト 整数を最も近い浮動小数点数表現に変換します。
@frameAddress() usize
[50]
デバッグ 現在のスタックフレームのベースポインターを返します。
@hasDecl(comptime Container: type, comptime name: []const u8) bool
[51]
メタ情報 コンテナに指定された名前の宣言があるかどうかを返します。
@hasField(comptime Container: type, comptime name: []const u8) bool
[52]
メタ情報 構造体、共用体、または列挙型の指定されたフィールド名が存在するかどうかを返します。
@import(comptime path: []const u8) type
[53]XXX
ビルド管理 path に対応する Zig ファイルを見つけ、まだ追加されていない場合にビルドに追加します。
@inComptime() bool
[54]
メタ情報 このビルトインがコンパイル時に実行されたかどうかを返します。
@intCast(int: anytype) anytype
[55]
キャスト 数値を同じ数値としてのみ変換します。
@intFromBool(value: bool) u1
[56]
キャスト true を @as(u1, 1)、false を @as(u1, 0) に変換します。
@intFromEnum(enum_or_tagged_union: anytype) anytype
[57]
キャスト 列挙値を整数のタグ型に変換します。
@intFromError(err: anytype) std.meta.Int(.unsigned, @bitSizeOf(anyerror))
[58]
キャスト エラーをエラーの整数表現に変換します。
@intFromFloat(float: anytype) anytype
[59]
キャスト 浮動小数点数の整数部分を変換します。
@intFromPtr(value: anytype) usize
[60]
キャスト ポインターを usize に変換します。
@max(a: T, b: T) T
[61]
数値演算 a と b の最大値を返します。
@memcpy(noalias dest, noalias source) void
[62]
メモリ操作 メモリの領域を別の領域にコピーします。
@memset(dest, elem) void
[63]
メモリ操作 メモリ領域の全要素を elem に設定します。
@min(a: T, b: T) T
[64]
数値演算 a と b の最小値を返します。
@wasmMemorySize(index: u32) u32
[65]
メモリ操作 指定されたインデックスの Wasm メモリのサイズを Wasm ページ単位で返します。
@wasmMemoryGrow(index: u32, delta: u32) i32
[66]
メモリ操作 指定されたインデックスの Wasm メモリのサイズを増やします。
@mod(numerator: T, denominator: T) T
[67]
数値演算 剰余を返します。
@mulWithOverflow(a: anytype, b: anytype) struct { @TypeOf(a, b), u1 }
[68]
数値演算 オーバーフロー可能な掛け算を行い、結果と可能なオーバーフローのビットを返します。
@panic(message: []const u8) noreturn
[69]
デバッグ パニックハンドラー関数を呼び出します。
@popCount(operand: anytype) anytype
[70]
ビット操作 整数の中でセットされたビットの数を数えます。
@prefetch(ptr: anytype, comptime options: PrefetchOptions) void
[71]
メモリアクセス プリフェッチ命令を発行します。
@ptrCast(value: anytype) anytype
[72]
キャスト 1つの型のポインターを別の型のポインターに変換します。
@ptrFromInt(address: usize) anytype
[73]
キャスト 整数をポインターに変換します。
@rem(numerator: T, denominator: T) T
[74]
数値演算 剰余の計算を行います。符号なし整数の場合、これは numerator % denominator と同じです。呼び出し側は denominator > 0 を保証する必要があります。それ以外の場合、ランタイムセーフティチェックが有効になっている場合、操作は除算ゼロによる剰余が発生します。
@returnAddress() usize
[75]
デバッグ この関数は、現在の関数がリターンしたときに実行される次のマシンコード命令のアドレスを返します。
@select(comptime T: type, pred: @Vector(len, bool), a: @Vector(len, T), b: @Vector(len, T)) @Vector(len, T)
[76]
条件付き選択 pred に基づいて a または b から要素を選択します。pred[i] が true の場合、結果の対応する要素は a[i] になり、そうでなければ b[i] になります。
@setAlignStack(comptime alignment: u29) void
[77]
スタックアライメント 関数のスタックアライメントが少なくとも指定されたバイト数になるように保証します。
@setCold(comptime is_cold: bool) void
[78]
最適化 現在の関数が(またはされない)まれに呼び出されることを最適化プログラムに伝えます。この関数は関数スコープ内でのみ有効です。
@setEvalBranchQuota(comptime new_quota: u32) void
[79]
コンパイル時コード コンパイル時のコード実行が使用するバックワードブランチの最大数を増やします。新しいクォータがデフォルトのクォータ(1000)より小さい場合や、以前に明示的に設定されたクォータよりも小さい場合は、無視されます。
@setFloatMode(comptime mode: FloatMode) void
[80]
浮動小数点モード 浮動小数点演算の定義方法に関する現在のスコープのルールを変更します。
@setRuntimeSafety(comptime safety_on: bool) void
[81]
ランタイムセーフティ 関数呼び出しを含むスコープでランタイムセーフティチェックが有効かどうかを設定します。
@shlExact(value: T, shift_amt: Log2T) T
[82]
数値演算 左シフト演算(<<)を実行します。符号なし整数の場合、シフトアウトされる任意の1ビットがあると結果は未定義です。符号付き整数の場合、結果は、結果の符号ビットと一致しないビットがシフトアウトされた場合には未定義です。
@shlWithOverflow(a: anytype, shift_amt: Log2T) struct { @TypeOf(a), u1 }
[83]
数値演算 a << b を実行し、結果とオーバーフロービットの可能性があるタプルを返します。
@shrExact(value: T, shift_amt: Log2T) T
[84]
数値演算 右シフト演算(>>)を実行します。呼び出し側は、シフトが任意の1ビットをアウトさせないことを保証します。
@shuffle(comptime E: type, a: @Vector(a_len, E), b: @Vector(b_len, E), comptime mask: @Vector(mask_len, i32)) @Vector(mask_len, E)
[85]
ベクトル操作 マスクに基づいて a と b から要素を選択して新しいベクトルを構築します。
@sizeOf(comptime T: type) comptime_int
[86]
メモリ操作 メモリ内で T を格納するために必要なバイト数を返します。
@splat(scalar: anytype) anytype
[87]
ベクトル操作 各要素がスカラー値であるベクトルを生成します。
@reduce(comptime op: std.builtin.ReduceOp, value: anytype) E
[88]
ベクトル操作 指定された演算子 op を使用して、要素の水平リダクションを実行してスカラー値(型E)に変換します。
@src() std.builtin.SourceLocation
[89]
デバッグ 関数の名前とソースコード内の場所を表す SourceLocation 構造体を返します。
@sqrt(value: anytype) @TypeOf(value)
[90]
数値演算 浮動小数点数の平方根を計算します。利用可能な場合は専用のハードウェア命令を使用します。
@sin(value: anytype) @TypeOf(value)
[91]
数値演算 弧度法での正弦三角関数を計算します。利用可能な場合は専用のハードウェア命令を使用します。
@cos(value: anytype) @TypeOf(value)
[92]
数値演算 弧度法での余弦三角関数を計算します。利用可能な場合は専用のハードウェア命令を使用します。
@tan(value: anytype) @TypeOf(value)
[93]
数値演算 弧度法での正接三角関数を計算します。利用可能な場合は専用のハードウェア命令を使用します。
@exp(value: anytype) @TypeOf(value)
[94]
数値演算 自然対数の底eの指数関数を計算します。利用可能な場合は専用のハードウェア命令を使用します。
@exp2(value: anytype) @TypeOf(value)
[95]
数値演算 底が2の指数関数を計算します。利用可能な場合は専用のハードウェア命令を使用します。
@log(value: anytype) @TypeOf(value)
[96]
数値演算 浮動小数点数の自然対数を計算します。利用可能な場合は専用のハードウェア命令を使用します。
@log2(value: anytype) @TypeOf(value)
[97]
数値演算 底が2の対数を計算します。利用可能な場合は専用のハードウェア命令を使用します。
@log10(value: anytype) @TypeOf(value)
[98]
数値演算 底が10の対数を計算します。利用可能な場合は専用のハードウェア命令を使用します。
@abs(value: anytype) anytype
[99]
数値演算 整数または浮動小数点数の絶対値を返します。利用可能な場合は専用のハードウェア命令を使用します。
@floor(value: anytype) @TypeOf(value)
[100]
数値演算 指定された浮動小数点数より大きくない最大の整数値を返します。利用可能な場合は専用のハードウェア命令を使用します。
@ceil(value: anytype) @TypeOf(value)
[101]
数値演算 指定された浮動小数点数より小さくない最小の整数値を返します。利用可能な場合は専用のハードウェア命令を使用します。
@trunc(value: anytype) @TypeOf(value)
[102]
数値演算 指定された浮動小数点数を整数に丸め、ゼロに向かって丸めます。利用可能な場合は専用のハードウェア命令を使用します。
@round(value: anytype) @TypeOf(value)
[103]
数値演算 指定された浮動小数点数を整数に丸め、ゼロから遠ざけます。利用可能な場合は専用のハードウェア命令を使用します。
@subWithOverflow(a: anytype, b: anytype) struct { @TypeOf(a, b), u1 }
[104]
数値演算 a - b を実行し、結果と可能なオーバーフロービットを持つタプルを返します。
@tagName(value: anytype) [:0]const u8
[105]
データ変換 列挙値またはユニオン値を、名前を表す文字列リテラルに変換します。
@This() type
[106]
メタプログラミング 現在の関数呼び出しの内部の最も深い構造体、列挙体、または共用体を返します。
@trap() noreturn
[107]
デバッグ プログラムを異常終了させるためにプラットフォーム固有のトラップ/ジャム命令を挿入します。
@truncate(integer: anytype) anytype
[108]
数値演算 整数型からビットを切り捨て、より小さいまたは同じサイズの整数型を生成します。利用可能な場合は専用のハードウェア命令を使用します。
@Type(comptime info: std.builtin.Type) type
[109]
メタプログラミング 型情報を型に再構成します。
@typeInfo(comptime T: type) std.builtin.Type
[110]
メタプログラミング 型のリフレクション情報を提供します。
@typeName(T: type) *const [N:0]u8
[111]
メタプログラミング 型の文字列表現を返します。
@TypeOf(...) type
[112]
メタプログラミング 式の型を返します。
@unionInit(comptime Union: type, comptime active_field_name: []const u8, init_expr) Union
[113]
メタプログラミング ユニオンの初期化構文と同じですが、フィールド名は識別子トークンではなく、コンパイル時に既知の値です。
@Vector(len: comptime_int, Element: type) type
[114]
データ構造 ベクトルを作成します。
@volatileCast(value: anytype) DestType
[115]
データ変換 ポインタからvolatile修飾子を削除します。
@workGroupId(comptime dimension: u32) u32
[116]
プラットフォーム依存 指定された次元のカレントカーネル呼び出し内のワークグループのインデックスを返します。
@workGroupSize(comptime dimension: u32) u32
[117]
プラットフォーム依存 指定された次元のワークグループが持つワークアイテムの数を返します。
@workItemId(comptime dimension: u32) u32
[118]
プラットフォーム依存 指定された次元のワークグループ内のワークアイテムのインデックスを返します。この関数は0(含む)から @workGroupSize(dimension)(排他的)までの値を返します。
  1. ^ Builtin Functions
  2. ^ @addrSpaceCast
  3. ^ @addWithOverflow
  4. ^ @alignCast
  5. ^ @alignOf
  6. ^ @as
  7. ^ @atomicLoad
  8. ^ @atomicRmw
  9. ^ @atomicStore
  10. ^ @bitCast
  11. ^ @bitOffsetOf
  12. ^ @bitSizeOf
  13. ^ @breakpoint
  14. ^ @mulAdd
  15. ^ @byteSwap
  16. ^ @bitReverse
  17. ^ @offsetOf
  18. ^ @call
  19. ^ @cDefine
  20. ^ @cImport
  21. ^ @cInclude
  22. ^ @clz
  23. ^ @cmpxchgStrong
  24. ^ @cmpxchgWeak
  25. ^ @compileError
  26. ^ @compileLog
  27. ^ @constCast
  28. ^ @ctz
  29. ^ @cUndef
  30. ^ @cVaArg
  31. ^ @cVaCopy
  32. ^ @cVaEnd
  33. ^ @cVaStart
  34. ^ @divExact
  35. ^ @divFloor
  36. ^ @divTrunc
  37. ^ @embedFile
  38. ^ @enumFromInt
  39. ^ @errorFromInt
  40. ^ @errorName
  41. ^ @errorReturnTrace
  42. ^ @errorCast
  43. ^ @export
  44. ^ @extern
  45. ^ @fence
  46. ^ @field
  47. ^ @fieldParentPtr
  48. ^ @floatCast
  49. ^ @floatFromInt
  50. ^ @frameAddress
  51. ^ @hasDecl
  52. ^ @hasField
  53. ^ @import
  54. ^ @inComptime
  55. ^ @intCast
  56. ^ @intFromBool
  57. ^ @intFromEnum
  58. ^ @intFromError
  59. ^ @intFromFloat
  60. ^ @intFromPtr
  61. ^ @max
  62. ^ @memcpy
  63. ^ @memset
  64. ^ @min
  65. ^ @wasmMemorySize
  66. ^ @wasmMemoryGrow
  67. ^ @mod
  68. ^ @mulWithOverflow
  69. ^ @panic
  70. ^ @popCount
  71. ^ @prefetch
  72. ^ @ptrCast
  73. ^ @ptrFromInt
  74. ^ @rem
  75. ^ @returnAddress
  76. ^ @select
  77. ^ @setAlignStack
  78. ^ @setCold
  79. ^ @setEvalBranchQuota
  80. ^ @setFloatMode
  81. ^ @setRuntimeSafety
  82. ^ @shlExact
  83. ^ @shlWithOverflow
  84. ^ @shrExact
  85. ^ @shuffle
  86. ^ @sizeOf
  87. ^ @splat
  88. ^ @reduce
  89. ^ @src
  90. ^ @sqrt
  91. ^ @sin
  92. ^ @cos
  93. ^ @tan
  94. ^ @exp
  95. ^ @exp2
  96. ^ @log
  97. ^ @log2
  98. ^ @log10
  99. ^ @abs
  100. ^ @floor
  101. ^ @ceil
  102. ^ @trunc
  103. ^ @round
  104. ^ @subWithOverflow
  105. ^ @tagName
  106. ^ @This
  107. ^ @trap
  108. ^ @truncate
  109. ^ @Type
  110. ^ @typeInfo
  111. ^ @typeName
  112. ^ @TypeOf
  113. ^ @unionInit
  114. ^ @Vector
  115. ^ @volatileCast
  116. ^ @workGroupId
  117. ^ @workGroupSize
  118. ^ @workItemId