私が設計しているプログラミング言語のインタプリタとトレース JIT を書きたいと思っています。私はすでに C++ でのプログラミングの長年の経験がありますが、おそらく新しい代替手段の方が優れているのではないかと考えていました。C++ の時代に最もイライラしたことの 1 つは、扱いにくいワンパス コンパイラ モデルに対処するためにヘッダー ファイルを使用しなければならないことでした。問題は、すべての言語がこの目的に等しく適しているわけではないということです。私のトレース JIT では、実行可能コードをメモリに書き込み、インタープリターがそのコードを呼び出すことができる必要があります。また、生成されたコードをホスト関数にコールバックできるようにする必要もあります。
Go を調べ始めたところ、この言語にはポインターはありますが、ポインター演算はありませんでした。これはすぐに大きな問題として私を襲った。独自のアロケータとガベージ コレクタを書きたいと思うかもしれません。言語オブジェクトがメモリに配置される方法を綿密に制御し、特定のフィールドのアドレスを取得してそれらに書き込むことができるようにする必要があります。これに対処する方法がない限り、Go は私の目的に対して十分に低レベルではないようです。
D言語は有望なようです。ポインター演算と、D の呼び出しと呼び出しに必要な ABI の明確な概要が含まれています。私はそれについて多くの良いことを聞いています。また、コンパイラの作成に適したガベージコレクションもありますが、まだよくわからないことがいくつかあります。
Dには、メモリのチャンクを実行可能としてマークできる標準ライブラリがありますか?
自分の GC を使用して、自分で管理したい大量のメモリを割り当て、そこに大量のポインターを配置すると、D のガベージ コレクターで問題が発生しますか?
あなたの経験では、D は C コードとどの程度うまく相互運用できますか? C 動的ライブラリをロードして呼び出すのはかなり簡単ですか?
最後に、全体的なサポートの側面があります。ここで Linux で D を使用したことがある人にとって、ツールチェーンはどのくらい優れていますか? 問題はありますか?D で JIT コンパイラを書いた人はいますか? もしそうなら、その経験はどうでしたか?