読者です 読者をやめる 読者になる 読者になる

ELVM Compiler Infrastructure

最近作ってたオモチャがだいたいまとまってきました。

https://github.com/shinh/elvm

第12回 kernel/vm 勉強会で発表した時のスライド:

http://shinh.skr.jp/slide/elvm/000.html

これは何かというと、前作った bflisp を改良したり整理したりしたもので、 C 言語をシンプルな中間言語 (EIR) に変換する改造 8cc と、その中間言語Brainfuck をはじめとした他言語に変換するバックエンドから成り立っています。 bflisp との差分は、 Brainfuck 以外のバックエンドを追加しやすくしたり、バックエンドを C で書いて、完全に Brainfuck だけで 8cc.bf を再現することができるようにしたり、という感じです。

特に興味深いであろうバックエンドとしては、 Brainfuck, Unlambda (id:irori さん作), Piet, C-INTERCAL, Befunge, Whitespace などがあります。例えば Lisp を Piet で動かしたりもできるようになりました。 lisp.pnggimp で開いてスクリーンショットを撮ったこの画像なんかは結構お気にいりです。

JavaScript に変換することもできるので、デモサイトは ELVM を使って作った JS で作られています。

http://shinh.skr.jp/elvm/8cc.js.html

スライドにも書きましたが、「チューリング完全な言語互いに等価だからうんぬん…」というような、理論ではそうなんだけど…というようなことが実際確認されるのを見るのはなかなか楽しかったです。コンパイラいじり、 esolangs での計算プリミティブ作成パズル、最小限の libc 作り、など好きなトピックがたくさんあるという意味でも楽しくて良かったです。

なにかあれば下記メールアドレスへ。
shinichiro.hamaji _at_ gmail.com
shinichiro.h