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 C C++ Java C# Lisp JavaScript, ActionScript Scala Haskell OCaml Erlang CommonLisp Scheme Clojure 【議論タイム】 50年前の言語 と 今の言語 違いはなんだろう? 【議論タイム】 「50年後の言語」を 予測しよう! …の前に “今 (2010)”の “研究者” が 考えている言語をご紹介 すごい型システム def item(s) return “<li>” + s + “</li>” end # item(123) 実行時エラー 例: Google “regular expression type” 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(forall i<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 Earthfriendly Logistics”, 2008, 他 人間の使う言語の「理解」 Chris Baker, “Wild Control Operators”, 2009, 他 (野生の制御構文) 人間の使う言語の「理解」 「xが2で割り切れるなら~」 if( 「xが3で割り切れるなら~」 if( x % 2 == 0 ) print(“yes”); x % 3 == 0 ) print(“yes”); 「xが2か3で割り切れるなら~」 x%2==0 || x%3==0 ) print(“yes”); △ if( x % (2 || 3)==0 ) print(“yes”); × if( x % (2 か 3) == 0 ) print(“yes”); !?? if( 「か」は制御構文! 制御構文の例 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 /訳: 川合史朗
© Copyright 2025 ExpyDoc