Ruby30周年イベント(前編):Rubyを作る前のまつもと氏が作りかけた、Rubyの原点となるプログラミング言語「Tish」
今回は「Ruby30周年イベント(前編):Rubyを作る前のまつもと氏が作りかけた、Rubyの原点となるプログラミング言語「Tish」」についてご紹介します。
関連ワード (動的型、明日公開予定、枠組等) についても参考にしながら、ぜひ本記事について議論していってくださいね。
本記事は、Publickey様で掲載されている内容を参考にしておりますので、より詳しく内容を知りたい方は、ページ下の元記事リンクより参照ください。
まつもとゆきひろ氏によって開発が始まったRuby言語の30周年を祝うイベント「プログラミング言語Ruby30周年記念イベント」が2月25日にオンラインで開催されました。
イベントでは関係者やRuby愛好家らによる過去30年の振り返りやRubyにまつわるライトニングトークなどが行われ、最後にまつもとゆきひろ氏による基調講演「D is for Dream, V for Vaporware」が行われました。
基調講演では、Rubyを開発する前にまつもと氏が手がけた、Rubyの原点となるソフトウェア「CXライブラリ」や、今回初めて名前が明かされた「Tish」という作りかけのプログラミング言語や、これまであまり語られることのなかった、さらにその前の学生時代に妄想していたプログラミング言語「Alpha」や、そもそもプログラミング言語の開発のきっかけとなった小説についても紹介されました。
そしてこれから作りたいものとして、まつもと氏は「Static Compiler for Ruby」を挙げ、そのための道具立てが揃ってきたこと、そしてRubyのような暗黙的型言語の可能性と、そしてまだ作られていないRubyのサブセット言語を「スピネル」と命名するなど、これからのRubyの夢を語りました。
この記事ではその基調講演の内容を紹介します。記事は前編、中編、後編(明日公開予定)の3つに分かれています。いまお読みの記事は前編です。
D is for Dream, V for Vaporware

まつもとです。Rubyが誕生して30年経ちました。

正確に言うと、昨日(2023年2月24日)をもってRubyという名前を付けてから30年経ちました、ということになります。

いつも言ってることなんですけども、ソフトウェアは物理的実体がないので名前を付けた日が、「Ruby」という概念が生まれた日だというふうに思うので、この日をRubyの誕生日にしようという妙なこだわりがあってですね。

Wikipediaに最初のリリースした日が記録されていて、Rubyは1995年12月21日ってことなってるんですけども、Rubyのコミュニティの中では名前が重要だということも合わせて昨日、2月24日を誕生日としています。
Rubyが生まれる前にさかのぼる
なぜRubyが生まれたか。ちょっと歴史をさかのぼってみようかなと思うんです。
今日はRubyの30年についていろいろ振り返ってくださった方がいらっしゃるので、私は1993年より前の話をしようかなと思います。

1993年2月にRubyを作った最大の理由は暇だったからなんです。

当時、バブル経済が崩壊しまして、自分の関わったプロジェクトがキャンセルになり宙ぶらりんな状態だったんですね。
今まで作ってきたソフトウェアをメンテする仕事もいただいたのですが、新規開発は禁止されていたのでやることがあんまりなかったんです。
たまに社内で自分たちの作ったソフトを使っている連中から電話かかってくるので、ソフトウェアを立ち上げ直してくださいとか、PCの電源を入れなおして再起動してくださいとか。以上終わり、という感じでやることがあまりなかったんですよね。
マネージャーはその他のチームのマネージャーも兼任していたので、こっちのことは見てないわけです。そうすると、ほうっておけばプログラミングする人間の机からデスクトップコンピュータを奪わず、暇を持て余した状態にしておくと何が起きるかというと、プログラムを書くわけです。
ボツになった書籍の企画のために言語を作り始めた
不景気のせいでRubyが生まれたわけなんですけれども、その日作ったソフトがなぜ言語だったか、ということについても話をしなくてはいけないですね。

これよりしばらく前のことなんですけども、存在しなかった本として「作りながら学ぶオブジェクト指向」という本が書かれるはずだったんです。

石塚圭樹さんという当時の私の同僚で、最初のルビーの本の共著者になっていただいた人なんですけれども、私の先輩にあたる人ですね。
彼がアスキーでバイトをしていてアスキーから本を出したこともあって、「オブジェクト指向プログラミング」というタイトルの本を出したこともある人だったので、次の本として「作りながら学ぶオブジェクト指向」という企画があったんですね。
どういう本かというと、オブジェクト指向プログラミング言語を実際に作ってみて、その枠組みみたいなもの、コードを紹介することによって、オブジェクト指向とはなんぞやということを学ぶという本だったんですね。
後には、オブジェクト指向とはなんぞや、みたいなことが無益な論争も起きていたわけですけれども、もし、この本が世に出ていたらそのような論争はなかったんじゃないかな、と思うような素晴らしい本だったんです。
そこで実際に、オブジェクト指向言語を作らないといけないわけなんですけれども、当時の私は社内ツールのためにですねC言語向けのオブジェクトライブラリを作っていたんですね。
「CXライブラリ」という名前だったんですけれども。

このCX5ライブラリのソースコードはマグネットテープが劣化して失われてしまったんですけれども、今でも例えばRubyのメソッドキャッシュの部分とかに流用されています。
そういう期待の企画ではあったのですが、ちょっと尖りすぎていて一般の読者には受けないから売れないだろう、という判断、正しい判断だと思いますけれども、この書籍の企画はボツになったんですね。
しかし企画はボツになっても、動き始めたものは止まらないので、(私はそのオブジェクト指向言語を)作り続けたわけですね。
そして作り続けたものの名前を決めるという話になって、「Ruby」という名前になって、そのまま作り続けて今に至ったわけです。
Rubyの原点となった「Tish」
なぜ作り続けたかというと、それは私の夢だったんですね。

自分の言語を作りたい。
普通、言語というのは既存の言語があって、それについて学ぶわけです。JavaだったりPythonだったり、ほとんどの人にとってRubyもそうなんですけれども。
そうじゃなくて、自分が文法を決めて自分が実装して自分で何かコントロールできる言語が欲しい、って思ってたんですね。
実はRubyの前に作りかけの言語があって、「Tish」という名前の言語を作ろうと思ったんです。

1992年頃、Rubyを作る1年ぐらい前に、そのオブジェクト指向してるっぽいものを作りたいとに思って、これがRubyの原点だったんですね。

「Tish」という名前は本邦初公開ではありますが、スクリプト言語をイメージしていたのでだいぶRubyに近い感じですね。

CXライブラリとともにRubyの基礎になったんですけれども、名前が重要だと言うことがよく分かりますよね。もしこのまま「Tish」という名前で公開したとしたら、みんな使いたくないですよね。

Rubyだから使いたいんですね。やっぱり名前重要だというのは本当によく分かると思います。
卒業論文でプログラミング言語「Classic」を作った
その前、1989年頃、私は大学生だったんですけれども、卒業論文でプログラミング言語を作りました。

「Classic」という名前のプログラミング言語を作りました。これもあんまり公開していないです、恥ずかしいので。
そのときは研究室の研究テーマがあって、それを分割して卒論を書くのが一般的だったのですが、私はどうしても自分のプログラミング言語を作りたかったので、当時からの夢だったので、先生の言うことは聞かないで卒業論文に自分の言語をデザインして作って、卒業論文を書いて提出したんですね。
その卒論発表会のときに自分の担当の先生が手を挙げて「これは一体どういうことか」って質問されてですね、だいぶ厳しい思いをしました。
当時読んでた本に「Object-oriented Software Construction」という本があって、Bertrand Meyerさんという「Eiffel」という言語を作った人が書いた本ですが、1988年ぐらいにこの本を買って、すごい感銘を受けて、Eiffelという言語は、「Ada」というALGOL系のプログラミング言語にオブジェクト指向的拡張を加えて、いらないものをいろいろ落として生まれ言語だったんですね。

Meyerさんはフランス人なので、フランスのエッフェル塔を作ったエッフェルさんを尊敬してその名前をつけたそうです。

これと同じベクトルの変化をC言語に対して加えると、C++ではないオブジェクト指向のC言語が作れるのではないか、というのが私の卒論言語の原点だったんですね。
Eiffel的な観点を入れたので、静的型で多重継承があって、プロファイル型というのは同じクラスの一部の仕様を見ることができる、Goでいうインターフェース型に当たるようなもの、があるような言語をデザインしました。 とりあえず動くところまで持っていって卒業論文を書いたんですけれども、結果的にRubyにとっては反面教師になりまして、Rubyには静的型が入りませんでしたし、多重継承も入りませんでしたし、静的形がないのでインターフェースに当たるプロファイル型もなかった、ということになります。

結局作って分かるのは、AdaとかEiffelのアプローチよりもLispとかSmallTalkのようなフレキシビリティの高い方が自分に合っているというふうに思ったんですね。

ただ、何らかの形の多重継承は必要だろうと思ってMixinをRubyに導入したということです。動的型だったりあるいは型推論みたいなアイディアもあったんですけれども。
このClasicという言語もテープの劣化により失われたんですね。ソースコードは今はどこにもないんです。
ただ、紙に印刷した卒論が残っているので、デジタルデータは本当に失われやすいなと、本論とは全く関係ないんですけどもデジタルデータは本当に一生懸命バックアップしないと保存できないのだと思いますね。
≫続きます:Ruby30周年イベント基調講演(中編)~言語を「作りたい」と思ってから10年以上経って、スキルと環境が追いついてRubyを作ることができるようになった