kiyokaのブログアーカイブ

Archive of old blog posts

俺言語処理系開発に挑戦したいなら「見るまえに跳べ」

Peter Norvig のエッセイを読んだのだが、自分の過去ならどう感じただろうかと思ったので… 俺言語処理系を作ってみた後では、当時高い壁だと思っていたものが、そうでも無いことを知った。 少しでも興味がある人は実際にトライしてみるべきだと思う。

((Pythonで) 書く (Lisp) インタプリタ) から引用。

  • Lispyはとても小さい。コメントや空行を除くと90行で、ソースコードは 4Kバイト以下だ。(最初のバージョンは96行だったが、Eric Cooperの示唆 により、Procedureのクラス定義をなくし、代わりにPythonのlambdaを使う ことで短くなった。) 私がJavaで書いた最小のSchemeであるJschemeのソー スは1664行で57Kバイトあった。Jschemeは当初SILK (Scheme in Fifty Kilobytes、50キロバイトのScheme)と呼んでいたが、この制限を満たして いたのはソースコードではなくバイトコードで数えたときだけだった。 Lispyはずっと良くなっている。これはアラン・ケイが「世界で最も強力な 言語」を「1ページのコード」で定義できると1972年に言った言葉に合って いると思う。
    bash$ grep "^\s**^#\s*" lis.py | wc
          90     398    3423
    

上のエッセイでも全ソースが掲載されているが、言語処理系の中でもLispは非常に少ないコードでおもちゃの処理系が作れる。特にPythonなどのスクリプト言語で書いた場合は特にそう。 言いたいことは、言語処理系を作ってみたいと思っているひとは躊躇せず一度試してみるべき、ということ。 おもちゃバージョンを作るところまでは上のエッセイ同様に余暇の数日でできるレベルだ。 その先は、飛び込んでみてから決めても遅くはない。実際に言語処理系を作ってみると、おもちゃバージョンの完成を迎えるころには、そこで終るのはもったいないほど楽しいことがわかってくる。まあ、そこから先、どう進むかは人それぞれだと思うけど。 img 「見るまえに跳べ」

現在は[Nendo]というRubyで書いたLisp処理系を開発しているのだが、私の思い出を語ると、当初なかなか始められなかったのを思いだす。 過去記事から、なんか自分がグチグチ書いているところを抜粋してみた。カッコわるい…(笑) どうも、最初から完全オリジナルなフルセットの処理系を作ろうとか考えてたみたいだ。そんなこと考えたら誰にとっても壁は高いだろうに。 2008年8月くらいからグチグチ言いはじめて、実際に決心が付いたのが2009年2月末だった。

2008-08-09言語* そろそろオレ言語でもやっておくか(1) オレ言語(いわゆる言語を自作すること)に興味が出てきた。自分が実際に作っ てみるという観点で有名どころの言語仕様とか言語設計者のプレゼン資料と かを見ると、なかなか素人には恐ろしく高い壁に見える。 2008-08-31言語* そろそろオレ言語でもやっておくか(2) 2008-09-03言語* そろそろオレ言語でもやっておくか(3)

ここで[Gauche]作者のshiroさんからもコメントを頂いたり。有り難いです。 2008-09-23言語* そろそろオレ言語でもやっておくか(4) なぜ、多くの処理系実装者が『オレ言語をデザインするのは大変なので Schemeを言語仕様どおり実装しました』という 結論になるのかという質問へ の答えにもなっていると思う。 オレ言語に手を出すのは楽しいけど、あまりにハードルが高いということだ なぁ。どうするかなぁ。 2009-02-28言語* そろそろオレ言語でもやっておくか(5) 2009-03-20言語* そろそろオレ言語でもやっておくか(6)

このあたりで、作るものの方向性が見えてきて、[Nendo]という名前に落ちついたみたいだ。 2009-03-25言語*Nendo そろそろオレ言語でもやっておくか(7) で、結局なにを作りたいの? S式でRubyプログラミングができたらどんな感じかを一度体験してみたいと いうのが作り始めた動機だ。S式のどこの節を千切って、あっちへ接木して というような柔軟なプログラミング体験はRubyではできない。 Rubyの良い面も有るのでRubyのコードと混在できるようにするつもり。 なので、ユーザインタフェース的な実験がメインになる。ということで、実 用言語としてのパフォーマンスとかはあまり興味がないの。 S式でプログラミングをするのは好きなんだけど、例えばTokyoCabinetみた いな最近話題のDBでちょっと使って遊んでみたいというような場合には、 Rubyのようにバインディングが量産されてくる言語にのっかるのが楽という 事情もある。

2009-03-30言語Nendo* そろそろオレ言語でもやっておくか(8) 2009-04-01言語Nendo* そろそろオレ言語でもやっておくか(9) 2009-04-07言語Nendo* そろそろオレ言語でもやっておくか(10) 2009-04-10言語Nendo* そろそろオレ言語でもやっておくか(11)

まあそんなわけで、躊躇してるくらいなら「見るまえに跳べ」ですよ。