76
言語の世界 Powered by Rabbit 0.9.2 言語の世界 ネットワーク応用通信研究所 楽天 技術研究所 Rubyアソシエーション @yukihiro_matz まつもとゆきひろ Yukihiro "Matz" Matsumoto

言語の世界

Embed Size (px)

DESCRIPTION

デブサミ12

Citation preview

Page 1: 言語の世界

言語の世界 Powered by Rabbit 0.9.2

言語の世界

ネットワーク応用通信研究所楽天 技術研究所

Rubyアソシエーション@yukihiro_matz

まつもとゆきひろYukihiro "Matz" Matsumoto

Page 2: 言語の世界

言語の世界 Powered by Rabbit 0.9.2

プログラミング言語って?

言語ってなんだろう?

Page 3: 言語の世界

言語の世界 Powered by Rabbit 0.9.2

プログラミング言語って?

プログラム=手順書

手順書記述用人工言語

Page 4: 言語の世界

言語の世界 Powered by Rabbit 0.9.2

プログラミング言語って?

プログラム=理想記述

思考表現用人工言語

Page 5: 言語の世界

言語の世界 Powered by Rabbit 0.9.2

せめぎあうふたつの立場

機械のためか?

人間のためか?

Page 6: 言語の世界

言語の世界 Powered by Rabbit 0.9.2

FORTRAN (1954)

FORmula TRANslator

Page 7: 言語の世界

言語の世界 Powered by Rabbit 0.9.2

FORTRAN (1954)

人間のため

数式でプログラムできるよう

Page 8: 言語の世界

言語の世界 Powered by Rabbit 0.9.2

FORTRAN (1954)

機械のため

速く計算できるためにはどんなことでも

Page 9: 言語の世界

言語の世界 Powered by Rabbit 0.9.2

FORTRAN (1954)

ループアンローリング

ベクトル化

Page 10: 言語の世界

言語の世界 Powered by Rabbit 0.9.2

FORTRAN (1954)

背景

コンピュータが遅かった

Page 11: 言語の世界

言語の世界 Powered by Rabbit 0.9.2

FORTRAN (1954)

背景

「言語の常識」がまだなかった

Page 12: 言語の世界

言語の世界 Powered by Rabbit 0.9.2

LISP (1958)

LISt Processor

Page 13: 言語の世界

言語の世界 Powered by Rabbit 0.9.2

LISP (1958)

人間のため

数学的概念からスタートラムダ計算

Page 14: 言語の世界

言語の世界 Powered by Rabbit 0.9.2

LISP (1958)

機械のため

IBM704計算機car=content of address registercdr=content of data register

Page 15: 言語の世界

言語の世界 Powered by Rabbit 0.9.2

LISP (1958)

人間のため

ガーベージコレクター

Page 16: 言語の世界

言語の世界 Powered by Rabbit 0.9.2

LISP (1958)

人間のため

Lispプログラマは値はなんでも知っているが、コストについてはなにも知らない

Page 17: 言語の世界

言語の世界 Powered by Rabbit 0.9.2

LISP vs FORTRAN

人間主義 vs 機械主義

Page 18: 言語の世界

言語の世界 Powered by Rabbit 0.9.2

勝者は?

Algol!

Page 19: 言語の世界

言語の世界 Powered by Rabbit 0.9.2

漁夫の利

原始的すぎるFORTRAN

数学的すぎるLISP

求められたのはアルゴリズム記述

Page 20: 言語の世界

言語の世界 Powered by Rabbit 0.9.2

新たな伝統の誕生

Algolは滅びぬ!何度でもよみがえるさ

Page 21: 言語の世界

言語の世界 Powered by Rabbit 0.9.2

Algol属

Algol → PL/I

Algol → Pascal

Page 22: 言語の世界

言語の世界 Powered by Rabbit 0.9.2

Algol属

Ada, Eiffel, C, C++, Java,...

Page 23: 言語の世界

言語の世界 Powered by Rabbit 0.9.2

Lispへの揺り戻し

Smalltalk, Scheme, Ruby,...

Page 24: 言語の世界

言語の世界 Powered by Rabbit 0.9.2

言語のカンブリア爆発

カンブリア爆発

古生代カンブリア紀の間に突如として今日見られる動物の「門」が出そろった現象

Page 25: 言語の世界

言語の世界 Powered by Rabbit 0.9.2

言語のカンブリア爆発

言語のカンブリア爆発

1960年代後半から1970年代前半までに多種多様な言語が誕生した現象

Page 26: 言語の世界

言語の世界 Powered by Rabbit 0.9.2

言語のカンブリア爆発現在の「重要」な言語分類の基礎

システムプログラミング言語C:1972

オブジェクト指向言語Simula:1967

スクリプト言語Shell:1971

関数型言語ML:1972

Page 27: 言語の世界

言語の世界 Powered by Rabbit 0.9.2

言語のカンブリア爆発

「変な言語」も

配列指向言語APL:1960

論理型言語Prolog:1972

並列言語アクターモデル:1973

Page 28: 言語の世界

言語の世界 Powered by Rabbit 0.9.2

つまり、どういうことか

キバヤシ

優れた言語のアイディアは1970年代までに出揃っているのだよ!

MMRメンバー

なんだってーーっ!!

Page 29: 言語の世界

言語の世界 Powered by Rabbit 0.9.2

言語設計者受難の時代

どうせ既存のものの組み合わせさ

Page 30: 言語の世界

言語の世界 Powered by Rabbit 0.9.2

そうは言っても

人気の言語はそれなりに新しい

Perl (1986)

Python (1990)

Ruby (1995)

PHP(1995)

Page 31: 言語の世界

言語の世界 Powered by Rabbit 0.9.2

そうは言っても

人気の言語はそれなりに新しい

Java (1995)

C# (2000)

Scala (2003)

Erlang (1986)

Page 32: 言語の世界

言語の世界 Powered by Rabbit 0.9.2

新しい?

とは言っても10年、20年

Page 33: 言語の世界

言語の世界 Powered by Rabbit 0.9.2

新しい?

言語の世界じゃ10年くらいじゃまだまだはなたれ小僧さ

Page 34: 言語の世界

言語の世界 Powered by Rabbit 0.9.2

新しい言語の動機

作りたかったから

新しいパラダイム

新しい環境

新しい制約

Page 35: 言語の世界

言語の世界 Powered by Rabbit 0.9.2

新しいパラダイム

構造化プログラミング

オブジェクト指向プログラミング

関数型プログラミング

Page 36: 言語の世界

言語の世界 Powered by Rabbit 0.9.2

新しいパラダイム

ここ20年くらい登場してないなあ

Page 37: 言語の世界

言語の世界 Powered by Rabbit 0.9.2

新しいパラダイム

過去のパラダイムの組み合わせ

Page 38: 言語の世界

言語の世界 Powered by Rabbit 0.9.2

新しいパラダイム

既存のパラダイムの組み合わせ

並列+関数型

オブジェクト指向+関数型

並列+論理型

Page 39: 言語の世界

言語の世界 Powered by Rabbit 0.9.2

既存のパラダイムの組み合わせ

バランスの良い組み合わせ

Page 40: 言語の世界

言語の世界 Powered by Rabbit 0.9.2

新しい環境

新しいOS

新しいCPU

新しいアプリケーション

Page 41: 言語の世界

言語の世界 Powered by Rabbit 0.9.2

新しいアプリケーション

Web

MapReduce

Page 42: 言語の世界

言語の世界 Powered by Rabbit 0.9.2

新しい制約

CPU数

メモリ量

データ量

アクセス量

Page 43: 言語の世界

言語の世界 Powered by Rabbit 0.9.2

どこまでが言語か

文法

ライブラリ

アーキテクチャ

Page 44: 言語の世界

言語の世界 Powered by Rabbit 0.9.2

どこまでが言語か

デザインパターン

コミュニティ

エコシステム

Page 45: 言語の世界

言語の世界 Powered by Rabbit 0.9.2

どこまでが言語か

思想

人格

Page 46: 言語の世界

言語の世界 Powered by Rabbit 0.9.2

 

温故知新

Page 47: 言語の世界

言語の世界 Powered by Rabbit 0.9.2

 

歴史から学ぶ

Page 48: 言語の世界

言語の世界 Powered by Rabbit 0.9.2

 

歴史のパターン

Page 49: 言語の世界

言語の世界 Powered by Rabbit 0.9.2

歴史の振り子

集中 vs 分散

Page 50: 言語の世界

言語の世界 Powered by Rabbit 0.9.2

歴史の振り子

性能 vs 生産性

Page 51: 言語の世界

言語の世界 Powered by Rabbit 0.9.2

歴史の振り子

静的 vs 動的

Page 52: 言語の世界

言語の世界 Powered by Rabbit 0.9.2

歴史の振り子

正確さ vs 柔軟さ

Page 53: 言語の世界

言語の世界 Powered by Rabbit 0.9.2

未来の言語

APL

Page 54: 言語の世界

言語の世界 Powered by Rabbit 0.9.2

APL

APLによるライフゲーム

Page 55: 言語の世界

言語の世界 Powered by Rabbit 0.9.2

未来の言語

Whitespace

Page 56: 言語の世界

言語の世界 Powered by Rabbit 0.9.2

Whitespace

Whitespaceによるhello world

Page 57: 言語の世界

言語の世界 Powered by Rabbit 0.9.2

未来の言語

新しいぶどう酒は新しい皮袋に

[「マタイ 9:17」より引用]

Page 58: 言語の世界

言語の世界 Powered by Rabbit 0.9.2

旧来の言語

古いぶどう酒は古い皮袋に

Page 59: 言語の世界

言語の世界 Powered by Rabbit 0.9.2

未来の言語

大規模分散

高抽象度

Page 60: 言語の世界

言語の世界 Powered by Rabbit 0.9.2

未来へのパラメータ

データ量

アクセス量

CPU数

Page 61: 言語の世界

言語の世界 Powered by Rabbit 0.9.2

データ量

ビッグデータ

Page 62: 言語の世界

言語の世界 Powered by Rabbit 0.9.2

アクセス量

クラウド

ソーシャルゲーム

Page 63: 言語の世界

言語の世界 Powered by Rabbit 0.9.2

CPU数

マルチコア

クラウド

Page 64: 言語の世界

言語の世界 Powered by Rabbit 0.9.2

未来の言語

Erlang

Node.js

R

SQL

の発展形

Page 65: 言語の世界

言語の世界 Powered by Rabbit 0.9.2

Erlang

分散

アクターモデル

Page 66: 言語の世界

言語の世界 Powered by Rabbit 0.9.2

Node.js

大量アクセス

非同期I/O

Page 67: 言語の世界

言語の世界 Powered by Rabbit 0.9.2

R

統計・解析

ビッグデータ連携 (R-ODM)

Page 68: 言語の世界

言語の世界 Powered by Rabbit 0.9.2

SQL

宣言的データ取得

高抽象度

Hive

Page 69: 言語の世界

言語の世界 Powered by Rabbit 0.9.2

言語の楽しさ

プログラミングの楽しさ

Page 70: 言語の世界

言語の世界 Powered by Rabbit 0.9.2

言語の楽しさ

言語=プログラミング

Page 71: 言語の世界

言語の世界 Powered by Rabbit 0.9.2

言語の楽しさ

言語実装=プログラミング

Page 72: 言語の世界

言語の世界 Powered by Rabbit 0.9.2

言語の楽しさ

言語実装=プログラミング総合芸術

Page 73: 言語の世界

言語の世界 Powered by Rabbit 0.9.2

言語の楽しさ

言語設計=プログラミング

Page 74: 言語の世界

言語の世界 Powered by Rabbit 0.9.2

言語の楽しさ

言語設計=発想をプログラミング

Page 75: 言語の世界

言語の世界 Powered by Rabbit 0.9.2

言語の楽しさ

We program you!

Page 76: 言語の世界

言語の世界 Powered by Rabbit 0.9.2

 

Enjoy Programming!