Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

用語集

用語意味
1-ZSTアラインメントが1の ゼロサイズ型。サイズがゼロで、アラインメント が1の型。
アリーナ、アリーナ割り当てアリーナ は、他のメモリ割り当てが行われる大きなメモリバッファーです。この割り当ての方式は アリーナ割り当て と呼ばれます。詳細は この章 を参照してください。
AFIDTdyn Trait 内の async 関数 の略。AFIT も参照してください。
AFITtrait 内の async 関数 の略。RPITIT へ脱糖されます。
ASTパーサーによって生成される 抽象構文木IR)。表層 / ユーザー構文を非常に忠実に反映します。
APIT引数位置の impl Trait の略。全称的な impl Trait(存在的なものとは対照的)または無名型パラメーターとも呼ばれます(リファレンスを参照)。
ATPIT関連型位置の impl Trait の略。ITIAT とも呼ばれます。
バインダーバインダー とは、変数または型が宣言される場所です。たとえば、fn foo<T>(..) における <T> は型パラメーター T のバインダーであり、for<'a> はライフタイムパラメーター 'a のバインダーであり、|a| … はパラメーター a のバインダーです。詳細は 背景の章 を参照してください。
本体「実行可能コード」を含む関数または定数の定義。
BodyIdクレート内の特定の 本体 を参照する識別子。詳細は HIR の章 を参照してください。
束縛変数束縛変数 とは、式または項(一般的な意味で)の内部で宣言される変数です。たとえば、変数 a はクロージャ式 |a| a * 2 の内部で束縛され、ライフタイム変数 'a は型式 for<'a> fn(&'a str) -> bool の内部で束縛されます。詳細は 背景の章 を参照してください。
codegenコード生成 の略。MIR を LLVM IR に変換するコードです。
codegen ユニットLLVM IR を生成する際、Rust コードを複数の codegen ユニット(CGU と略されることもあります)にグループ化します。これらの各ユニットは LLVM によって互いに独立して処理されるため、並列化が可能になります。また、これらはインクリメンタルな再利用の単位でもあります(詳細)。
完全性型理論の専門用語で、型安全なプログラムはすべて型チェックにも合格することを意味します。健全性と完全性の両方を備えることは非常に難しく、通常は健全性のほうが重要です(「健全性」を参照)。
制御フローグラフ、CFGプログラムの制御フローを表現したもの。詳細は 背景の章 を参照してください。
CTFEコンパイル時関数評価 の略で、コンパイラーがコンパイル時に const fn を評価できる能力です。これはコンパイラーの定数評価システムの一部です(詳細)。
cxcxコンテキスト の略語として使われる傾向があります。tcxinfcx なども参照してください。
ctxtctxtコンテキスト の略語として使用します。例: TyCtxtcx または tcx も参照してください。
DAG有向非巡回グラフ は、コンパイル中にクエリ間の依存関係を追跡するために使用されます(詳細)。
データフロー解析プログラムの制御フロー上の各地点で、どのプロパティが真であるかを把握する静的解析。詳細は 背景の章 を参照してください。
de Bruijn インデックス変数がどのバインダーによって束縛されているかを整数だけで記述する手法です。変数のリネームに対して不変であるという利点があります(詳細)。
DefId定義を識別するインデックス(rustc_middle/src/hir/def_id.rs を参照)。DefPath を一意に識別します。詳細は HIR の章 を参照してください。
判別子enum バリアントまたはジェネレーター状態に関連付けられた基礎となる値で、それが「アクティブ」であることを示します(ただし、その 「バリアントインデックス」 と混同しないでください)。実行時には、アクティブなバリアントの判別子は タグ にエンコードされます。
ダブルポインター追加のメタデータを持つポインター。詳細は ファットポインター を参照してください。
ドロップグルー(内部)データ型のデストラクター(Drop)の呼び出しを処理する、コンパイラーが生成した命令。
DST動的サイズ型 の略で、コンパイラーがメモリ内のサイズを静的に知ることができない型(例: str[u8])です。このような型は Sized を実装せず、スタック上に割り当てることはできません。構造体では最後のフィールドとしてのみ出現できます。ポインター越し(例: &str&[u8])でのみ使用できます。
早期束縛ライフタイム定義サイトで置換されるライフタイム / リージョン。アイテムの Generics 内で束縛され、GenericArgs を使って置換/インスタンス化されます。後期束縛ライフタイム と対比してください(詳細)。
エフェクト現時点では const トレイトと ~const 境界のみを意味します(詳細)。
空型非居住型 を参照してください。
ファットポインター何らかの値のアドレスと、その値を使用するために必要な追加情報を持つ、2ワードの値です。Rust には2種類の ファットポインター、つまりスライスへの参照とトレイトオブジェクトがあります。スライスへの参照は、スライスの開始アドレスと長さを保持します。トレイトオブジェクトは、値のアドレスと、その値に適したトレイト実装へのポインターを保持します。「ファットポインター」は「ワイドポインター」や「ダブルポインター」とも呼ばれます。
自由変数自由変数 とは、式または項(一般的な意味で)の内部で束縛されていない変数です。詳細は 背景の章 を参照してください。
GACジェネリック関連定数。独自のジェネリックパラメーターまたは where 句を持つ関連定数です。機能 generic_const_items(GCI)の一部です。
GATジェネリック関連型。独自のジェネリックパラメーターまたは where 句を持つ関連型です。RFC 1598 で導入されました。
ジェネリクスアイテム上に定義されたジェネリックパラメーターのリストです。ジェネリックパラメーターには、型、ライフタイム、const パラメーターの3種類があります。
HIRAST を lowering / 脱糖して作成される 高水準 IR詳細)。
HirIddef-id と「定義内オフセット」を組み合わせることで、HIR 内の特定のノードを識別します。詳細は HIR の章 を参照してください。
IAC(多くの場合は型レベルの)固有関連定数。固有 impl impl Type { … } 内の関連定数です。機能 min_generic_const_items(mGCA、MGCA)の文脈で言及されることがよくあります。IGAC は固有 GAC です。
IAT固有関連型。固有 impl impl Type { … } 内で定義される関連型です。IGAT は固有 GAT、つまりジェネリックな IAT です。
ICEコンパイラー内部エラー の略で、コンパイラーがクラッシュする場合を指します。
ICHインクリメンタルコンパイルハッシュ の略で、HIR やクレートメタデータなどに対するフィンガープリントとして使用され、変更が行われたかどうかを確認します。これはインクリメンタルコンパイルにおいて、クレートの一部が変更され、再コンパイルすべきかどうかを確認するのに役立ちます。
infcx型推論コンテキスト(InferCtxt)。(rustc_middle::infer を参照)
推論変数、infer var 型、リージョン、const の推論を行うとき、推論変数 とは、推論しようとしているものを表す特別な型/リージョンの一種です。代数学における X のようなものと考えてください。たとえば、プログラム内の変数の型を推論しようとしている場合、その未知の型を表す推論変数を作成します。
インターン化インターン化とは、文字列など特定の頻繁に使用される定数データを格納し、そのデータ自体ではなく識別子(例: Symbol)によって参照することで、メモリ使用量と割り当て回数を削減することを指します。詳細は この章 を参照してください。
インタープリターconst 評価の中核であり、コンパイル時に MIR コードを実行します(詳細)。
イントリンシックイントリンシックは、コンパイラー自体に実装されているものの、(多くの場合は不安定な形で)ユーザーに公開される特殊な関数です。魔法のようで危険なことを行います(std::intrinsics を参照)。
IR中間表現 の略で、コンパイラーにおける一般的な用語です。コンパイル中、コードは生のソース(ASCII テキスト)からさまざまな IR へ変換されます。Rust では、これらは主に HIR、MIR、LLVM IR です。各 IR は、ある種の計算に適しています。たとえば、MIR は borrow checker に適しており、LLVM IR は LLVM が受け入れる形式であるため codegen に適しています。
IRLO、irlointernals.rust-lang.org の略語として使われることがあります。
アイテムstatic、const、use 文、モジュール、構造体など、言語における「定義」の一種です。具体的には、これは Item 型に対応します。
アイテムシグネチャアイテム(例: 構造体、関数)の型シグネチャ / 注釈 / ascription です。本体 内の型とは異なり、ここでは推論を行わないため、型推論の文脈でよく言及されます。
ITIAT関連型内の impl Trait の略。ATPIT とも呼ばれます。
lang item言語自体に組み込まれた概念を表すアイテムです。たとえば、SyncSend のような特殊な組み込みトレイト、Add のような演算を表すトレイト、またはコンパイラーによって呼び出される関数などです(詳細)。
後期束縛ライフタイム呼び出しサイトで置換されるライフタイム / リージョン。HRTB 内で束縛され、liberate_late_bound_regions など、コンパイラー内の特定の関数によって置換されます。早期束縛ライフタイム と対比してください(詳細)。
ローカルクレート現在コンパイルされているクレートです。これは、ローカルクレートの依存関係を指す「上流クレート」と対比されます。
loweringより高水準の IR をより低水準の IR に変換する行為です。例: AST lowering(AST から HIR)や HIR ty lowering(HIR から middle ty IR)。
LTA遅延型エイリアスmiddle ty IR 内でエイリアスとして「適切に」表現される型エイリアスです。(即時)型エイリアスでは、HIR ty lowering 中に参照サイトが基礎となるエイリアス先の型(インスタンス化後の型エイリアスの RHS)へ展開されるのに対し、これは参照サイトが AliasTylowering されます。
LTOリンク時最適化 の略で、最終バイナリがリンクされる直前に行われる LLVM が提供する一連の最適化です。たとえば、最終プログラムで一度も使用されない関数を削除するような最適化が含まれます。ThinLTO は LTO の一種で、もう少しスケーラブルかつ効率的であることを目指しますが、一部の最適化を犠牲にする可能性があります。Rust リポジトリの issue で「FatLTO」について読むこともあるかもしれませんが、これは non-Thin LTO に付けられた愛称です。LLVM のドキュメント: こちらこちら
LLVM(実際には頭字語ではありません :P)オープンソースのコンパイラーバックエンドです。LLVM IR を受け取り、ネイティブバイナリを出力します。さまざまな言語(例: Rust)は、LLVM IR を出力するコンパイラーフロントエンドを実装し、LLVM がサポートするすべてのプラットフォームへコンパイルするために LLVM を使用できます。
メモ化将来それらを繰り返す必要を避けるために、(純粋関数呼び出しのような)純粋な計算の結果を格納するプロセスです。これは通常、実行速度とメモリ使用量の間のトレードオフです。
middle ty IR型チェッカーとトレイトソルバーによって使用される、モジュール rustc_middle::ty で定義された型の集合です。これらは本質的に IR を形成します。
MIR型チェック後に borrowck と codegen で使用するために作成される 中水準 IR詳細)。
Miri(unsafe な)Rust コード内の未定義動作を検出するためのツールです(詳細)。
単相化型や関数のジェネリックな実装を取り、それらを具体的な型でインスタンス化するプロセスです。たとえば、コード内には Vec<T> があるかもしれませんが、最終的な実行可能ファイルには、プログラム内で使用される具体的な型ごとに Vec コードのコピー(例: Vec<usize> 用のコピー、Vec<MyStruct> 用のコピーなど)が含まれます。
正規化より標準的な形式へ変換することを指す一般的な用語ですが、rustc の場合は通常、関連型の正規化 を指します。
newtype何らかの別の型を包むラッパー(例: struct Foo(T)T に対する「newtype」です)。これは Rust でインデックスにより強い型を与えるためによく使用されます。
ニッチレイアウト最適化に 使用可能な 型の無効なビットパターンです。一部の型は特定のビットパターンを持つことができません。たとえば、NonZero* 整数や参照 &T は 0 のビット列では表現できません。これは、コンパイラーが無効な「ニッチ値」を利用してレイアウト最適化を行えることを意味します。この応用例の1つが Option 風 enum における判別子の省略 であり、別のフィールドを必要とせずに、型のニッチを enum「タグ」 として使用できるようにします。
NLL非字句的ライフタイム の略で、Rust の借用システムを制御フローグラフに基づくものにする拡張です。
node-id または NodeIdAST または HIR 内の特定のノードを識別するインデックスです。段階的に廃止され、HirId に置き換えられつつあります。詳細は HIR の章 を参照してください。
オブリゲーショントレイトシステムによって証明されなければならないものです(詳細)。
プレースホルダー注: skolemization は placeholder によって非推奨になっています。「for-all」型(例: for<'a> fn(&'a u32))周辺のサブタイピングを扱う方法であり、高ランクのトレイト境界(例: for<'a> T: Trait<'a>)を解決する方法でもあります。詳細は placeholder と universe の章 を参照してください。
pointNLL 解析で、MIR 内の特定の場所を指すために使用されます。通常は制御フローグラフ内のノードを指すために使用されます。
射影「相対パス」を指す一般的な用語です。たとえば、x.f は「フィールド射影」であり、T::Item「関連型射影」 です。
昇格された定数関数から抽出され、static スコープへ持ち上げられた定数です。詳細は このセクション を参照してください。
プロバイダークエリを実行する関数です(詳細)。
量化された数学や論理では、存在量化と全称量化は「それが真となる型 T は存在するか?」や「これはすべての型 T について真か?」のような問いを尋ねるために使用されます。詳細は 背景の章 を参照してください。
クエリコンパイル中の部分計算です。クエリ結果は、現在のセッション内またはインクリメンタルコンパイルのためにディスクへキャッシュできます(詳細)。
リカバリーリカバリーとは、パース中に無効な構文(例: カンマの欠落)を処理し、AST のパースを継続することを指します。これにより、ユーザーに疑似的なエラー(例: 構造体定義にエラーが含まれているときに「フィールドが見つからない」エラーを表示すること)を表示することを避けられます。
リージョン文献や borrow checker でよく使われる「ライフタイム」の別名です。
rib名前リゾルバー内のデータ構造で、名前に対する単一のスコープを追跡します(詳細)。
RPIT戻り値位置の impl Trait の略。TAITATPIT のような、全称的なものではなく存在的な impl Trait です(リファレンスを参照)。
RPITITtrait 内の戻り値位置の impl Trait の略。RPIT とは異なり、これはジェネリック関連型(GAT)へ脱糖されます。RFC 3425 で導入されました(詳細)。
rustbuild 👎Rust で書かれた bootstrap の部分を指す 非推奨 の用語
被照合式被照合式とは、match 式や同様のパターンマッチ構文で照合対象となる式です。たとえば、match x { A => 1, B => 2 } では、式 x が被照合式です。
sessコンパイラーの セッション。コンパイル全体で使用されるグローバルデータを格納します。
サイドテーブルAST と HIR は一度作成されると不変であるため、特定のノードの id によってインデックス付けされたハッシュテーブルの形で、それらに関する追加情報を保持することがよくあります。
シジルキーワードに似ていますが、完全に非英数字トークンで構成されるものです。たとえば、& は参照を表すシジルです。
健全性型理論の専門用語です。大まかには、型システムが健全であれば、型チェックに合格するプログラムは型安全です。つまり、(safe Rust では)誤った型の変数へ値を強制的に入れることは決してできません(「完全性」を参照)。
スパンユーザーのソースコード内の位置で、主にエラー報告に使用されます。これは、ファイル名/行番号/列のタプルを強化したようなものです。開始/終了点を保持し、さらにマクロ展開やコンパイラーによる脱糖も追跡します。しかも、すべてが数バイトに詰め込まれています(実際には、テーブルへのインデックスです)。詳細は Span データ型を参照してください。
subst 👎型や定数式などの内部にあるジェネリックパラメーターを、substs を供給することで具体的なジェネリック引数へ 置換する 行為です。現在のコンパイラーでは インスタンス化 と呼ばれています。
substs 👎与えられたジェネリックアイテムに対する 置換(例: HashMap<i32, u32> における i32u32)です。現在のコンパイラーでは ジェネリック引数 のリストと呼ばれています(ただし、厳密に言えばこれら2つの概念は異なることに注意してください。文献を参照してください)。
sysroot実行時にコンパイラーによって読み込まれるビルド成果物のディレクトリです(詳細)。
タグenum/ジェネレーターの「タグ」は、アクティブなバリアント/状態の 判別子 をエンコードします。タグは「直接的」(単にフィールド内に判別子を格納する)な場合もあれば、「ニッチ」 を使用する場合もあります。
TAIT型エイリアス impl Trait の略。RFC 2515 で導入されました。
tcxコンパイラーの主要なデータ構造である「型付けコンテキスト」(TyCtxt)の標準的な変数名です(詳細)。
'tcxTyCtxt によって使用される割り当てアリーナのライフタイムです。コンパイルセッション中にインターン化されるほとんどのデータは、このライフタイムを使用します。ただし、HIR データは例外で、'hir ライフタイムを使用します(詳細)。
トークンパースの最小単位です。トークンは字句解析後に生成されます(詳細)。
TLSスレッドローカルストレージ。各スレッドが(すべてのスレッドで変数を共有するのではなく)独自のコピーを持つように変数を定義できます。これは LLVM といくつかの相互作用があります。すべてのプラットフォームが TLS をサポートしているわけではありません。
トレイト参照、trait ref トレイトの名前と、適切なジェネリック引数のリストです(詳細)。
trans 👎translation の略で、MIR を LLVM IR に変換するコードです。codegen に改名されました
Ty型の内部表現です(詳細)。
TyCtxtコード内で tcx と呼ばれることが多いデータ構造で、セッションデータとクエリシステムへのアクセスを提供します。
UFCS 👎universal function call syntax の略で、メソッドを呼び出すための曖昧さのない構文です。この用語はもう使われていません! 完全修飾パス / 構文 を推奨します(詳細リファレンスを参照)。
非居住型値を持たない 型です。これは、正確に1つの値を持つ ZST とは同じではありません。非居住型の例は enum Foo {} で、これはバリアントを持たないため、決して作成できません。そのような値は操作対象として存在しないため、コンパイラーは非居住型を扱うコードをデッドコードとして扱うことができます。!(never 型)は非居住型です。非居住型は 空型 とも呼ばれます。
upvarクロージャの外側からクロージャによって捕捉された変数です。
変性ジェネリックパラメーターの変更がサブタイピングにどのように影響するかを決定します。たとえば、TU のサブタイプである場合、Vec<T>Vec<U> のサブタイプです。これは Vec がそのジェネリックパラメーターに対して 共変 であるためです。より一般的な説明については 背景の章 を参照してください。型チェックが変性をどのように処理するかの説明については、変性の章 を参照してください。
バリアントインデックスenum 内で、バリアントに0から始まるインデックスを割り当てることでバリアントを識別します。これは完全に内部的なものであり、ユーザーが上書きできる 「判別子」(例: enum Bool { True = 42, False = 0 })と混同しないでください。
整形式性、wfness、wf意味論的には、意味のある結果へ評価される式です。型システムにおいては、型システムの規則に従う型関連の構成要素です。
ワイドポインター追加のメタデータを持つポインター。詳細は ファットポインター を参照してください。
ZSTゼロサイズ型。値のサイズが0バイトである型です。2^0 = 1 であるため、このような型は正確に1つの値を持つことができます。たとえば、()(ユニット)は ZST です。struct Foo; も ZST です。コンパイラーは ZST の周辺でいくつかの優れた最適化を行えます。
関連項目も参照してください https://doc.rust-lang.org/reference/glossary.html#glossary