検索
連載

Cyanを設計した高校生、5カ月で5つの言語を習得【写真】天才プログラマに聞く10の質問(3)(2/3 ページ)

本連載では、コンピュータの世界で卓越した才能を発揮しているプログラマたちに、スキルやキャリアに関する10の質問し、プログラマとしての考え方・生き方を探る。天才の言動からわれわれ一般人がまねできることとは何か。今回は新春特別企画として、10の質問枠を取り払い、竹内郁雄氏との対談形式でお伝えする。

Share
Tweet
LINE
Hatena

林氏 Javaを勉強した後、RubyやPerl、Pythonの文法が面白くて眺めてました。だから、(設計で参考にした)Pythonは実際に使ったことはないんです。

竹内氏 眺めて文法だけを習得するってマニアックだよね!

林氏 高校1年になって、Rubyの開発者 まつもとゆきひろさんのブログでLispやHaskellが紹介されているのを見て、関数型やLispを勉強しようと思いました。

竹内氏 Lispは本で勉強したんですか?

林氏 「xyzzy Lisp Programming」というLispの入門サイトを見ました。アルゴリズムのサンプルなどはあまり見ないで、マクロなど特徴的な機能だけつまみ食いしました。

竹内氏 いや〜、徹底した言語マニアがにじんでくるよ。特異な才能。天性的に文系の発想です。林君は言葉の構造が好きなんだね。もしかしたらある日突然、比較言語学に転向するかもしれない。例えば、インド・ヨーロッパ語と中国語の構造の違いや、日本語とモンゴル語がどれくらい似ているかを研究しだしたりして。

 Lispを勉強してマクロを面白いと思ったということは、多重代入もこの時期ですか?

林氏 はい。

竹内氏 継続は?

林氏 継続はちょっと後ですね。Schemeなので。

竹内氏 Webでマクロと多重代入を勉強してから、Schemeに入ったんだ?

林氏 Schemeは勉強しようと思ったというか、Schemeのコードが書かれているブログを見て、defineでの定義など簡単な文法は押さえていました。処理系をダウンロードしてマニュアルを眺めて、大枠をつかむくらいです。継続の概念はSchemeを勉強する時点で興味がありました。実行の位置が飛ぶのが面白いと思いました。Rubyの継続も参考にしました。

竹内氏 (多くのプログラミング言語を)触りまくりなわけね。でも、触りまくりなんだけど、本格的なプログラムを書いたのはCyanの処理系が初めてってことだ?

林氏 そういうことです。

竹内氏 ははは、すごいね〜! 最初に作ったプログラムが自分の作ったプログラミング言語の処理系というのは、何というかしびれてしまうなぁ。

「もし林君がぱっと引っ張り出した部誌がコンピュータ部の部誌ではなく比較言語学部の部誌だったら、全然違う道を歩んでたと思うよ」(竹内氏)。
「もし林君がぱっと引っ張り出した部誌がコンピュータ部の部誌ではなく比較言語学部の部誌だったら、全然違う道を歩んでたと思うよ」(竹内氏)。

Lispを勉強した後、いよいよCyanの開発に乗り出す

 Cyanとは、ALGOL文法の言語にLispのマクロを入れることをコンセプトに作られたプログラミング言語。設計の目標は、LispのマクロとS式を分離すること。Pythonのインデントやプロトタイプベースを用いるなど、処理系をより簡単に実装するための仕様が固められている。つまり、Cyanはプログラムを抽象的な観点でとらえているため、ものをつくる実用性は無視している。開発者に「こういう機能が合わさっていると面白いな」と思わせるためのものだ。言語好きによる言語好きのための言語だといえる。

3.――Cyanができるまでの経緯を教えてください

林氏 Cyanを着想したのは高校1年の春です。本当は高校1年のときにU-20 プロコンに応募しようと思ったのですが、完成が間に合いませんでした。Cyanの開発言語はC#ですが、高校1年の夏休みの間はJavaで書いていました。

竹内氏 どのタイミングでC#に変わったの?

林氏 C#で書いたのは、高校2年のU-20 プロコンに応募したときです。コンテストに出す作品を、Javaで書いたものを引き続きC#で書くよりは、もう1度書き直そうと思いました。Javaを使うのは飽きたというか、Javaは遊び心がないかなと思って。その点C#はちょっとユーモアがあるので。

竹内氏 C#対Java、つまりマイクロソフト対サン・マイクロシステムズの戦いですね。いまの発言は本音ベースで実に面白い。確かに、Javaはあまり遊び心がないですね。最近のJavaは随分性能が良くなってきたけどね。Javaに遊び心がない、とても言い得て妙! それでいうとLispとかRubyは遊びまくり。

 C#で書き直した感想はどうでした?

林氏 率直にいって、面白かったんですよね。例えば、ゲッターとセッターを使えば長い名前を簡略化できたり、継続の概念を抽象化して、評価器の中にゲッターとセッターで継続を出し入れするなど、抽象的に書けることが面白かったです。あとはJavaでもできたんでしょうがリフレクションを多用して簡単に書けたことも面白かったです。

竹内氏 高校2年生から出る言葉ではないなぁ。ところで、Cyanの名前の由来は?

林氏 Cで始まる単語にしたかったんです。理由は、HSPからCに入ったときに、Cが構造化されていることに感動を覚えたからです。Cで始まる4文字がよくて、辞書で探しているうちにCyanという単語に出合いました。これは後付けですが、Cyanをローマ字読みするとシアン。Cyanには「思案」「試案」「私案」という意味があります。

竹内氏 名前を4文字にこだわって辞書で探して見つけて、その後に日本語の言葉を当てはめて考えるというやり方、私と同じなんですよね。私も昔TAOという言語を作ったけど、私の場合3文字。分厚い辞書をバンと開いたら「TAO:宇宙万物の根本原理」が出てきて、「これしかない」と決めた。その後、TAOの本を英語で読んでえらく感動して、「プログラミングとTaoismの関係」について研究会で発表したことがあります。ほとんど冗談みたいな内容だけどね。

信条は、視野を広く持つこと。「自分の性格は、悪くいえば飽きっぽいのですが、それでいまのCyanがあります。普通は一緒にできないものを一緒にしてしまおうという感覚を大切にしたいです。固定観念にとらわれないように」(林氏)
信条は、視野を広く持つこと。「自分の性格は、悪くいえば飽きっぽいのですが、それでいまのCyanがあります。普通は一緒にできないものを一緒にしてしまおうという感覚を大切にしたいです。固定観念にとらわれないように」(林氏)

Copyright © ITmedia, Inc. All Rights Reserved.

ページトップに戻る