問題タブ [intermediate-language]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c# - Visual Studio で生成された中間コード
なぜ中間コードが必要なのかは、スタック オーバーフローの投稿で説明されているので、私の質問は、
中間コードはソリューションに保存されていますか?
生成された IL 全体を表示するにはどうすればよいですか?
Denis Bauer による Reflector および File Disassemblyr アドイン。実際にはアセンブリからソース プロジェクトを生成しますが、Reflector 自体は逆アセンブルされたソースのみを表示し、中間コードは表示しません。
compiler-construction - 3 アドレス コードとシンボル テーブル
私は OCaml で趣味のリターゲット可能な C コンパイラに取り組んでおり、それをボトムアップで構築しています。これまでのところ、要約された注釈付きの AST タイプがあります。
および 3 つの住所コード タイプ (ここでも要約):
注釈を無視してAST を TAC ノードのリストに変換する関数を作成しました。これに関して、私は2つの質問があります:
型注釈付き AST を TAC ノードのリストに変換する場合、どうすればよいですか? TAC ノードにも注釈を追加する必要がありますか? これにより、後で高レベルの
int
/char
型をI16
/のような低レベルの型に変換できますI8
。スコーピングはどのように処理すればよいですか?
Var
異なるスコープに同じ名前を持つ 2 つの がある場合はどうなりますか?
compiler-construction - 型付き中間言語の語用論
コンパイルの傾向の 1 つは、型付き中間言語を使用することです。System F-omega の変形であるHaskell のghc
中間core
言語は、このアーキテクチャの例です [1]。もう 1 つは LLVM で、コアに型付き中間言語があります [2]。このアプローチの利点は、コード ジェネレーターの一部を構成する変換のエラーを早期に検出できることです。さらに、型情報は最適化およびコード生成時に使用できます。
効率性のために、型指定された IR は型を推測するのではなく、型チェックされます。型チェックを高速化するために、各変数と各バインダーは型を持ち、型チェックを容易にします。
ただし、コンパイラ パイプラインの多くの変換では、新しい変数が導入される場合があります。たとえば、正規化変換K(.)
はアプリケーションを変換する可能性があります
みたいな表現に
質問。新しく導入された変数に型を与えるという問題をコンパイラがどのように処理するのだろうか。K(M)
上記の例とでは、型チェックを再実行しK(N)
ますか? 手間じゃないですか。また、環境を渡す必要がありますか? 型チェックの再実行を避けるために、AST ノードから型情報へのマップを使用していますか?
S. Marlow、S. Peyton Jones、The Glasgow Haskell Compiler .
compiler-construction - シングルパスコンパイラの中間表現?
私はドラゴンブックを読んでいて、シングルパスコンパイラについて疑問に思っているので、間違っている場合は修正してください。ただし、コンパイラが分析を進めるにつれて、より正確な中間表現が生成されます。とにかく、最適という言葉の方が適しているかもしれません。シングル パス コンパイラは各フェーズを 1 回だけ実行し、複数のフェーズを 1 つのパスにグループ化することがありますが、これは中間表現があまり最適ではないということですか? これについての私の考え方に何か問題があると確信しているので、私が行った間違った仮定を自由に修正してください (または、この質問がどれほどばかげているかを教えてください)。
また、中間表現に問題がなければ、コンパイル時間が遅くなるマルチパス コンパイラを使用する必要があるでしょうか。
c# - ILコードのそれらの記号は何ですか?
IL_0000
IL コードのこの記号 ( など) は何ですか? これは実際のメモリ ヒープ アドレスですか?
c# - InvalidProgramException (無効な IL コード)?
実行時に次のコードを IL コードとして出力しようとしていました。
LINQPad ショー:
C#で再現しようとしています:
TestSubject クラス:
私に次の例外を与えます:
System.InvalidProgramException {"Die Common Language Runtime has ein ungultiges Programm gefunden."}
それの何がいけないの?
c# - C# 6 自動初期化プロパティとバッキング フィールドの使用
C# 6 より前では、プロパティの初期化では、バッキング フィールドを使用して既定値を初期化しませんでした。C#6 では、バッキング フィールドを使用して、新しい自動初期化プロパティで初期化します。
C#6 より前の IL がプロパティ定義を使用して初期化する理由に興味があります。これには特定の理由がありますか?それともC#6より前に適切に実装されていませんか?
C# 6.0 より前
コンパイラ生成コード (IL 表現)
C#6
コンパイラ生成コード (IL 表現)