2008-02-01から1ヶ月間の記事一覧

stack machine (compiler) calc

スタックマシンによる簡易計算機の vm は昨日作ったので、コンパイラを作る。といっても手抜きで、S 式を入力にする。 これは、字句解析、構文解析を省略するということ。「S式の良さ」(http://practical-scheme.net/wiliki/wiliki.cgi?Lisp%3AS%E5%BC%8F%E3…

stack machine in Common Lisp

http://www.hpcs.is.tsukuba.ac.jp/~msato/lecture-note/comp2007/note8.html を参考に、スタックマシンを作成してみる。 まず最初につくったスタックマシンとの大きな違いは、ジャンプ命令があるところ。 今まではコンパイルされた push, add, sub のリスト…

stack machine

高級言語でスタックマシンのような低レベルなものを書く、というのは相当簡単。本来は C 言語とかで、低レベルなデータ構造も一緒に学ぶところだが、高級言語だと大事な点(ここでは人が見やすい言語を単純なコンピューター用の命令の列に変換する、というコ…

Tiny-C

いい講義資料を見つけた。Tiny-C でコンパイラを作る。native コンパイラまで作るみたい。http://www.hpcs.is.tsukuba.ac.jp/~msato/lecture-note/comp2007/

VM メモ

項目 Common Lisp Emacs Lisp Gauche(Scheme) disassemble disassemble disasm native code VM code VM code 利用頻度 一般的 ごくまれ まれ いづれも、インタラクティブに disassemble して、効率的なコードになっているか確認することができる。 (disassem…

disassemble in Emacs Lisp

一応、 Emacs Lisp も byte-code があって、コンパイルすると速くなるし、最適化のテクニックもある。 http://tiny-tools.sourceforge.net/emacs-code-body.html しかし Common Lisp を「正しい」と思ってしまうと、 Emacs Lisp はいろいろと良くないなあ。…

配列とコンスセル

Lisp ではとても簡単に循環する構造が作れる。基本構造であるコンスセル、がそもそもポインタからなる構造であるからだろう。ポインタを自分に向ければ簡単に自分を参照し続ける構造になる。実際には物理的な制約を受けるにしても、抽象的で夢がある。 配列…

Gauche hash

昨日書いた gauche の hash について。 ※全部調べた訳ではないので現在とあっていないかもしれない。 http://practical-scheme.net/wiliki/wiliki.cgi?Gauche%3aBugs%3alog7#H-1a2uuf0 に既に指摘があった。仕様。hash には循環構造を渡しては駄目、というこ…

Common Lisp/Emacs Lisp/Gauche Hash-table

おおまかだがハッシュテーブルについて理解したので、気分を変えがてら gauche の hash-table を眺めてみる。まず理解できる範囲で API を並べてみる。 項目 Common Lisp Emacs Lisp Gauche 生成 make-hash-table make-hash-table make-hash-table ハッシュ…

彷徨える舌/すべての学問の

『自らの専門に捕われて、新しいことをまたはじめから学び直す、ってことは人によっては随分と辛いことらしいね。 その分野で優秀な成果をあげてきた人ほど、みっともない初心者にはもうなれない。プライドが邪魔をする、というよりも、 力を求めるのは人の…

hash-table benchmark

5165 件のサンプルデータ(すべてヒットする)でまずはテストしてみた。 mod,ht はほぼ同等、あるいは mod(つまりオリジナルと同等)が若干速い?。いづれにしろ微妙な差なので、繰り返し実行するなり、サンプルを増やすなりしないといけないと分かった。ht-el…

Hash-table benchmark

built-in hash-table 版(ht), elisp で実装した hash-table 版(ht-el), オリジナル、の比較を行う。 オリジナルの skk-search-jisyo は、検索以外に処理を行っているので、公平になるように機能を削った版(mod)を作成した。ht は単純なハッシュテーブルなの…

Hash-table in elisp

まず skk 辞書フォーマットを処理するためのマクロ with-skk-jisyo-buffer と、 skk-large-jisyo ファイルを処理するためのマクロ with-skk-large-jisyo とを定義する。 (defmacro with-skk-jisyo-buffer (buffer key value &rest body) `(with-current-buff…

Data-Ink Ratio

http://www.tbray.org/ongoing/data-ink/di1簡潔なグラフは美しい。Data-Ink Ratio の最大化という概念は、いまや私の武器になった。

Emacs Lisp Hash-table in elisp

Hash-table の C のソースを眺めているうち、 elisp でハッシュテーブルを実装すると理解が深まる気がした。 若干遅いだろうが、手を動かすのも大事。 その前に準備。前回書いた skk 辞書をパースする関数は、特定のハッシュの実装(emacs lisp 組み込みのハ…

彷徨える舌/往路と復路

『そうだね、確かに往復切符は一見お得だ。でも君は何故そうなのか、考えたことがあるかい?売る側には往復切符を安く売るだけのメリットがある。そう、少しでも早く売り上げを確定できるってことは、とても大きいんだ。じゃあ買う側はどうだろう?本当に得…

Emacs Lisp Hash-table の続き

Emacs の src/fns.c の hash_lookup を読めばよい、が少しずつ。 src/lisp.h の構造体 Lisp_Hash_Table を読む必要がある。

Emacs Lisp Hash-table for SKK

データ構造 Hash-table の理解を深めるため、 SKK 辞書の検索関数を作ってみることにする。まず、skk-search-jisyo を調べて、SKK のラージ辞書がどのように検索されるか調べた。 ちょっと長いので、辞書のエントリーの削除機能、バイナリサーチの機能に相当…

SKK - skk-search-jisyo のハッシュテーブル版?

ハッシュテーブルを使うと高速になる上手い例 - 大量なデータを使う Elisp プログラムの例、が何かないかと考えていたら、我が愛用の elisp, skk を思い出した。これはデータも沢山あるし、もし本当に高速化されたら(遅くて困っているわけではないが)嬉しい…

Emacs Lisp Hash-Table C

Super Technique 講座 http://www.nurs.or.jp/~sug/soft/super/hash.htm を参考にしたら、 Elisp の Hash-Table も読めそうな気になってきたのでメモしていく。Elisp の gethash は src/fns.c で定義されている。 ハッシュテーブルなので、任意のキーからハ…

Emacs Lisp Hash-table 続き

※何故こんなことを調べているかというと、低レベルなプログラミングをちゃんと勉強しておこう、という目的があって、Elisp が手頃な教材なため。Emacs にも Hash-table がある。よく使われるリスト構造の alist に比べ、データの数が多くなっても遅くならな…

Emacs Lisp Hash-table

Emacs Lisp では、(require 'cl) によって Common Lisp の一部の機能が使える。 その中の loop マクロは、ドキュメントには書かれていないようだがちゃんと Hash-table のトラバースに使える。以下は、ハッシュテーブルを使って、バッファー内の文字の使用頻…