「プログラミング言語」 SICP 第4章 ~超言語的抽 …「プログラミング言語」 SICP 第4章 ~超言語的抽象~ その4 五十嵐淳 [email protected]
50 年前 のプログラミング言語 50 年後 のプログラミング言語
description
Transcript of 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)
ALGOLAPLCOBOLFORTRANLISP
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)”の “研究者” が考えている言語をご紹介
すごい型システム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”) コンパイルエラー!
例 : Google “regular expression type”
「スケッチ」プログラミング“ だいたいこんな感じ” コーディング
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 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 / 訳 : 川合史朗
まとめ