問題タブ [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.

0 投票する
2 に答える
330 参照

.net - .NET では、コール スタックはスレッドに密接に結び付いていますか?

関数の実行中に現在のスタックへのポインターを設定し (後で取得する)、現在のスレッドを解放し (コール スタックをアンワインドせずに)、それをスレッド プールに戻すことはまったく可能ですか? そして、そのスレッドが中断したところから別のスレッドを取り上げますか? 関数を呼び出す人が現在のスレッド コンテキストが変更されたことを知らないことを意味することはわかっています。おそらく、このようなことを行うためにカスタム IL コードを記述する必要がありますが、これを行う方法はありますか?

0 投票する
4 に答える
5346 参照

.net - .NET IL コードの逆コンパイルが簡単なのはなぜですか?

ネイティブ x86 バイナリの逆コンパイルと比較して、.NET IL コードをソース コードに逆コンパイルする方が簡単なのはなぜですか? (Reflector はほとんどの場合、非常に優れたソース コードを生成しますが、C++ コンパイラの出力を逆コンパイルすることはほとんど不可能です。)

IL に多くのメタデータが含まれているためでしょうか。それとも、IL が x86 命令よりも高度に抽象化されているためですか? いくつかの調査を行ったところ、次の 2 つの有用な記事が見つかりましたが、どちらも私の質問には答えていません。

0 投票する
6 に答える
5186 参照

compiler-construction - 言語を作るには、優れたバックエンドが必要です

コンパイル言語を作りたい。現在、バックエンドを評価しています。これまでのところ、実行速度、コンパイル速度、および TCC と呼ばれる小さくて使いやすいコンパイラーを理由に C を検討しています。

ここでの中間言語としての使用についての議論を読んで、ガベージ コレクションと互換性を持たせ、例外を処理する方法を考えようとしています。これまでのところ、両方を解決できると思いますが、オーバーヘッドが大きくなります。

他の可能なバックエンドについての私の考えのいくつかを次に示します。

  1. アセンブリ: 移植性がなく、プログラムを作成するのが非常に面倒です。
  2. .NET: 本当に遅く感じます。起動に 5 秒、Ironpython と Boo で 1+2 を評価するのに 5 秒。大きなライブラリがないと実行できません。
  3. JVM: 少し遅く感じます。バイナリ ライブラリにはアクセスできません。大きなライブラリがないと実行できません。
  4. LLVM: Windows はサポートされていません。コンパイルされた実行可能ファイルのサイズは 16 mb 以上だと聞きました
  5. C--: 未発達に見えます。
  6. C++: おそらく。バンドルできる素敵な小さな無料のものを見つけることができません。

私の考えを変えたり、このリストに追加したい人はいますか?

編集

私は最近LLVMを試しています。プリコンパイルされたバイナリがあり、ネイティブ アセンブリにコンパイルできることがわかりました。

http://www.antlr.org/wiki/display/CS652/Generating+machine+executable+binaries+with+LLVM

手順は次のとおりです。

  1. LLVM アセンブリで llvm-as を実行すると、LLVM バイトコード ファイルが生成されます。
  2. LLVM バイトコード ファイルに対して llc を実行して、アセンブリ ファイルを生成します。
  3. アセンブリ ファイルに対してアセンブラを実行して、オブジェクト ファイルを生成します。(または、外部にインストールされた c コンパイラに依存していると思われる llvm-ld を実行します)
  4. gcc などで実行可能ファイルにコンパイルします。
0 投票する
4 に答える
2168 参照

c# - IL のコンパイル後の変更を実行するツールはどれですか?

PostSharp についての最近の言及で、次のことを思い出しました。

私が働いていた昨年、PostSharp を使用してインストルメンテーションをコードに挿入することを考えていました。これは、Team Foundation Server チーム ビルド/継続的統合環境にありました。

考えてみると、PostSharp の動作方法 (コンパイラによって生成された IL を編集する) についてしつこい感じがしました。これは少し気になりました。

私は、PostSharp が正しく機能しないことをあまり心配していませんでした。このようなツールについて聞いたのは初めてだったので心配でした。他のツールがこれを考慮していないのではないかと心配していました。

実際、作業を進めていくと、PostSharp が元の IL がどのフォルダーにあるかについて混乱してたという事実に起因する問題がいくつか発生しました。これにより、ビルドが壊れていました。プロジェクト参照を解決する MSBUILD ターゲットとの競合が原因のようです。この競合は、PostSharp が一時ディレクトリを使用して変更されていないバージョンの IL を保存しているためと思われます。

とにかく、当時は参照する StackOverflow がありませんでした。ビルド プロセスの一部として IL を編集するツールを他にご存知でしょうか。または、マイクロソフトがそのようなツールを Visual Studio、MSBUILD、チーム ビルドなどで考慮に入れているかどうか。


更新:回答ありがとうございます。

要するに、少なくとも VS 2010 では、Microsoft はこの種のことが起こる可能性があることを認識しておく必要があるようです。したがって、VS2010 でこの領域に問題がある場合、Microsoft が責任を共有する可能性があります。

0 投票する
1 に答える
787 参照

oracle - PL/SQL はテール コールの最適化を実行しますか?

私は言語にかなり慣れていないので、末尾呼び出しが最適化されているかどうか疑問に思っていました。他の言語では、マシンコードまたは中間表現を調べて自分で理解することができましたが、PL/SQL でそれを行う方法がわかりません。

前もって感謝します。

0 投票する
2 に答える
6638 参照

.net - .NETは実際にいつどのようにコードをコンパイルしますか?

C#、VB、.NETを使用してアプリを作成するとします。ビルドを押すと、実際にコードがコンパイルされますか?いくつかのアセンブリでredgatesリフレクターを使い始めて、コードを逐語的に見るまで、そう思っていました。ループが展開され、さらに多くの最適化が行われることを期待していましたが、代わりに何もありませんでした。

では、コンパイルは実際にいつ行われますか?ビルドするとコードはIL(Intermediary Language)になり、実行するとCLRに読み込まれると思いますか?CLR中にのみ最適化され、ビルド時には最適化されませんか?

0 投票する
3 に答える
6907 参照

c# - .NET IL .maxstackディレクティブはどのように機能しますか?

.maxstackが実際にどのように機能するのか知りたいのですが。宣言しているタイプの実際のサイズではなく、タイプの数と関係があることを私は知っています。私の質問は次のとおりです。

  1. これは関数だけに当てはまりますか、それとも私たちが求めているすべての関数に当てはまりますか?
  2. .maxstackが宣言されている関数の場合でも、分岐している場合、maxstackが何であるかをどのように知ることができますか?あなたは行ってすべての「パス」を見て、可能な最大値を返しますか?
  3. 16に設定し、実際に17個の変数がある場合はどうなりますか?
  4. 256に設定した場合、ペナルティが大きすぎますか?
0 投票する
4 に答える
321 参照

c# - ILコードに行を追加し、プログラムにブレークポイントを追加するとどうなりますか?

メソッドの最初に1行を追加した場合、最初の行でVisual Studioを介してブレークポイントを設定すると、最初の行を指すのでしょうか、それとも2番目の行を指すのでしょうか。間違った行にフラグが立てられる場合、後で定期的なデバッグセッションを確実にするために.exeファイルを編集するときに何かできることはありますか?

線xをYに設定するようなものはありませんか?どこかでそのようなものを見たのを覚えていますが、.NETが関連しているかどうかはわかりません。

0 投票する
2 に答える
441 参照

.net - IL(中間言語)入門

誰かがILを始めるための良いリソースを提案できますか?特に、良い本やスクリーンキャストを知っている人がいたら、フィードバックをいただければ幸いです。

0 投票する
2 に答える
216 参照

context-free-grammar - CFG から IL への変換

任意の IL から CFG を構築し、その CFG を IL に変換したいと考えています。もちろん、CFG 内の頂点の順序は、元の IL 命令の順序と同じではありません。

これは問題ありませんが、いくつかのものが過度に複雑になります。想像:

これは次のようなフロー グラフになります: (ジャンプ B) -> (ジャンプ C) -> (リターン) これはもちろん単純化された例ですが、CFG から変換するときの問題を示しています。

学界でこのトピックに関する情報はありますか? グラフをボトムアップでトラバースするのは非常にエレガントだと思いましたが、より複雑なケースではうまくいきません。

解決策は、トップダウンで歩いて CF マージを検索することかもしれませんが、その場合、ループを正しく処理できません。したがって、これを正しく行う唯一の方法は、可能性のある CF マージが発生した場合にそれを検索することのようです。そうでない場合は、ループが必要です。つまり、ループが優先され、その後に続くパスが評価されます。これは解決可能な問題のように思えますが、非常にコストがかかるため、問題に対するより洗練された解決策が存在する可能性があります。また、「break」ステートメントについて考えると、ループによって CF マージが発生する可能性もあります。