千年の言語？
A Thousand-Year Language?
住井 英二郎Eijiro Sumii

あんた誰？
Who am I?
z いわゆるプログラミング言語「理論」の研究者（大学准教授）です– ML（SML, OCaml）とかλ計算とか教えたり、– いわゆる「型理論」とかプログラム等価性とか研究しています– PerlとかRubyとか開発していません
z すみません…

 Academic researcher on programming

language “theory”– Not developing Perl or Ruby (sorry...)何でここにいるの？
Why am I here?
z 趣味でMinCamlを作ったため（多分）– MinCamlって何？

⇒ OCamlサブセットの教育用コンパイラ– OCamlって何？
⇒ 関数型言語MLの方言・拡張 Maybe because I developed “MinCaml”,

an educational compiler for a minimal
subset of OCaml

本題
On the agendaz 百年後の言語はどうなっていると思いますか？
私の答：わかりません

なんじゃそりゃ説明します What would be a programming language
like 100 years later?
My answer: I don't know (I'll elaborate!)

約百年前
Almost 100 years agoz

Alonzo Church, “An Unsolvable Problem of Elementary Number Theory”,
American Journal of Mathematics, Vol. 58, No. 2 (Apr., 1936), pp. 345-363.

λ計算：Lispや、いわゆる「クロージャ」の元祖(Scheme, JavaScript, Ruby, ...)
λ-calculus, the origin of Lispand so-called “closures”

ちょっと待てWait a sec
それ「プログラミング」言語じゃないでしょ？
–

汎用電子計算機が実現したのは1946年(ENIAC)⇒「電子」計算機じゃなくてもプログラミングは可能（かつ必要）–

17世紀から20世紀まで、“Computer” ＝「計算者」（人間の職業）だった

Was it even a “programming” language?
⇒ Yes! “Computers” need not be electronic.
–

They were a human profession in the 17th-20thcentury

数百年前
A few hundred years ago
z 関数：

17～18世紀（ライプニッツ、オイラー）z 変数：
古代ギリシャ、16世紀（ヴィエタ）
 Functions:17-18th century (Leibniz, Euler) Variables:
Ancient Greece, 16th century (Vieta)

数千年前
A few thousand years agoz

ユークリッドの互除法：紀元前300年（エジプト）– 現在でもRSA暗号の鍵生成等で必須> grep euclid openssl-0.9.8h/crypto/bn/bn_gcd.cstatic BIGNUM *euclid(BIGNUM *a, BIGNUM *b);t=euclid(a,b);
static BIGNUM *euclid(BIGNUM *a, BIGNUM *b)z

二次方程式の一般的解法：紀元前1800年（バビロニア）– 当然必要（グラフィックスとかいろいろ）Important algorithms recorded before Christ– Euclid's algorithm (300 BC)– Solution of quadratic equations (1800 BC)

もっと最近
More Recentlyz 関数型言語、ガベージコレクション：

1950年代(Lisp)z オブジェクト：1960年代(Simula 67)
z 例外処理、ジェネリックス、型推論：
1970年代(ML) Important concepts developed in the50-70's– FP, GC, objects, exception handling,generics, type inference, ...

だから何？
So what?
z 「100年後のプログラミング言語」は予想することも、意図して発明することもできない
z しかし、「面白い」と思ったアイディアをきちんと形に残しておけば、100年後や1000年後に開花するかもしれない We cannot predict nor invent the (far)future by intention
 However, our idea may bloom 100-1000
years later if we record it well

それでも予想してみると…
That said...
z つい最近まで、「コンピュータ ＝ 人間」「プログラミング言語 ＝ 自然言語＋α」
だった
z 将来は、電子計算機を「自然言語＋α」でプログラムできるようになる…かも？？？
 Until recently, “computers” were humanbeings and “programs” were written in(almost) human languages
 Why not let electronic computers
understand those languages?

それ以外のデタラメ予想Other random predictionsz 全自動正当性証明器つき言語？
z 大量の目的特化言語(DSL)？
z 非技術者用グラフィカル言語？
z 量子言語？
 Language with fully automatic correctness

prover?
 Millions of domain specific languages?
 Graphical languages for your mom andchildren?
 Quantum languages?

あなたは今まで何をしてきましたか？
What have I done so far?
z 「プログラミング言語理論」の基礎研究（≠CやJavaの使い方）
λ計算（関数型言語のモデル）とかπ計算（並行計算のモデル）とかCf.
z 「コンピュータサイエンスって、WordやExcelの使い方を研究してるんですか」(医者の知人）
z 「テレビ壊れたから直して」（某先生の御父上）–

 Foundational research on programming

language theory (λ-calculus, π-calculus, ...)なぜプログラミング言語理論？
Why PL theory?
z 「計算」の本質に迫る（と思う）から– プログラミング言語なんて、文法（見た目）以外は全部チューリング等価じゃないの？
⇒ 否！「抽象化」が本質的（例：アセンブリ言語 v.s. Ruby）– 電子計算機でも人間コンピュータでも同じ
 It is about the essence of computing!
– Doesn't matter whether the computer iselectronic or human

で、お前は何を研究してるの？
My current research topic
z いろいろな抽象化機能がもたらす性質について研究しています
例：ハッシュで実装した辞書と、木で実装した辞書
z バイト列としては等価にならないz オブジェクトとしてカプセル化すれば等価になる– 同様に、様々な抽象化機能が様々な性質をもたらす（モジュール、ローカル変数、クロージャ、etc.）– そのような性質を証明する手法を研究しています– A proof method for various properties

induced by abstraction mechanisms–Objects, modules, local variables, closures, ...

どこがプログラムやねん
It doesn't look like a program!
z 特定のプログラミング言語ではなく、数学的計算モデルとして定式化– 一般的本質を抽出するため

 It is a general, mathematical model– Rather than a particular, concrete

programming language

他には？
What else?
z 文字列のための正規表現型– 変数や出力がどういう文字列になるか、プログラム実行前に解析する
z メモリ安全なＣ言語実装

等々に手を出したことも…（主に学生と） Regular expression types for strings Memory-safe implementation of Cetc., with students

MinCamlは？
What about MinCaml?
z あれは研究というより趣味です:-)– 関数型言語は難しくも遅くもない、という宣伝目的
z 対象言語の構文が11行
z コンパイラは2000行
z まあまあ自明でないプログラムが動く– 千数百行のレイトレーシングなど

z GCCとほぼ同じぐらいの性能（当時） A compiler in 2000 lines, producing as

efficient native code as GCC

あなたはこれから何をしますか？
What am I going to do?
z すみません、わかりません（はじめに言った通り）
z 百年後・千年後の人も「面白い」と思えるような研究を「記録に残す」– ことができれば良いなあ…と思います Sorry, I don't know (as stated before) However, I'd like to invent and record

ideas that are still interesting in thefar future