220 likes | 323 Views
50 年前 のプログラミング言語 50 年後 のプログラミング言語. # spcamp 2010 BoF. “ どんな技術であれ、 100 年後を予想できるなんて考えるのは傲慢だと 思われるかもしれない。 しかし、我々は既に 50 年の歴史を持っているということを 考えて欲しい。 過去 50 年の言語の進化がいかにゆっくりとしたものであるかを 考えれば、 100 年後を見るということも考え得る範囲だろう。 ”
E N D
50年前のプログラミング言語50年後のプログラミング言語50年前のプログラミング言語50年後のプログラミング言語 #spcamp 2010 BoF
“どんな技術であれ、100年後を予想できるなんて考えるのは傲慢だと 思われるかもしれない。しかし、我々は既に50年の歴史を持っているということを 考えて欲しい。過去50年の言語の進化がいかにゆっくりとしたものであるかを 考えれば、100年後を見るということも考え得る範囲だろう。” http://practical-scheme.net/trans/hundred-j.html(google: 百年の言語)百年の言語 --- The Hundred-Year Language Paul Graham /訳: 川合史朗
50年前の言語 (1960) • ALGOL • APL • COBOL • FORTRAN • LISP http://www.levenez.com/lang/(google: computer language history)
今の言語 (2010) • Ruby • Python • Perl • PHP • ECMAScript • JavaScript, ActionScript • Scala • Haskell • OCaml • Erlang • C • C++ • Java • C# • Lisp • CommonLisp • Scheme • Clojure
【議論タイム】 50年前の言語と今の言語 違いはなんだろう?
【議論タイム】 「50年後の言語」を予測しよう! …の前に
“今 (2010)”の “研究者” が考えている言語をご紹介
すごい型システム 例: Google “regular expression type” def item(s) return “<li>” + s + “</li>”end # item(123) 実行時エラー String item(String s) { return “<li>” + s + “</li>”; } # item(123) コンパイルエラー # item(“p(略)<<<越えられない壁<<<ruby”) 壊れた出力 String(<script>含まない) item(String(/[^<>]*/) s) { return “<li>” + s + “</li>”; } # item(“プギャー> (>_<)m9”) コンパイルエラー!
「スケッチ」プログラミング • “だいたいこんな感じ” コーディング list reverse(list p) { list np = null; while(p) { np = new list; np.val = p; np.next = np; p = p.next; } return np; } list reverse(list p) { list np = null; while(p) { np = new list; (? = ?;)* } return np; } assert(foralli<N: get(p,i) == get(rev(p),N-1-i)); A. Solar-Lezama, “Sketching Approach to Program Synthesis”, 2009 他
【議論タイム】 「50年後の言語」を考えてみよう! 「今の言語の不満なところがこう直ってるはず!」 「50年後のテクノロジーならこんなこともできるはず!」
ところでそもそもプログラミング言語、って何?ところでそもそもプログラミング言語、って何? • プログラミング言語(プログラミングげんご)とは、コンピュータに対する一連の動作の指示を記述するための人工言語の総称である[1] (wikipedia: プログラミング言語) 1. ISO 5127—Information and documentation—Vocabulary, clause 01.05.10 では、プログラミング言語を「プログラムを記述するための人工言語」と定義している。
【議論タイム】 「プログラミング言語」を 「コンピュータへの指示」以外に 使えるでしょうか? …の前に、いくつかご紹介タイム
トラックの集配経路 • トラックの運行スケジュールの最適化に、プログラミング言語の最適化技法を使う • Ichiro Sato, “A Specification Framework for Earth-friendly Logistics”, 2008, 他
人間の使う言語の「理解」 • Chris Baker, “Wild Control Operators”, 2009, 他 (野生の制御構文)
人間の使う言語の「理解」 • 「xが2で割り切れるなら~」 • if( x % 2 == 0 ) print(“yes”); • 「xが3で割り切れるなら~」 • if( x % 3 == 0 ) print(“yes”); • 「xが2か3で割り切れるなら~」 • if( x%2==0 || x%3==0 ) print(“yes”); △ • if( x % (2 || 3)==0 ) print(“yes”); × • if( x % (2 か 3) == 0 ) print(“yes”); !??
「か」は制御構文! • 制御構文の例 • if(c) … 文 • c の結果によって … を実行する/しない • while(c) … 文 • c の結果によって … を何回も実行したりしなかったり • … (x か y) … • if( x % (2か3) == 0 ) print(“yes”); • if( x%2==0 || x%3==0 ) print(“yes”); • x と y によって 周りの … を何回も実行したり!! • Perl6 の “ジャンクション” / Scala等の “限定継続”
数学の“証明”をプログラミング 「√2 は無理数」 (x*x = 2 なら x は分数で書けない)の証明
“証明” と “プログラミング” • 定理 • 証明 • 証明が論理的に正しい保証 • 既知の定理 • 型 • その型の関数 • 型チェック • ライブラリAPI
【議論タイム】 「プログラミング言語」を 「コンピュータへの指示」以外に 使えるでしょうか?
まとめ “(1) 100年後の言語は、原理的には、 現在でも設計できる。 (2) そのような言語は、もし存在すれば、 現在でもプログラムを書くのに良い言語かもしれない。こんなふうにアイディアを並べて見ていると、 100年後の言語を、今、設計したくなってこないかい?” http://practical-scheme.net/trans/hundred-j.html(google: 百年の言語)百年の言語 --- The Hundred-Year Language Paul Graham /訳: 川合史朗