Humanity

Edit the world by your favorite way

Forthのインタプリタ

※なんかこのエントリフィード配信されてなかったみたい。


作成中。
tyru/forth-interp · GitHub


昨日Forth激入門を見て、最初のとこだけ作ってgithubの方にコミットした。
これからForthの文法パーサとソース実行の部分だけ作りますよん。



と、いうか昨日の夜コミットしてから寝ながらiPodで書いたブログ用の文章があったので、リンク追加してから一応貼る。
相変わらず夜に文章書くと、量は結構書けるんだけど日本語が変なところが多いな・・・あと指が痛くなる。

最近オレオレ言語を作ることばっかり考えていて、ついカッとなってなぜかForthインタープリタ作ってみた。
Forthというのは、スタック指向な言語で、ぶっちゃけポーランド記法が分かれば実装できるような言語。
名前自体は前から知っていたけど、何やらちょっと特殊な言語らしいということ以外は知らなかった。
で、最近何か新しい言語を覚えたいとか思ってて、一昨日あたりHaskellがやりたい、とかふと思った。
ここから何故Forthのインタプリタ実装に繋がるのかと言うと、この記事を見てFortranという言葉を見つけ、また別のページからForthという言語を見つけて現在に至る。


あとオレオレ言語の方はまだちょっと仕様も固まってないし色々考えていて2424したいので後回し。
あとレベル的な意味でも。ていうか主にレベル的な意味で。


珍しくC言語を使った割にはあまりパフォーマンスの事を考えていない適当っぷり。
一番肝心なスタックの実装はそれぞれの要素ごとにまろっくしてそのアドレスを保存している。
なのでどんな型でも突っ込める反面、push・popする度にmalloc・freeしてるので多分普通のスタックの実装と比べたらとても遅い。
でもいいんだこれで。もう特定の型に合わせた実装とかしたくないし...もうスタックを再発明するのは(ry


リストにすればまろっく出来る限り無限の(固定長じゃない)要素も保存できるだろうけど今回はとりあえず固定長にした。
(どうしても今後に流用することを考えてしまう...)
というかそんなにスタックが必要だとも思えなかったし、安全のためにもそういうことにした。


C++ならBoostとか使えば1ファイルで済む気がする。
あと構文木作るのはしなくてもいいや。
めんどい訳でもないけどそこまでしなくてもいいような気がしたので。




しかし最近どうも日記が業務連絡みたいなノリになってしまうのが困る。
もっとこう淡々とした感じじゃなく端々にユーモアを交えながらの日記が書けないのだろうか。たぶん、書けない。


まぁ実際はまだ実行部分書いてないんでスタックの部分はテストしかしてないんですけどね...