おんがえしの blog

作ったプログラムと調べた技術情報

自分でプログラム言語を書いてみたい人は「Create Your Own Programming Language」がおすすめ

読み終わった。たった100Pにプログラム言語を作るための基礎(字句解析、構文解析、ランタイム、インタプリタ仮想マシン、ネイティブコンパイルまで!)が一通り学べ、さらに本書で作った実際に動くプログラミング言語がついてくる。 $39.99 とちょっと高いがプログラム言語を作る勉強代だと考えれば最も安くそして早く(ドラゴンブックは1090P)学べるのではないだろうか。洋書なのが難点だが半分くらいはソースコードなので苦労しながらなんとかなりました。(日本語訳出てほしいなぁ)

書籍内で作る言語は2種類で

  • Awesome
    • Rubyの構文にPythonのインデントブロックを混ぜ合わせたようなオブジェクト型
  • Mio
    • Ioを参考にしたメッセージ型

言語自体はどちらもRubyで書かれているが紹介される概念は特に言語の制約を受けないものが多い。

よかったところ

yaccやbison, JVM系の構文解析ツールなど実際に言語開発者によく使われているツール群の紹介が前半にたくさんあったのがよかった。この手のツールはあまりインターネットを漫然とサーフィンしているだけだとなかなか知る機会がないため。

「6. Runtime Model」の章。ものすごい数のプログラミング言語があるけどランタイムモデルの数はそこまで多くないということが分かった。これらと字句解析、構文解析の組み合わせで様々な言語が生まれる。(もちろん実際の言語はもう少し複雑でプロトタイプ型の特徴をもったクラス型、みたいな感じにいいとこどりだったりすると思うけど。)

  1. Procedural (手続き型、Cとか)
  2. Class-based (クラス型、Ruby, Python, C++, Javaとか、今だと一番多い?)
  3. Prototype-based (プロトタイプ型、JavaScript、実装がとてもシンプルに書けるのが特徴)
  4. Functional (関数型、Haskell, Lisp)

プログラム言語ってそれぞれ全然違うように見えて内部の実装の基礎的なところはかなり同じ概念で作られていることが多いので、プログラム言語を作ることに興味がない人でも、どんな基礎概念をベースに作られているのか、これらをたたき台に次はどんな言語が生まれるのか?と言ったことが分かるようになるのでおすすめです。

おまけ

こんなところにもmatzパワーが。

f:id:tuto0621:20160804002429p:plain

さらにこの本を読んで感動した Jeremy Ashkenas さんが書籍内のサンプル言語をたたき台に作った言語が CoffeeScript だというのだからすごい。(たしかに Awesome と CoffeeScript はちょっと似ているところがある。)

追記

書籍内では字句解析(lex)の部分はRuby正規表現を使って自前で作成、構文解析(yacc)の部分はRacc(Rubyで書かれたyacc)を使ってやっています。ツールのインストールにつまずきにくいのでよいですね。

この本を購入するには、著者のページのあのフォームにクレジットカード番号を入力して購入するしかないでしょうか? (少々、不安なフォームに見えるので・・・)

PayPalのアカウント作ってそこから購入するのがおすすめです。海外で買い物するならPayPalは作っておいて損はないと思います。