ネイティブの c++ を、実行時にコンパイルされる何らかの中間言語にコンパイルすることは、理論的および/または実際的に可能ですか?
同じように、「ポータブル」はこれを示すために使用される用語ですか?
ネイティブの c++ を、実行時にコンパイルされる何らかの中間言語にコンパイルすることは、理論的および/または実際的に可能ですか?
同じように、「ポータブル」はこれを示すために使用される用語ですか?
コンパイラ インフラストラクチャであるLLVMは、C++ コードを解析し、LLVM IR (IR は Intermediate Representation の略) と呼ばれる高級アセンブリ言語のような中間言語に変換します。これは機械に依存しない言語です。IR の生成は 1 つのフェーズです。次のフェーズでは、さまざまなオプティマイザーを通過します ( passと呼ばれます)。次に、マシン コード (つまり、マシン依存コード) を発行する第 3 段階に到達します。
モジュールベースの設計です。あるフェーズ (モジュール) の出力が別のフェーズの入力になります。IR をディスクに保存して、残りのフェーズを後で、おそらくまったく別のマシンで再開できるようにすることができます。
では、IR を生成してから、実行時に残りの作業を行うことができますか? 私はそれを自分で行ったことはありませんが、LLVM は本当に有望なようです。
LLVM IR のドキュメントは次のとおりです。
Stackoverlow に関するこのトピックは、次のように興味深いようです。
- LLVM の利点:
- JIT - コードを動的にコンパイルして実行できます。
そして、これらの記事はよく読まれています:
LLVM の設計(drdobs.com)