私の言語バックエンドで関数と型を段階的に構築したいが、関数と型がうまく構築できないとき(ユーザー入力の問題のため)メインモジュールとコンテキストを汚染しない。llvm:JITコンテンツを徐々に構築する方法
これはan earlier questionです。 私が見ることができる1つの戦略は、一時モジュールとLLVMContext
のすべてをビルドし、成功後にメインコンテキストに移行するだけですが、現在のAPIで可能かどうかはわかりません。たとえば、LLVM機能の分離された島を表現するはずなので、さまざまなコンテキスト間でそのコンテンツを移行することはわかりませんが、おそらく、すべてを.bcに保存して別の場所に読み込むという選択肢がありますか?
これを達成するために他にどのような戦略をお勧めしますか?
長時間実行されているサービスプロセスから呼び出され、グローバルLLVMContextを保持すると、おそらく無制限になるため、複数のLLVMContextを保持する必要があります。個々のLLVMContextはメモリ管理とガベージコレクションを改善します(シングルスレッドプロセス内で実行されている場合でも) – lurscher
@lurscher:私は真剣に "無限に成長するだろう"と真剣に疑う。単一のコンテキストとベンチマーク/プロファイリングを使用して実装することをお勧めします。ほとんどのメモリ使用量は重要ではありません。リンク先のページにあるように、コンテキスト間でメモリ内のデータ構造を渡すことはできません。私はあなたがそれらをビットコードに直列化し、反対側で(別のコンテキストで)それらを直列化解除することができると想像します。 –
ええ、私もそう思っていました。ありがとう! – lurscher