板子一枚下は機械語
Forth には see という逆コンパイルを行うワードがありまして、例えば
\ 整数を 2乗するワードを定義 : square dup * ;
とワードが定義した後で、
see square
と入力すると、ワード定義の中身が出力されます。
: square dup * ; ok
see は Forth で定義済みのワードにも使えまして、その行の残りを全部コメントとして無視する \ なんていうものも
see \
: \ blk @ IF >in @ c/l / 1+ c/l * >in ! EXIT THEN source >in ! drop ; immediate ok
のように定義を見ることができます (出力は GForth の場合)。で、GForth なんですが、他のワードで定義されていないプリミティブなワード、例えば、整数を加算するワードである + の定義を見てみますと、
see +
Code + ( $804B889 ) mov dword ptr 80720E0 , ebx \ $89 $1D $E0 $20 $7 $8 ( $804B88F ) mov eax , esi \ $89 $F0 ( $804B891 ) add ebx , # 4 \ $83 $C3 $4 ( $804B894 ) lea esi , dword ptr 4 [esi] \ $8D $76 $4 ( $804B897 ) mov ecx , dword ptr 4 [eax] \ $8B $48 $4 ( $804B89A ) mov edx , dword ptr [eax] \ $8B $10 ( $804B89C ) add ecx , edx \ $1 $D1 ( $804B89E ) mov dword ptr 4 [eax] , ecx \ $89 $48 $4 ( $804B8A1 ) mov edi , dword ptr FC [ebx] \ $8B $7B $FC ( $804B8A4 ) mov eax , edi \ $89 $F8 ( $804B8A6 ) jmp eax \ $FF $E0 end-code
などと表示されるわけでして、板子一枚下は機械語といった趣きがあります。(全ての Forth がこんな出力をするわけではありません。例えば pForth の場合は + is primitive defined in 'C' kernel と出力されます。)
私はアセンブリは詳しく無いので分からないのですが、バイナリアンの方々なら GForth に親しみを覚えたりするのでしょうか。