50 年前 のプログラミング言語 50 年後 のプログラミング言語

22
50 年年年年年年年年年年年年 50 年年年年年年年年年年年年 #spcamp 2010 BoF

description

50 年前 のプログラミング言語 50 年後 のプログラミング言語. # spcamp 2010 BoF. “ どんな技術であれ、 100 年後を予想できるなんて考えるのは傲慢だと 思われるかもしれない。 しかし、我々は既に 50 年の歴史を持っているということを 考えて欲しい。 過去 50 年の言語の進化がいかにゆっくりとしたものであるかを 考えれば、 100 年後を見るということも考え得る範囲だろう。 ” - PowerPoint PPT Presentation

Transcript of 50 年前 のプログラミング言語 50 年後 のプログラミング言語

Page 1: 50 年前 のプログラミング言語 50 年後 のプログラミング言語

50 年前のプログラミング言語50 年後のプログラミング言語

#spcamp 2010 BoF

Page 2: 50 年前 のプログラミング言語 50 年後 のプログラミング言語

“ どんな技術であれ、 100 年後を予想できるなんて考えるのは傲慢だと 思われるかもしれない。しかし、我々は既に 50 年の歴史を持っているということを 考えて欲しい。

過去 50 年の言語の進化がいかにゆっくりとしたものであるかを 考えれば、100 年後を見るということも考え得る範囲だろう。”http://practical-scheme.net/trans/hundred-j.html (google: 百

年の言語 )百年の言語 --- The Hundred-Year Language

Paul Graham / 訳 : 川合史朗

Page 3: 50 年前 のプログラミング言語 50 年後 のプログラミング言語

50 年前の言語 (1960)

ALGOLAPLCOBOLFORTRANLISP

http://www.levenez.com/lang/  (google: computer language history)

Page 4: 50 年前 のプログラミング言語 50 年後 のプログラミング言語
Page 5: 50 年前 のプログラミング言語 50 年後 のプログラミング言語

今の言語 (2010)

Ruby Python Perl PHP ECMAScript

JavaScript, ActionScript

Scala Haskell OCaml Erlang

C C++ Java C#

Lisp CommonLisp Scheme Clojure

Page 6: 50 年前 のプログラミング言語 50 年後 のプログラミング言語

【議論タイム】

50 年前の言語と

今の言語

違いはなんだろう?

Page 7: 50 年前 のプログラミング言語 50 年後 のプログラミング言語

【議論タイム】

「 50 年後の言語」を予測しよう!

… の前に

Page 8: 50 年前 のプログラミング言語 50 年後 のプログラミング言語

“ 今 (2010)”の “研究者” が考えている言語をご紹介

Page 9: 50 年前 のプログラミング言語 50 年後 のプログラミング言語

すごい型システム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”

Page 10: 50 年前 のプログラミング言語 50 年後 のプログラミング言語

「スケッチ」プログラミング“ だいたいこんな感じ” コーディング

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 他

Page 11: 50 年前 のプログラミング言語 50 年後 のプログラミング言語

【議論タイム】

「 50 年後の言語」を考えてみよう!「今の言語の不満なところが

こう直ってるはず!」「 50 年後のテクノロジーなら

こんなこともできるはず!」

Page 12: 50 年前 のプログラミング言語 50 年後 のプログラミング言語

ところでそもそもプログラミング言語、って何?

プログラミング言語(プログラミングげんご)とは、コンピュータに対する一連の動作の指示を記述するための人工言語の総称である [1]

(wikipedia: プログラミング言語 )

1.  ISO 5127—Information and documentation—Vocabulary, clause 01.05.10 では、プログラミング言語を「プログラムを記述するための人工言語」と定義している。

Page 13: 50 年前 のプログラミング言語 50 年後 のプログラミング言語
Page 14: 50 年前 のプログラミング言語 50 年後 のプログラミング言語

【議論タイム】

「プログラミング言語」を「コンピュータへの指示」以外に

使えるでしょうか?

… の前に、いくつかご紹介タイム

Page 15: 50 年前 のプログラミング言語 50 年後 のプログラミング言語

トラックの集配経路

トラックの運行スケジュールの最適化に、プログラミング言語の最適化技法を使う

Ichiro Sato, “A Specification Framework for Earth-friendly Logistics”, 2008, 他

Page 16: 50 年前 のプログラミング言語 50 年後 のプログラミング言語

人間の使う言語の「理解」

Chris Baker, “Wild Control Operators”, 2009, 他 ( 野生の制御構文 )

Page 17: 50 年前 のプログラミング言語 50 年後 のプログラミング言語

人間の使う言語の「理解」「 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”); !??

Page 18: 50 年前 のプログラミング言語 50 年後 のプログラミング言語

「か」は制御構文! 制御構文の例

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 等の “限定継続”

Page 19: 50 年前 のプログラミング言語 50 年後 のプログラミング言語

数学の“証明”をプログラミング

「√ 2 は無理数」( x*x = 2 なら x は

分数で書けない)の証明

Page 20: 50 年前 のプログラミング言語 50 年後 のプログラミング言語

“ 証明” と “プログラミング”

定理証明証明が論理的

に正しい保証既知の定理

型その型の関数型チェック

ライブラリ API

Page 21: 50 年前 のプログラミング言語 50 年後 のプログラミング言語

【議論タイム】

「プログラミング言語」を「コンピュータへの指示」以外に

使えるでしょうか?

Page 22: 50 年前 のプログラミング言語 50 年後 のプログラミング言語

“(1) 100 年後の言語は、原理的には、 現在でも設計できる。 (2) そのような言語は、もし存在すれ ば、 現在でもプログラムを書くのに 良い言語かもしれない。こんなふうにアイディアを並べて見ていると、 100 年後の言語を、今、設計したくなってこないかい ?”http://practical-scheme.net/trans/hundred-j.html (google: 百

年の言語 )百年の言語 --- The Hundred-Year Language

Paul Graham / 訳 : 川合史朗

まとめ