Upgrade to Pro — share decks privately, control downloads, hide ads and more …

world-of-languages.pdf

Yukihiro Matsumoto
February 21, 2012
1.2k

 world-of-languages.pdf

Yukihiro Matsumoto

February 21, 2012
Tweet

Transcript

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

    View Slide

  2. 言語の世界 Powered by Rabbit 0.9.2
    プログラミング言語って?
    言語ってなんだろう?

    View Slide

  3. 言語の世界 Powered by Rabbit 0.9.2
    プログラミング言語って?
    プログラム=手順書
    手順書記述用人工言語

    View Slide

  4. 言語の世界 Powered by Rabbit 0.9.2
    プログラミング言語って?
    プログラム=理想記述
    思考表現用人工言語

    View Slide

  5. 言語の世界 Powered by Rabbit 0.9.2
    せめぎあうふたつの立場
    機械のためか?
    人間のためか?

    View Slide

  6. 言語の世界 Powered by Rabbit 0.9.2
    FORTRAN (1954)
    FORmula TRANslator

    View Slide

  7. 言語の世界 Powered by Rabbit 0.9.2
    FORTRAN (1954)
    人間のため
    数式でプログラムできるよう

    View Slide

  8. 言語の世界 Powered by Rabbit 0.9.2
    FORTRAN (1954)
    機械のため
    速く計算できるためにはどんなことでも

    View Slide

  9. 言語の世界 Powered by Rabbit 0.9.2
    FORTRAN (1954)
    ループアンローリング
    ベクトル化

    View Slide

  10. 言語の世界 Powered by Rabbit 0.9.2
    FORTRAN (1954)
    背景
    コンピュータが遅かった

    View Slide

  11. 言語の世界 Powered by Rabbit 0.9.2
    FORTRAN (1954)
    背景
    「言語の常識」がまだなかった

    View Slide

  12. 言語の世界 Powered by Rabbit 0.9.2
    LISP (1958)
    LISt Processor

    View Slide

  13. 言語の世界 Powered by Rabbit 0.9.2
    LISP (1958)
    人間のため
    数学的概念からスタート
    ラムダ計算

    View Slide

  14. 言語の世界 Powered by Rabbit 0.9.2
    LISP (1958)
    機械のため
    IBM704計算機
    car=content of address register
    cdr=content of data register

    View Slide

  15. 言語の世界 Powered by Rabbit 0.9.2
    LISP (1958)
    人間のため
    ガーベージコレクター

    View Slide

  16. 言語の世界 Powered by Rabbit 0.9.2
    LISP (1958)
    人間のため
    Lispプログラマは値はなんでも知っている
    が、コストについてはなにも知らない

    View Slide

  17. 言語の世界 Powered by Rabbit 0.9.2
    LISP vs FORTRAN
    人間主義 vs 機械主義

    View Slide

  18. 言語の世界 Powered by Rabbit 0.9.2
    勝者は?
    Algol!

    View Slide

  19. 言語の世界 Powered by Rabbit 0.9.2
    漁夫の利
    原始的すぎるFORTRAN
    数学的すぎるLISP
    求められたのはアルゴリズム記述

    View Slide

  20. 言語の世界 Powered by Rabbit 0.9.2
    新たな伝統の誕生
    Algolは滅びぬ!
    何度でもよみがえるさ

    View Slide

  21. 言語の世界 Powered by Rabbit 0.9.2
    Algol属
    Algol → PL/I
    Algol → Pascal

    View Slide

  22. 言語の世界 Powered by Rabbit 0.9.2
    Algol属
    Ada, Eiffel, C, C++, Java,...

    View Slide

  23. 言語の世界 Powered by Rabbit 0.9.2
    Lispへの揺り戻し
    Smalltalk, Scheme, Ruby,...

    View Slide

  24. 言語の世界 Powered by Rabbit 0.9.2
    言語のカンブリア爆発
    カンブリア爆発
    古生代カンブリア紀の
    間に突如として今日見
    られる動物の「門」が出
    そろった現象

    View Slide

  25. 言語の世界 Powered by Rabbit 0.9.2
    言語のカンブリア爆発
    言語のカンブリア爆発
    1960年代後半から
    1970年代前半までに
    多種多様な言語が誕
    生した現象

    View Slide

  26. 言語の世界 Powered by Rabbit 0.9.2
    言語のカンブリア爆発
    現在の「重要」な言語分類の基礎
    システムプログラミング言語
    C:1972
    オブジェクト指向言語
    Simula:1967
    スクリプト言語
    Shell:1971
    関数型言語
    ML:1972

    View Slide

  27. 言語の世界 Powered by Rabbit 0.9.2
    言語のカンブリア爆発
    「変な言語」も
    配列指向言語
    APL:1960
    論理型言語
    Prolog:1972
    並列言語
    アクターモデル:1973

    View Slide

  28. 言語の世界 Powered by Rabbit 0.9.2
    つまり、どういうことか
    キバヤシ
    優れた言語のアイディ
    アは1970年代までに
    出揃っているのだよ!
    MMRメンバー
    なんだってーーっ!!

    View Slide

  29. 言語の世界 Powered by Rabbit 0.9.2
    言語設計者受難の時代
    どうせ既存のものの組
    み合わせさ

    View Slide

  30. 言語の世界 Powered by Rabbit 0.9.2
    そうは言っても
    人気の言語はそれなりに新しい
    Perl (1986)
    Python (1990)
    Ruby (1995)
    PHP(1995)

    View Slide

  31. 言語の世界 Powered by Rabbit 0.9.2
    そうは言っても
    人気の言語はそれなりに新しい
    Java (1995)
    C# (2000)
    Scala (2003)
    Erlang (1986)

    View Slide

  32. 言語の世界 Powered by Rabbit 0.9.2
    新しい?
    とは言っても10年、20年

    View Slide

  33. 言語の世界 Powered by Rabbit 0.9.2
    新しい?
    言語の世界じゃ10年く
    らいじゃまだまだはなた
    れ小僧さ

    View Slide

  34. 言語の世界 Powered by Rabbit 0.9.2
    新しい言語の動機
    作りたかったから
    新しいパラダイム
    新しい環境
    新しい制約

    View Slide

  35. 言語の世界 Powered by Rabbit 0.9.2
    新しいパラダイム
    構造化プログラミング
    オブジェクト指向プログラミング
    関数型プログラミング

    View Slide

  36. 言語の世界 Powered by Rabbit 0.9.2
    新しいパラダイム
    ここ20年くらい登場してないなあ

    View Slide

  37. 言語の世界 Powered by Rabbit 0.9.2
    新しいパラダイム
    過去のパラダイムの組み合わせ

    View Slide

  38. 言語の世界 Powered by Rabbit 0.9.2
    新しいパラダイム
    既存のパラダイムの組み合わせ
    並列+関数型
    オブジェクト指向+関数型
    並列+論理型

    View Slide

  39. 言語の世界 Powered by Rabbit 0.9.2
    既存のパラダイムの組み合わせ
    バランスの良い組み合わせ

    View Slide

  40. 言語の世界 Powered by Rabbit 0.9.2
    新しい環境
    新しいOS
    新しいCPU
    新しいアプリケーション

    View Slide

  41. 言語の世界 Powered by Rabbit 0.9.2
    新しいアプリケーション
    Web
    MapReduce

    View Slide

  42. 言語の世界 Powered by Rabbit 0.9.2
    新しい制約
    CPU数
    メモリ量
    データ量
    アクセス量

    View Slide

  43. 言語の世界 Powered by Rabbit 0.9.2
    どこまでが言語か
    文法
    ライブラリ
    アーキテクチャ

    View Slide

  44. 言語の世界 Powered by Rabbit 0.9.2
    どこまでが言語か
    デザインパターン
    コミュニティ
    エコシステム

    View Slide

  45. 言語の世界 Powered by Rabbit 0.9.2
    どこまでが言語か
    思想
    人格

    View Slide

  46. 言語の世界 Powered by Rabbit 0.9.2
     
    温故知新

    View Slide

  47. 言語の世界 Powered by Rabbit 0.9.2
     
    歴史から学ぶ

    View Slide

  48. 言語の世界 Powered by Rabbit 0.9.2
     
    歴史のパターン

    View Slide

  49. 言語の世界 Powered by Rabbit 0.9.2
    歴史の振り子
    集中 vs 分散

    View Slide

  50. 言語の世界 Powered by Rabbit 0.9.2
    歴史の振り子
    性能 vs 生産性

    View Slide

  51. 言語の世界 Powered by Rabbit 0.9.2
    歴史の振り子
    静的 vs 動的

    View Slide

  52. 言語の世界 Powered by Rabbit 0.9.2
    歴史の振り子
    正確さ vs 柔軟さ

    View Slide

  53. 言語の世界 Powered by Rabbit 0.9.2
    未来の言語
    APL

    View Slide

  54. 言語の世界 Powered by Rabbit 0.9.2
    APL
    APLによるライフゲーム

    View Slide

  55. 言語の世界 Powered by Rabbit 0.9.2
    未来の言語
    Whitespace

    View Slide

  56. 言語の世界 Powered by Rabbit 0.9.2
    Whitespace
    Whitespaceによるhello world

    View Slide

  57. 言語の世界 Powered by Rabbit 0.9.2
    未来の言語
    新しいぶどう酒は新し
    い皮袋に
    [「マタイ 9:17」より引用]

    View Slide

  58. 言語の世界 Powered by Rabbit 0.9.2
    旧来の言語
    古いぶどう酒は古い皮
    袋に

    View Slide

  59. 言語の世界 Powered by Rabbit 0.9.2
    未来の言語
    大規模分散
    高抽象度

    View Slide

  60. 言語の世界 Powered by Rabbit 0.9.2
    未来へのパラメータ
    データ量
    アクセス量
    CPU数

    View Slide

  61. 言語の世界 Powered by Rabbit 0.9.2
    データ量
    ビッグデータ

    View Slide

  62. 言語の世界 Powered by Rabbit 0.9.2
    アクセス量
    クラウド
    ソーシャルゲーム

    View Slide

  63. 言語の世界 Powered by Rabbit 0.9.2
    CPU数
    マルチコア
    クラウド

    View Slide

  64. 言語の世界 Powered by Rabbit 0.9.2
    未来の言語
    Erlang
    Node.js
    R
    SQL
    の発展形

    View Slide

  65. 言語の世界 Powered by Rabbit 0.9.2
    Erlang
    分散
    アクターモデル

    View Slide

  66. 言語の世界 Powered by Rabbit 0.9.2
    Node.js
    大量アクセス
    非同期I/O

    View Slide

  67. 言語の世界 Powered by Rabbit 0.9.2
    R
    統計・解析
    ビッグデータ連携 (R-ODM)

    View Slide

  68. 言語の世界 Powered by Rabbit 0.9.2
    SQL
    宣言的データ取得
    高抽象度
    Hive

    View Slide

  69. 言語の世界 Powered by Rabbit 0.9.2
    言語の楽しさ
    プログラミングの楽しさ

    View Slide

  70. 言語の世界 Powered by Rabbit 0.9.2
    言語の楽しさ
    言語=プログラミング

    View Slide

  71. 言語の世界 Powered by Rabbit 0.9.2
    言語の楽しさ
    言語実装=プログラミング

    View Slide

  72. 言語の世界 Powered by Rabbit 0.9.2
    言語の楽しさ
    言語実装=プログラミング総合芸術

    View Slide

  73. 言語の世界 Powered by Rabbit 0.9.2
    言語の楽しさ
    言語設計=プログラミング

    View Slide

  74. 言語の世界 Powered by Rabbit 0.9.2
    言語の楽しさ
    言語設計=発想をプログラミング

    View Slide

  75. 言語の世界 Powered by Rabbit 0.9.2
    言語の楽しさ
    We program you!

    View Slide

  76. 言語の世界 Powered by Rabbit 0.9.2
     
    Enjoy Programming!

    View Slide