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

Download Report

Transcript 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









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 /訳: 川合史朗