2014-04-10

余は如何にしてDを書くにいたりしか

How I Came to Write D | Dr Dobb's

Dr. Dobbsの記事で、Walter Bright(C++とDプログラマーでウォルたんの名前を知らないものはモグリである)が、なぜDを書くに至ったのかを書いている。

余は如何にしてDを書くにいたりしか

Walter Bright著

Walter Brightが、世界で最も使われている言語20位までに入る言語を書くに至った道は、興味と・・・侮辱。

私は小さい頃から、ものが如何にして動き、設計されているかを調べるのが好きだった(Tom Swiftの本は大好きだ)。小さい頃の将来の夢は、列車とか水上機の設計だった。私の専門は機械工学だった。ただ、機械工学は、何を作るにも多額の費用がかかり、それに私自身の製作スキルの低さという点で、不満だった。

一方、プログラミングでは、私はコンピューターにアクセスさえできれば、何の費用もかからずに、最高に複雑な機械をつくり上げることが出来た。多くのプログラマーと同じく、私はゲームを書くことから始めた。ゲームを書くことの魅力は、神のごとくなれることに似ている。自分のルールに従う世界を作るのだ。私はEMPIREというゲームを作り、コンピューターが敵軍に対して以下にうまく立ち振る舞うかということに、多大な時間をつぎ込んだ。今日ですら、私はいまだに、改良方法に思いを巡らせている。

問題は、コンピュターの戦略のためには、途方もないほどの計算力が必要になる。そのため、私はコンパイラーが如何にしてコードを最適化するかということに興味を持った。コンパイラーというのは、ソースをマシンコードに変換する、何やら魔法のようなデバイスに思えたのだ。この魔術は如何にして動いているのか。これは、BYTEマガジンがTiny Pascalのソースコードを出版するまでは、大宇宙における最大の謎であった。私はTiny Pascalプログラムのすべての行を消化し、一度理解するや、私は秘密の部屋へのパスワードを与えられたが心地になったのであった。

数年して、80年台のはじめ頃、私はMS-DOS用のソフトウェアを開発するプログラミング部署に属していた。我々は、Cを使った。なぜならば、PCで動く高級言語というのは、Cしかなかったからだ。他の言語実装は、信じられないほど悲惨だった。Cコンパイラーすらひどかったが、少なくとも、利用可能な程度ではあった。そのCコンパイラーの生成するコードは悲惨で、最適化などというものは存在しなかった。私は、自分ならばもっとマシなCコンパイラーを書けるという確信があった。

私がこの確信を同僚に伝えた所、同僚は、近所のCグルと同僚とで、昼食を同席することを提案した。このCグルは、実装方法についていくつか助言ができるという。食事の席で、友人は私の野望をグルに伝えた。そのグルの屈辱的な物言いは、未だに私の脳裏に刻みつけられている。「オメー、自分でCコンパイラー作るとか、何様のつもりだよ?」

私はこのグルに感謝しなければなるまい。というのも、このグルに見せつけてやりたいという思いは、強力なモチベーションとなったのだから。私は直ちにCコンパイラー、Datalight Cの実装にとりかかった。私の最適化の興味を反映して、このCコンパイラーは、PC向けで初めてデータフロー最適化を備えたコンパイラーとなった。この概念は、当時としては新しすぎたので、コンピューターマガジンのベンチマークでは、ひと騒動を起こした。なぜならば、オプティマイザーは、ベンチマークが何もしていないと判断し、デッドコードをすべて切り捨ててしまったからだ。編集者は、私のコンパイラーは壊れているか、ズルをしていると決め付けたため、Datalight Cのレビュー結果は悪くなってしまった。(これは、もちろん私を非常に怒らせたが、残念ながら、反論を掲載するのに便利なインターネットというものは、当時は存在しなかった)

Datalight Cは後に、Zortech Cとして復活した。この時になると、PC用のCコンパイラーは他にも多数あった(当時、30ぐらいは数えていたと思う)。私が差別化のための材料を探したところ、本屋でBjarne StroustrupのC++本を見つけた。当時の私は、「ヘン、キーワードいくつか追加して、数ヶ月ぐらいで、俺のコンパイラーはC++コンパイラーだぜ」と考えていた。このプログラミング世紀における見くびった発言であるだろう。もし、当時の私が、自分が何に突っ込んでいくかを知っていれば、当時の私は、周りの人が言う「絶対出来ない」という言葉を信じてしまっただろう。

ともかく、1980年台の後半というのは、多くの人が、Cの後継言語を開発していた時代だった。

当時のusenetで、そのような後継言語を目指すプロジェクトのひとつが、Dと呼ばれていたこともある。様々な理由で、これにはZortechが当時の最も有名なプラットフォーム向けの格安のC++コンパイラーとなっていたことも理由の一つであろうが、C++は他の言語を打ち破って、1990年代のプログラミングにおける独占言語になった。私はブームに乗って躍進した。

同時期(1990年代)に、私はネイティブコードを生成するJavaコンパイラーや、JavaScriptコンパイラー/インタープリターも書いた。この製品は成功しなかった。ここで書いておくが、私は、他人が必要だと私に言ってよこしたものを開発するより、私が必要とするものを開発する方が、相当に気分が良くなる種類の人間である。

たとえば、ある日、私はプログラマーの友人とジョギングをしていて、その友人に言われたことには、「ほら、この世界が切実に必要としているのは、ネイティブコードを吐くJavaコンパイラーだぜ。お前は造幣局になれるぜ。俺はJavaを使っているんだが、マジで必要なんだ」と。私は偶然にも、自分はすでにそういうものを書いてあるので、今すぐ使うことができるぞと言ってやった。もちろん、彼は使いはしなかった。

私がEmpireゲームを発明したのは、この私が遊びたかったゲームであったからだ。私がCコンパイラーを開発したのは、この私が、Empireを開発するのにマシなコンパイラーが必要だったからだ(あと他のプロジェクトも)。JavaやJavaScriptコンパイラーは、他人のアイディアだ。ただ、Dの誕生につながる話ではある。

15年以上もコンパイラーに携わっていて、言語の改良案のひとつやふたつも思いつかない者などいない。私は多くの言語の改良を、CとC++コンパイラーで試したが、全て失敗してしまった。誰も言語拡張には興味を示さない。皆、標準規格準拠の言語を求めている。当然のことだ。残念ながら、改良案が標準化委員会で採択されるには、とても難しい長年の政治活動が必要であった。実に私の忍耐力では耐えられない作業である。

1999年、私は引退を決め込んで、六週間も気が狂うぐらいテレビを見続けた。

そろそろ現実に戻らなければならない。既存の言語の問題について泣き言を言うのはもうたくさんだ。私は道具をパワーアップさせるべきだと決断した。このような問題について考えるたびに、私の脳裏には、ドワーフのギムリの言葉が浮かぶ。「死は確実にして業は成り難し。何を迷う?」。そうだ。少なくとも、手に利剣をひらめかして、栄光ある戦いに赴かねばならぬ。

そして、Dが始まった。単独で道路整備をしていくプロジェクトだ。私は自分でコンパイラーを書いたことがない言語でプログラミングするのでは満足できない性質であった(自分でも奇妙な性質だと思う)。私は様々な言語を実装した十分な経験があるので、私にはDを動かすことが可能であるという自信があった。また、すでに既存のC++コンパイラーという環境があったため、多大な利点も得ていた。

数年後、Dが初めてSlashdotにあらわれて、利用者と貢献者を急速に惹きつけていった。どうやら、私は、言語に求める機能という点で、変人というわけではなかったようだ。Dは理想に向かって、全世界の貢献者と共に、急激に成長していった。数カ月前に開かれたDconf2013まで、我々はお互いの顔すら知らなかったのだ(これはインターネット革命の偉大なる点である。他人の性別や年齢や風貌や人種や宗教や言語や文化や障害や境遇などを一切知らずして、協調作業が可能なのだ。実に純粋な実力主義社会である。意見と、貢献と、宣伝力だけがモノをいうのだ)

今日び、Dはインターネットなしでは存在し得なかった。インターネットの他に、切実な理想家が協力できる場所などどこにあろうか? githubやbugzillaのような協調作業ツールの興隆はDの開発にあたって重要であった(もちろん、オープンソースモデルもだ!)

しかし、私自信も、学ばねばならぬことがあった。厳しい方法で

  1. 私の単独作業を好む性質。多くの仕事で、私の仕事に対する評価というのは、たいてい次のような意見を含んでいた。「ウォルター君は他人と協調作業することを学ぶ必要あり」と。すべてを自分の支配下に置きたいという私の思いは、一度はDコミュニティを崩壊させかけたので、私は変わらなければならなかった。
  2. 私は全員がボランティアであるプロジェクトを管理する方法を学ばなければならなかった。私が誰にも金を払っていない以上、私は誰にも何かをさせることができないわけだ。私は他の方法を見つける必要があった。私は、性格テストでは「オタク」に限りなく近く分類されるので、他人のモチベーションを上げるなどというのは、私の得意分野ではない。これは面白い問題である。
  3. Dフォーラムでは、新しい言語機能の提案が毎日行われる。私は実に多く「ノー」と言わねばならない。これは実に難しいことで、特に提案者にとっては聞くのも難しいことだ。
  4. 管理というのは難しいそごとで、私には適任ではない。私もZortechやその他の強調する仕事では、うまくやれていなかった。私は(賢明なことに)、管理職に昇進されなかった。しかし、Dにおいては、避けることは出来ない。私は管理のやり方を学ばなければならず、十分にうまくやらねばならなかった。私には良き管理者になるべきモチベーションがあった。なぜならば、私はDに成功して欲しかったからだ。
  5. 私の友人はよく知るように、私は議論好きである。私はインターネット上の多くの炎上した議論に参加している。しかし、Dにおいては、私はそういうことができない。炎上した議論では、たとえどんなに間違っていようとも、誰も自分の意見を変えようとしないからだ(´・ω・`)。私の議論の経験は、面白い利点になっている。私には、議論がいつ、非建設的な論争になるかわかるので、頭を冷やさせることができるのだ。

    私は未だに、「シールドを張れ! 消滅光線が来るぞ!」的な行動をしたい衝動と戦わなければならない。もちろん、Dフォーラムの皆が同意するように、これはまだ発展途上なのだ。Dはこれまでも、これからも、素晴らしい実験であり続ける。多くの他の言語から最高のアイディアを拝借し、多くの、多くの世界中の貢献者による多大な貢献の集大成であり、参加者皆が、胸を張って誇れることなのだ。

結果として、私には宝物が出来た。Dでプログラミングするのは最高だ。Dは私が常に欲していた言語なのだ。私は否定論者や、Debbie Downer(米国の生放送コメディ番組Saturday Night Liveの登場人物、常にネガティブなことを言って場をしらけさせる役回り)や、そしてもちろん、借りを作っている大昔の無名のCグルの意見を聞かなくて、本当に良かったと思う。

で、君は独自の言語を書きたいんだって? そうだなぁ、「死は確実にして業は成り難し。何を迷う?」

ウォルたんはBjarne Stroustrupとパフェを食いながらC++のとある機能の実装方法について話し合って、即座に理解したなど、C++界隈でも逸話が多い。これを読むと、自尊心の高い気難し屋という印象を受ける。某連続的な人のコメントが待たれる。

ドワンゴ広告

この記事はC++とはちょっと関係があり興味深いと思ったので、ドワンゴ勤務中に紹介記事を書いてみた。

ドワンゴは本物のC++プログラマーを募集しています。

採用情報|株式会社ドワンゴ

CC BY-ND 4.0: Creative Commons — Attribution-NoDerivatives 4.0 International — CC BY-ND 4.0

5 comments:

Anonymous said...

C++は現状DMDコンパイラのソースコードを読める程度のD言語プログラマですが応募しても大丈夫ですか?

Anonymous said...

死は確実にして業は成り難し。何を迷う?

Anonymous said...

作りたいゲームがいくつか有るんですが、言い訳しててマッタク進んでないんです。
俺は一体何を迷う?Orz
TypeEraserが入って欲しいです。

kozo said...

H/W屋としてはABELを忘れるわけには行かず、後の論理合成の基礎となったと思います。
あとDatalight Cのスモールモデルが高速だったこと。Zortech C++も持ってたっけ。

江添亮 said...

ドワンゴに応募するのは歓迎ですが、採用されるかどうかはわかりません。