ここで、Javaに実装されたSimpleForthInterpreterを見つけました。
でも使いたいのなら意味がわからないの?
Forth通訳者の利点は何でしょうか。
- JVMによって実行される最終的なコンパイル済みコードがまだ「バイトコード」である場合、Forthインタープリターは何をしますか?
- 効率的でタイトなプログラムを書くのに役立ちますか?
- Forthでコードを記述し、インタプリタがそれをJavaに変換しますか?
あなたの考え...
ここで、Javaに実装されたSimpleForthInterpreterを見つけました。
でも使いたいのなら意味がわからないの?
Forth通訳者の利点は何でしょうか。
あなたの考え...
効率的/タイトなプログラムを書くのに役立ちますか?
それは議論の余地があります。
FORTH の人々は、それが速いと言うでしょう。しかし、Java で実装された FORTH インタープリター上で実行される FORTH プログラムの実行速度が、Java で直接実装された同等のプログラムの速度に匹敵するとは思えません。まず、JIT コンパイラーは、プレーンな Java バージョンの場合ほど、FORTH インタープリターを適切に最適化することができません。
「タイト」が「メモリ使用量が少ない」という意味であれば、その差はわずかだと思います。「FORTH in Java」と「プレーン Java」の両方のケースで、Java JVM のすべてのメモリ オーバーヘッドがあることに注意してください。これは、FORTH コード密度と同等のコンパイル済み Java コード密度の比較を圧倒する可能性があります。
あなたの質問への答えは次のとおりです。
これは、何らかの入力を受け取り、何らかの出力を生成する単なるプログラムです。入力は Forth スクリプトです。一部の非常に主要なシステムを除いて、実際にバイトコードを生成することはほとんどありません。jRuby、Clojure、Scala などの大きなシステムはバイトコードを生成します。
しかし、あなたの Forth インタープリターは、おそらく Java で書かれたスクリプト インタープリターです。受け入れる入力は一種のプログラムであるため、最終的には優れた二重間接実行になります。CPU上で実行されているjvmを介して実行されるバイトコードインタープリターを介して実行されるForth。
これを CPU エミュレーターで実行するか、Forth でインタープリターを作成すると、トリプル間接にすることができます。(Intel CPU はほとんどのx86 opcode を実行前に micro-opsに変換しているため、ある意味では既にそうなっています。:-)
とにかく、要点は、Java のようなかなり静的な言語で書かれたプログラムは、複雑なユーザー入力を取得して実行したい場合があるということです。または、プログラムの作成者は、より簡単に行うことができるものを持っている可能性があります。 javaとforthの両方で書いてください。
理解できるまで、これらすべてについて考える必要があります。
Java で Forth インタープリターを実装する Forth システムがいくつかあります。実際に 4 番目のソースを JVM クラスにコンパイルし、インタープリターを必要とせずに Forth コードを直接実行できるようにするものを 2 つ知っています。