Rubykaigi2009 まつもとゆきひろさん基調講演

去年は参加出来ませんでしたが、今年はRubykaigi2009に参加しています。
2日目にまつもとさんの基調講演がありました。そのメモと感想です。
素晴らしい内容で、さらにRubyが好きになりました。

最近のRuby

  • 構成人員の変化。外国人が多い。
  • Rubyそのものにも変化がある。

日本で生まれた言語なので、最初は開発者も日本人ばかりだった。
いまは、外国人の方も多い。
Rubyそのものにも変化が現れてきた。

Ruby羅針盤

  • われわれはどこにいて、どこに向かっているのか?
  • 2009年、日本
  • 21世紀初頭は、プログラミングの黄金時代。人間の都合で選べる時代。
  • 80年代、90年代のプログラミングはひどい。とにかくPCのパワーが弱い。そのせいでひどくプログラミングが捻じ曲げられた。
  • 今は、Rubyなどが議論させるよい時代。

まつもとさんが言うように、私も今の時代(21世紀初頭)はプログラミング黄金時代だと思っています。


音楽で言うと、1970年代だと思っています。どんどん新しい物が生まれる時代です。
1950年代までの商業音楽は、クラシック、ブルース、ジャズ、R&B、フォークが中心の時代。まだシンセサイザーがない時代です。ピアノ、オルガン、アコギが中心。レコードでモノラルサウンドです。
1960年にビートルズが登場して、世界中に衝撃を与え、1969年のビートルズの解散。このころにはステレオサウンドになってます。
ビートルズの実験的な音楽や想像力は後世への影響が大きく、そこを基礎にさまざまものが生まれます。


音楽の1970年代は、
プログレ、ハードロック、メタル、(いわゆる)ビジュアル系(私はデヴィッド・ボウイが最初だと思っている)、シンガーソングライター、AORシンセサイザーの開発、それらの融合などなど・・・。
ヤードバーズの流れを経てディープパープルが8ビートで爆音ライブをやり驚かされハードロックを築き、ジョンレノンが美しいメロディを歌い上げ、ピンクフロイドなどがプログレを築いた時代です。
シンセサイザーや録音技術の向上など、さらに人間が想像力を膨らませられるようになり、さまざまなものが生まれました。


21世紀初頭のプログラミングはまさに、音楽の70年代のように、さまざまなものが生まれる時代なのだと思います。
戦争の影響で生まれたインターネットが発展し、1995年のWindows95で爆発的に普及しましたが、まだまだ通信速度が遅く、PCの性能も低い物でした。
あれから10年以上経ち、PCの性能は飛躍的に向上し、通信速度も飛躍的に向上しました。32kbpsで最速!といっていた時代はとっくに終わっている訳です。
インターネットの普及により生まれた、Linux、同時にHTTPの規格の成長やPerl,Ruby,PHP,Java,C++などのプログラミング言語の発展があり、プログラミング言語やインータネットはいま黄金時代です。情報革命時代のど真ん中です。どんどん新しいソフトウエアが生まれます。あのころは良かったと振り返れる時代に成ると思っています。

まつもとさんのアイデンティティ

  • Ruby作者
  • (根本は)言語オタク。言語をすべて愛している。
  • プログラマ(子供にも教えたいが、自分がやる気にならないと駄目)
  • 文筆家
  • ブロガー(更新できない)
  • Twitter( yukihiro_matz )

われわれはどこに向かっているのか

  • アティチュード
  • 感謝を忘れてはいけない(たくさんの人たちの努力とかかわりで、Rubyはできた)
  • 酸っぱいブドウ(自分には届かないところは、実際は甘いものだけど、酸っぱいものだと思う)
    • 言語が嫌いといっても好みの問題が多い。
    • 自己正当化
    • 真実から目を背ける(フェアではない)
  • Rubyには欠点があるのを素直に認める
  • 割れ窓理論
    • Rubyにはバグがある、それを放置しておくと、Rubyがスラム化(だめになる)
    • あまり変化しないソフトウエアは面白くない
    • 互換性を考えると変化しないほうがいいという考え方もある。
    • 常に変化をし続ける必要がある。割れた窓をほっておくとだめ。
    • バグを直すスピードより、バグを発見するスピードが速いので、ばぐがたまっている・・・。

責任

  • ナイフ。鉛筆を削るためにつかった。人を刺すためではない。
  • 言語はいろんなことができると危ない?
  • 道具の使い方の問題。
  • 強い力(Ruby)を与える(責任を与え)、信頼することによって、人にパワーをあたえ、成功するのが良い。

Rubyは非常に強力だ。使い方によっては、人を傷つける。
まつもとさんは、子供の頃に鉛筆を削るために、ナイフを渡された。親は子供がそのナイフで友人を刺すということはしないだろうと「信頼」したのだ。
Rubyはそのナイフと同じだ。皆さんを信頼している。


原則

  • フェアである
  • 自己責任
  • 信頼する

まつもとさんはCが一番好き

まつもとさんの作業環境

バージョン管理システムは、ネットにつながないと使えないという欠点がある。Stacked GITで解決。パッチなどをStackd上に積み上げることが出来る。

  • StGIT
    • VCS on top of Git
    • Patch Stacking

未公開スタック

  • 27スタック
  • ほとんどは実験
  • いくつかを紹介

以下、スタックの例。

exmplex_lliteral
true_division
  • 1/2 → 有理数 1/2
  • 有利数正規化(2/1→2)には必須
  • 互換性問題代
  • 2.0?
as_conv
  • 明示的な変換(to_a)
  • 暗黙的な変換(to_ary)
  • 明示的な変換は(as_xxx)
  • 暗黙的な変換は(to_xxx)
math_crror_check
  • Math関数が例外を返す NaNを返さない
  • Math関数以外は?0.0/0.0とか
ol_bitmap_marking

あとで

nloop
  • 多重ループメソッド
  nloop(3,3,3) {|i,j,k|
   p [i,j,k]
  }

※コードは移し間違えの可能性があります。

str_index_offsset
  • Bug?
a = "foo"
a[3] = "x"
p s # =>"foox" or exception error 

※コードは移し間違えの可能性があります。

sym_gc
  • シンボルを回収数るGC
  • GCが遅くなる
  • シンボルを繰り返しアサインするかも
private_ivar
block_local_vaars_eq
  • 「:=」で代入した変数はブロックローカル
  • ブロックパラメータでの宣言が不要になる
module_as_trait
  • module+module
    • 新しいモジュールを生成
    • メソッド重複でエラー
  • module - [sym,..]
    • メソッドを削除
open_class_overriide
  • メソッド再定義でオーバーライド
  • superで呼べちゃう
  • アスペクト指向のベース
  • 互換性の問題
keyword_args
  • メソッド定義でキーワード引数
  • def foo(a, b:4, c:7)
  • ...
  • end
lvar_propagate
  • ローカル変数のスコープ
  • 一番外のスコープに更新
  100.times do |x|
     v = x
     ...
   end
   p v  # propagated

※コードは移し間違えの可能性があります。

まとめ

  • フェアである
  • 自己責任
  • 信頼する(Rubyはみなさんを信じている)
  • 感謝
  • 継続する(不遇の時代から、陽を見た)

Rubyコミュニティはモヒカンである。
Rubyはこれからも良くなり続ける。
みなさんの意見によって言語がかわれる。フレキシブルな言語でありたい。

最後に基調講演を聴いたまとめ

Rubyは「悪い物は悪い」といえるコミュニティでいたい。まつもとさんがもし悪いことをしたらコミット権を取り上げるようなコミュニティであってほしい」
とまつもとさんは言っていた。

私はRubyを使ってソフトウエアは作るが、言語設計については正直よく分かっていない。
まつもとゆきひろ コードの世界~スーパー・プログラマになる14の思考法」を読み「おー、このような考えで設計されているのか」と思っている程度である。
この本を読んで、Rubyはより好きになったが、今日のまつもとさんの公演を聞いてさらに好きになった。
これからもずっと使い続けたいと思った。

最後に、まつもとさんはじめRubyに関わるすべての人に感謝。



最後に、Rubykaigi2009のバッチを貼ってみました。バッチはこちらにあります。