RubyKaigi 2015レポート

まつもとゆきひろさん,Rubyの変化で大事にしているルールを守りつつ「2019年までにRuby 3x3を実現したい」 〜RubyKaigi 2015基調講演 1日目

この記事を読むのに必要な時間:およそ 2.5 分

12月11日~13日,ベルサール汐留にてRubyKaigi 2015が開催されました。今年も基調講演が毎日一つずつ行われました。その模様をレポートします。

RubyKaigi 2015初日の基調講演はまつもとゆきひろさんです。「Ruby 3 challenges」と題して,間もなくリリース予定のRuby 2.3.0の紹介をしつつ,Ruby 3について話しました。

画像

MINASWAN

"MINASWAN"という海外で生まれた標語があります。この言葉,その文化を日本に逆輸入したいと,まつもとさんは話し始めました。

Rubyコミュニティの徳

ラリー・ウォールがプログラマに必要なものとして提唱している,プログラマの三大美徳というものがあります。

  • 怠惰 (自分の仕事を楽にするためにはどんな努力でもする)
  • 短気 (コンピュータが怠けているのに怒りを感じ,コンピュータが意図を読みとって動作するようにする)
  • 傲慢 (他の人が文句をつけないようなものを作る)

これらはすべて怒りの感情に通じています。怒りは制御されている限りにおいてはモチベーションに繋がりますが,外に出してしまうと周囲に伝染してしまいます。一方,よい感情も伝染するため,コミュニケーションにおいて内心腹を立ててもそれを外に出さず,親切な対応が大事です。これがRubyコミュニティにおける最も大事な徳であると,まつもとさんは言います。

Matz is nice so we are nice

そしてRubyコミュニティには,そのコミュニティを表現した標語に"MINASWAN"というものがあると紹介しました。これは"Matz is nice so we are nice"の略で,もめごとがあっても「matzがniceだから俺らもniceでいよう」と,なだめることが海外のメーリングリストではよく見られるそうです。MINASWANはマーティン・ファウラーが昔RubyConfで指摘したのが始まりで,今ではスローガンにまで昇華しています。

この標語についてあまり日本では触れられることがないため,日本のRubyコミュニティにこの特質を逆輸入したいと考え,講演の最初に取り上げたと述べました。

画像

2.3.0 の変更点について

RubyKaigi 2015に合わせて 2.3.0-preview2 がリリースされました。Ruby 2.3.0はこのクリスマスにリリースされる予定です。

2.3.0での主要な変更点について紹介しました。

  • Did-you-mean
  • Enumerable#grep_v
  • Hash#fetch_values
  • Numeric#positive?, Numeric#negative?
  • Hash#<=, Hash#<, Hash#>=, Hash#>
  • Hash#to_proc
  • Array#dig, Hash#dig, Struct#dig
  • Indented here doc <<~
  • Frozen string literals pragma
  • Safe navigation operator

詳細については 2.3.0-preview2 の Changelogをご覧ください。

Frozen string literals

ここでは,変更点の中でもRuby 3における非互換の検証として注目されているFrozen string literalsについて詳しく取り上げます。

Stringリテラル"literal"を常に.freezeしたものとして扱うコマンドラインオプションとマジックコメントが導入されました。この背景にはfreezeにまつわる社会問題があったと,まつもとさんは話します。

画像

Ruby 2.1から,"literal".freezeが最適化され,Stringオブジェクトを都度生成せずに常に同じオブジェクトを返すようになりました。"literal"が何度も評価されるような場合には"literal".freezeすることでパフォーマンスの向上が見込まれます。

しかしこれにより,Rubyライブラリの"literal"に対して,その箇所がボトルネックかどうかに関係なくひたすら.freezeをつけるような Pull Requestが散見されるようになりました。確かに高速化はされるのですが,コードの可読性は損なわれてしまいます。そのため,Ruby 3ではすべてのStringリテラルをimmutableにすることを検討しており,その影響調査のために2.3でこのような機能を導入したそうです。

著者プロフィール

松島史秋(まつしまふみあき)

Rubyと麻雀が好き。西日暮里.rb主催。

GitHubmtsmfm
Twitter@mtsmfm

バックナンバー

RubyKaigi 2015レポート

コメント

コメントの記入