2008/05/25

[Forth] Threaded Code

Threaded Code. マルチスレッドではない。コードの実行方法か。http://en.wikipedia.org/wiki/Forth_virtual_machine

言語を作るのなら重要項目の一つだね。

Threaded Code
このサイトが有名らしい。各種 threaded code を説明している。
Moving Forth: Part 1
図つきて各種 threaded code の説明がある。
Speed of various interpreter dispatch techniques V2
各 threaded code の性能比較。やはり DTC が速いのかな。repl-switch.c と switch.c の違いがよくわからん。make 一発で実行できるのが嬉しい。

Forth では次のような感じの実装になる。64bit アセンブラで。NASM ね。

rsi レジスタがバイトコードのアドレス。loadsq で rax に次に実行するバイトコードのアドレスをロードして(rsi はインクリメントされる)、ジャンプする。

Indirect threaded code

        lodsq
jmp qword [rax]

Direct threaded code

        lodsq
jmp rax

Token threaded code

        lodsq
jmp [token_table + rax * 8]

0 件のコメント: