問題タブ [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# - 擬似コードに関して言えば、MIL の IAsyncStateMachine の MoveNext は何をしますか?
async
-を使用したときに作成されるステート マシンを理解しようとしていawait
ます。C# コードの単純な部分を取り上げます
Roslyn を使用して、逆コンパイルされた IL を取得します。
私が理解したいのは、MoveNext()
メソッドがどのように機能するかです。基になるアクションが完了しているかどうかを確認するためにチェックが行われる場所だと思います。誰かがそれを疑似コードに翻訳できますか?
c# - Generics のプレースホルダーは実際のデータ型としてコンパイルされていますか?
私の質問は、Generics (C#) がどのように正確にコンパイルされるかに関するものです。
コードサンプル
質問
- の
Foo
型はMyMethod
具象型としてコンパイルされますか? これには、同じクラスの複数のバージョンを作成する必要があるのではないのではないかと思います (異なる型でインスタンス化する必要があります)。 - 低レベルでは、ジェネリックはどのように実装されていますか? クラス/メソッドに対する一般的な値は、特別な隠しフィールドとして保存されていますか?
私の仮定は間違っていると思いますが、舞台裏の内部の仕組みを感じようとしています.
アップデート
この記事を正しく理解していれば、IL の新しいクラスは実行時に具象型で作成されます。
その結果、ランタイムはジェネリック型の別のバージョンを生成し、MSIL の適切な場所で long に置き換えます。特殊化された各ジェネリック クラスには値の型がネイティブに含まれているため、変換は不要になりました。
optimization - InstNamer パスを必要なパスとして llvm に追加
最適化の前に InstNamer パスを実行する必要がある llvm で最適化を実行しています。現在、「-instnamer」を手動で opt に渡して実行しています。コードで必須パスとして InstNamer を追加する方法はありますか?
AU.addRequired(); をやってみました。
しかし、それは「宣言されていない識別子 'InstNamer'」をスローするため、コンパイルされません。
これを行う方法はありますか?
matlab - MATLAB と GNU Octave は中間表現を使用しますか?
MATLAB および GNU Octave インタープリターは、古い意味でのインタープリターのように機能しますか? 彼らは各行を解析し、機械語コードに変換して実行しますか、それとも最初にコード全体を中間表現 (Python バイトコード、perl AST など) に変換してから IR を解釈しますか。
GNU Octave と MATLAB の場合、(難読化のためだけではなく) 効率のためにバイトコードまたは中間表現を使用することはかなり妥当と思われます。
scala - 外部ツールから Scala 構文ツリーを使用する
(タイトルが示すように) scala 構文ツリーを使用するツールを開発したいと思います。より具体的には、各コンパイル フェーズの後にツリーを使用できれば素晴らしいと思います。
私の研究は、私が探していたもののように思われる Dotty の TASTY 交換フォーマットに私を導きました。おそらくそうです。ただし、それを抽出して使用する方法を理解するための適切なドキュメントをオンラインで見つけることができませんでした。
また、dotc コンパイラ フラグも調べましたが、明白なアプローチがわかりませんでした。オプション「-print-tasty」に気付きましたが、期待される出力を確認できませんでしたか、何か不足していますか?
もちろん、scala プリンター (つまり、-Yshow-trees など) を使用して、各フェーズの後にいつでも AST を出力できます。これは私の唯一のオプションですか?もしそうなら、大丈夫です。
理想的には、もっと「機械に優しい」形式で AST を使用できれば素晴らしいと思います。TASTY は私が理論的に望んでいるもの、つまり AST のシリアル化のようですが、各フェーズの後でこれを抽出する方法がわかりません。
私の質問があまりにも些細なことだったり、すでに解決済みだったりしたら、申し訳ありません。どんなフィードバックでも大歓迎です! ありがとう !
PS: AST が JSON 形式でエンコードされている場合はどうなりますか? そのような scala ツール (つまり、Scala AST を JSON に変換して戻すツール) は理にかなっていますか?