ラベル Forth の投稿を表示しています。 すべての投稿を表示
ラベル Forth の投稿を表示しています。 すべての投稿を表示

2009/09/07

Forth の direct threaded code

こんなぐあいに r15 に _doLIST のアドレスをいれておいて call してる。これだと無駄にレジスタ使っちゃうのが問題(Forth の実装でそんなにレジスタ使ったりしないけどね)。call _doLIST としたいところなんだけど、そのやり方が分からない。

        ;; nop x 5 call r15
DOCOL_CODE EQU 0xd7ff419090909090

%macro NEXT 0
lodsq
jmp rax
%endmacro

defcode "EXIT", 0, exit
POPRSP rsi
NEXT

defword ":", 0, colon
dq _WORD
dq header
;; あらかじめ mov r15, _doLIST してある。
dq lit
dq DOCOL_CODE
dq comma
dq latest, fetch, hidden
dq rbrac
dq exit

_doLIST:
PUSHRSP rsi
pop rsi
NEXT

_start:
mov r15, _doLIST

2008/03/24

jonesforth

茶国 Rev3 さんのところで紹介されていた jonesforth が実に素晴しい。
アセンブラでの Forth の実装だが、ソース中にとても丁寧なコメントが付いており、ソース自体がチュートリアルのようになっている。
あまりにすばらしいので Common Lisp の移植してみる。

Forth と Factor の : の違い

Factor の : は ; まで読み込んでワードを定義する。; は終端記号。
Forth の : は辞書にワードのエントリーを作成しコンパイルモードになる。IMMEDIATE 以外のワードは逐次コンパイル(辞書の作成されたワードのエントリーに追加)される。; でコンパイルの後始末を行い、実行モードになる。

Factor は parsing で Forth は IMMEDIATE。

2008/03/19

Gforth : セットアップとローカル変数

Gforth のマニュアルがよさそう。
Gforth を Debian のパッケージでインストール。
~/.emacs に次を追加。

;;;;Gforth
(autoload 'forth-mode "gforth.el")
(setq auto-mode-alist (cons '("\\.fs\\'" . forth-mode)
auto-mode-alist))
(autoload 'forth-block-mode "gforth.el")
(setq auto-mode-alist (cons '("\\.fb\\'" . forth-block-mode)
auto-mode-alist))
(add-hook
'forth-mode-hook
(function (lambda ()
;; customize variables here:
)))


ローカル変数ってあったのか。
: hello ." Hello" ;

: my-swap { a b -- b a } b a ;

: my-dup { a } a a ;

2008/03/09

Forth を勉強

図書館から『FORTHへの招待』を借りて読む。
内容は浅い。11,930円だして買わなくてよかった。
むしろ、Gforth のマニュアル http://www.complang.tuwien.ac.at/forth/gforth/Docs-html/ の方が期待していたもの。

Forth のデータタイプは全て数値?
スタックの1番目だけで単精度と数値とするか、
1番目の2番目をあわせて倍精度とするか、
1番目を文字数、2番目の文字列データとするかは、ワード次第。
C に似てる。

気になるのは LITERAL, POSTPONE, [, ] のあたり。
Starting Forth 11. Extending the Compiler http://www.forth.com/starting-forth/sf11/sf11.html

2008/02/17

Forth 系の言語を作ってる

Forth 系の言語ってかなり好きです。
The Log of the No22 さんところの「それは逆ポーランドじゃない」を読んで感動しました。
全てがスタックに対する関数であり、プログラムは関数の連結からなるという concatenative 言語。
すばらしい。
ということで、Forth 系の言語を作っています。
楽しいです。