問題タブ [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.
.net - .NETILプロパティセッター
このクラスを検討してください。
ここで、コンパイラーによって出力されたILコードを調べて、Bar
プロパティのセッターを探します。
なぜそれをするのldarg.0
ですか?最初の(インデックス0)引数には何がありますか?メソッド/プロパティセッターは1つの引数しかとらないので...
同じことがゲッターにも当てはまります。
なぜ.locals init
?なぜldarg.0?なぜそれはldfld
バッキングフィールドのを行い、それを返すだけではないのですか?:)
.net - .ILファイルを編集するためのツール?
現在、私はこの目的のためにメモ帳を使用しています。.NET中間言語ファイルを編集するための特定のツールはありますか?
Dotnet IL Editor(DILE)は、ファイルを編集する前に逆アセンブルします。その機能は必要ありません。最も効率的な方法で必要なのは、実際の編集だけです。
c# - ILGenerator: 作成したメソッドを読み込む
System.Reflection.Emit を使用していますが、ある時点で MethodBuilder からデリゲートを作成したいと考えています。
静的関数からデリゲートを作成するには、次のようなものが使用されていることがわかりました。
しかし今、私は立ち往生しています。MethodBuilder を ldftn する方法が必要です。次に、次の行の命令を発行する方法が必要です。そして、ネイティブ int を受け入れるコンストラクターを取得する方法がわかりません。
助言がありますか?
.net - この仮想メソッド呼び出しは、封印されたメソッド呼び出しよりもどのように高速ですか?
仮想メンバーと封印されたメンバーのパフォーマンスをいじくり回しています。
以下は私のテストコードです。
出力は
これによると、仮想呼び出しは封印された呼び出しよりも速いので、私は何か間違ったことをしているに違いありません。
「コードの最適化」をオンにしてリリースモードで実行しています。
編集:VSの外部で(コンソールアプリとして)実行している場合、時間は猛暑に近づいています。しかし、ほとんどの場合、仮想は前面に出てきます。
.net - F# インタープリター (fsi.exe) も、F# コンパイラー (fsc.exe) と同様に中間言語コードを生成しますか?
現在、私は大学で F# についてのレクチャーを行っています。F# インタラクティブ コンソールと F# コンパイラについて質問があります。
F# コンパイラは、F# ソースのコンパイル時に Microsoft Intermediate Language (MSIL) コードを生成します。これは、書かれたプログラムを実行するときに、JIT コンパイラによってマシン コードに変換されます。
しかし、F# インタープリター コンソールは何をするのでしょうか? また、F# コードを 1 行ずつ MSIL に変換し、それを JIT してマシン コードに変換しますか? それとも、F# コードを直接マシン コードに変換しますか?
最初にそれを IL に変換する場合、JIT コンパイラーは完全なプログラムしかコンパイルしないため、おそらく IL インタープリターが存在すると思います。そうじゃない?
F# インタープリターが F# コードをどのように処理し、それを変換するかについてどう思いますか?
こんにちは、マーティン
.net - .NET インターフェイスの静的コンストラクターが実行されない
IL の .NET のインターフェイスで静的コンストラクターを定義できます。ただし、そうすると、インターフェイスでメソッドを実行するときに静的コンストラクターが実行されません。
何が起きてる?CLR 仕様 (Partition II、10.5.3.1) によると、いつ型初期化子が実行されるかは Partition I で指定されていますが、Partition I で型初期化子の実行への参照が見つかりません。
編集:
インターフェイスの静的初期化子を実行することはできますが、静的フィールドをインターフェイスに追加し、コード内のどこかでそのフィールドにアクセスすることによってのみ、フィールドが静的コンストラクターで実際に割り当てられていなくてもかまいません。そのため、インターフェイスでメソッドを呼び出しても静的コンストラクターは実行されないようですが、フィールドにアクセスすると実行されます。これはなぜですか?そして、これは仕様のどこに記載されていますか?
c# - メソッド呼び出しのすべての参照の統合テスト
それで、私はインターネットで少し探し回って、誰かがすでにここで車輪を発明したかどうかを確かめようとしています。私がやりたいのは、現在のプロジェクトを解析し、特定のメソッドへのすべての参照を見つけ、その引数を見つけて、データベースでその引数をチェックする統合テストを作成することです。例えば:
他のクラスは、IOCを使用してIContentProviderをコンストラクターに注入し、次のように記述できるようにします。
基本的に、単体テストはこれらすべての参照を検索し、テキストのセット["SomeDescriptor"、 "SomeOtherDescriptor"]を検索します。次に、データベースをチェックして、これらの記述子に行が定義されていることを確認できます。さらに、記述子はハードコーディングされています。
すべての記述子に対して列挙値を作成することはできますが、列挙には何千もの可能なオプションがあり、それはちょっとしたハックのようです。
さて、SOに関するこのリンク:Reflection + C#ですべての参照を取得する方法は、基本的に、非常に高度なIL解析なしでは不可能であると述べています。明確にするために; Reflectorなどは必要ありません。実行できる自動テストであるため、チームの他の開発者がDBレコードを作成せずにこのコンテンツを呼び出すコードをチェックインすると、テストは失敗します。
これは可能ですか?もしそうなら、誰かが見るためのリソースや変更するためのサンプルコードを持っていますか?
編集:あるいは、すべての参照を見つけようとするこのVSを行う別の方法ですか?最終結果は、レコードが存在しないときにテストを失敗させたいということです。
c# - C# コンパイラが TypeRef 情報を出力する方法に関する質問
C# 4.0 の新機能「オプション パラメーター」を試していたときに、これは興味深いことでした。
C# 4.0 で「オプションのパラメーター」を使用するには、次の 2 つの方法があることを知っています。
このコードをコンパイルし、IL Dasm を使用してアセンブリを表示すると、IL Dasm の「MetaInfo」ウィンドウに、次のような OptionalAttribute への型参照があることがわかります。
しかし、DefaultParameterValueAttribute の兆候はありません。何故ですか?
実際には、2 つの属性は両方ともここにあるべきではないと思います。これらはコンパイラによって異なる方法で扱われ、独自のフラグ値を持っているためです。私の言いたいことを説明するために、これを見てください:
これは、2 つのメソッドのメタデータです。各コード セクションの最後の行には、既定のパラメーター値が既に格納されていることがわかりますが、なぜ OptionalAttribute がまだ参照されているのでしょうか?
c++ - C++ からの中間コード
C++ プログラムを中間コードにコンパイルしたいと考えています。次に、現在のプロセッサのすべてのリソースを使用して中間コードをコンパイルします。
最初のステップは、最適化 (-O2) を使用して C++ プログラムをコンパイルし、リンカを実行して、ほとんどのコンパイル手順を実行することです。この手順は、オペレーティング システムやアーキテクチャに依存しない必要があります。
2 番目のステップでは、最初のステップの結果を、元のソース コードを使用せずに、現在のコンピューターのオペレーティング システムとプロセッサ用に、プロセッサの最適化と特別な命令 (-march=native) を使用してコンパイルします。2 番目のステップは高速で、最小限のソフトウェア要件で行う必要があります。
私はそれを行うことができますか?どうやってするの?
編集:
各プラットフォームとオペレーティングシステムのコンパイルを配布するのではなく、元のソースコードなしで、プロセッサのすべてのリソースを使用できるプラットフォームに依存しないプログラムを配布したいので、やりたいです。2 番目のステップが迅速かつ簡単であればよいでしょう。
同じアーキテクチャのプロセッサでも、機能が異なる場合があります。X86 プロセッサには SSE1、SSE2 などがありますが、それらは 32 ビットまたは 64 ビットです。一般的な X86 用にコンパイルすると、SSE の最適化が不足します。何年も経つと、プロセッサに新しい機能が追加され、新しいプロセッサ用にプログラムをコンパイルする必要があります。
c++ - 部分的な C++ プログラムの静的解析
プログラム全体ではなく、 C++ コードサンプルに対して静的解析プロジェクトを行うことを考えています。一般に、静的解析には単純な中間表現が必要ですが、そのような表現は、プログラム コード全体がないと正確に作成できません。
それでも、 Java用のそのようなツールがあることは知っています。それは基本的に欠落している情報を「推測」し、静的分析を行うことができます。
部分的な C++ コードを何らかの中間形式 (LLVM バイトコードなど) に変換するために使用できる同様のものはありますか?