Lisp から Ruby への設計ステップ
この間、 Ruby の作者である まつもとゆきひろ(Matz)さん
のメーリングリストの内容がちょっぴり注目を集めました。
中身は Ruby を設計する時、 Lisp をベースにして Ruby になっていった手順です。
最後の冗談っぽい感じからすると、どこまでホントなのかよくわかりませんが、
話として面白いなと思いました。
今回はそれを翻訳して紹介したいと思います。
原文はこちら。
Ruby は次のステップで設計されています。この理屈でいくと Ruby はもともと Lisp だったんです。
- シンプルな lisp をベースにする (Common Lisp の前身のようなの)
- マクロと S 式を削除
- シンプルなオブジェクトシステムを追加 (CLOS よりずっと簡単なもの)
- 高階関数からインスピレーションを得たコードブロックを追加
- Smalltalk にみられるメソッドを追加
- Perl と同等の機能を追加 (オブジェクト指向のスタイルで)
これからは Ruby を MatzLisp と呼びましょう (^O^)
以下、補足や感想です。
1. Common Lisp
Lisp は方言の多い言語ですが、それをなんとかまとめようということでできたのが CL(Common Lisp) です。
2. マクロ
Ruby の特徴の 1 つとして強力なメタプログラミングがあります。 Lisp のマクロはこれを更に強力にしたようなものです。
ただ、強力すぎて言語自体をいじれまくるので、方言の大量発生の原因でもあります。 マクロを取り除いて制約を加えたというところでしょうか。
2. S 式
S 式は Lisp の独特の構文となっているヤツです。
こちらも諸刃の剣で、 Lisp の美しさの軸であり、とっつきにくさの原因でもあります。 また、 Clojure でも苦労しているように OO(オブジェクト指向)と Lisp 構文は語順が逆になります。
書きやすさと OO にこだわった Ruby では S 式がなくなるのは必然だったのかもしれません。 4. コードブロック
他の言語では無名関数と高階関数を使ってやるところを もっとエレガントに書けるようにした感じです。
『7つの言語 7つの世界』 のインタビューでも まつもとさん の気に入っているところの 1 つとして挙げれられています。
6. Perl
名前のとおり、 Ruby は Perl の後継を狙った言語ですが、 意外にも一番最後に追加されたようです。
MatzLisp
もとは酒の席でのネタだったみたいです。
- 関連記事
Facebook コメント
コメント