langsmith:266
From: MAEDA Atusi <maeda-langsmith atusi.org>
Date: 12 Aug 2005 14:34:29 +0900
Subject: [langsmith:266] Re: evalやVMの分岐の仕方の用語
Tsuguo MOGAMI <mogami brain.riken.go.jp> writes: > たまたま見つけた、こちらでは > http://www.kt.rim.or.jp/~tyamamot/forthj/threaded-codej.html これ(の原文http://www.complang.tuwien.ac.at/forth/threaded-code.html) が,switch threading, call threading等の用語を使いはじめた本家だと思い ます. > コール命令を並べたマシンコードを生成する:サブルーチンスレッディング > 仮想機械命令の代わりにコール先のアドレスを並べる:直接スレッディング > 仮想機械命令からコール先をテーブル引き:トークンスレッディング > switch-case文をつかう:スイッチスレッディング > > となっていて、「直接スレッディング」の用法が違うようで混乱しています。 ささださんも同じ意味で使っていると思います.先のメールでは, switch threading (Cでポータブルに書ける) call threading (Cでポータブルに書ける) direct threading (GCC拡張を使う) の3つの比較をしていました. なお(上記のページにもありますが),もともとの意味では threaded code = direct threaded code でした.それ以前の技法では, while (1) { switch (*ip++) { case ADD: ... break; case ... } } とやっていたのですが,threaded codeという言葉は,「インタプリタのメ インループがない(NEXT処理で,直接次の命令ハンドラへ分岐する)」というこ とから付けられた言葉です.図で書くと,制御の流れが縫うように見えるので この名があります. 上記のwhile(1)...の手法(switch threading)をthreadingと呼ぶのは,この文 脈からするとおかしい,ということになりますが,「仮想機械の命令デコード のための分岐の手法はどれもthreadingと呼ぶ」という立場をErtlはとってい るようです. また,コンパイラによっては,上のcase ADD:の部分のコードを ADD: (加算の処理) *ip++ の値でテーブルを引いてジャンプ のようにコード生成するかも知れません.これだとthreadingと呼ぶにふさし いことになります.(そんなコンパイラは多分ないと思いますけど.) Bellによる最初のthreaded codeの後,Forthコミュニティでindirect threaded code,すなわち,命令ハンドラルーチンの入口へのポインタへのポ インタを仮想命令語として書き並べる手法が使われるようになりました. 1978年のFIG-Forthでは既に使われていたと思います. (indirect threaded codeについては,もし興味がある方がいらしたら,また お尋ね下さい.) これと対比して,オリジナルのBellの技法はdirect threaded codeと呼ばれる ようになりました. また,APPLE-Forthではsubroutine threadingが使われていましたが, threaded codeとは呼んでいなかったと思います.(実際,threaded codeでは なく,原始的なネイティブコードと言ってよいと思います.) 伝統的な用語法として確立しているのは,direct threaded codeとindirect threaded codeだけだと思います.その他のswitch threading, subroutine threadingなどの用語については,「Ertlの分類による用語」として使うのが よいと思います. 前田敦司 -- ML: langsmith quickml.atdot.net 使い方: http://www.atdot.net/~ko1/quickml
256 2005-08-06 13:32 [mogami brain.riken.g] プログラミング言語cipher 257 2005-08-06 18:41 ┗[hyuki hyuki.com ] 258 2005-08-06 21:35 ┣[yamanoue cc.kagoshim] 261 2005-08-09 12:10 ┃┗[mogami brain.riken.g] 262 2005-08-09 12:39 ┃ ┗[yamanoue cc.kagoshim] 263 2005-08-09 12:51 ┃ ┗[matz ruby-lang.org ] 264 2005-08-09 18:35 ┃ ┗[ko1 atdot.net ] 265 2005-08-11 16:28 ┃ ┗[mogami brain.riken.g] evalやVMの分岐の仕方の用語 -> 266 2005-08-12 14:34 ┃ ┗[maeda-langsmith atus] 267 2005-08-14 20:21 ┃ ┗[mogami brain.riken.g] 268 2005-08-15 14:11 ┃ ┗[maeda-langsmith atus] 259 2005-08-06 21:42 ┗[mogami brain.riken.g]