はじめに
ここ最近はRubyを書くことが少なくなってきたのですが、
RubyKaigiの一日目に行ってきた
ミドルウェアとかインフラとか、設計とかコードから離れた生活を繰り広げております
RubyKaigiの一日目は、これまた時間と仕事の都合上午前中のみしか参加できずorz
なので、一日目は、keynoteだけ聞いてきました
Crystalにも興味はあったので、ちょっと気になるのですがここは涙を飲んで・・・
ところでマネーフォワードさん、すごいですね。
Rubyコミッターのフルタイム採用とか松田さんの技術顧問就任とか。
という訳でメモを残しておく
keynote
プログラマーの美徳
- 怠惰(怠けるための努力をしない)
- ガマンしない(PCが活用されていないことに怒る)
- 傲慢(ソフトウェアのクォリティ)
全て、怒りに通じている
(Rubyにケチ付けられていることも・・・)
怒りは伝染るので、親切も伝染る
なので、内心腹たってても親切に対応するといいことがある
親切な対応が多いので、Rubyコミュニティは素晴らしい
最近のニュース
- Ruby2.3.0リリースが出た(クリスマスにリリースする)
- RubyKaigiに合わせてやった
- もしかして機能をつけた(NameErrorの際にスペル指摘とか)
- Enumerable#grep_vが追加(マッチしないものを提示)
- Hash#fetch_at(指定しないキーがあれば例外)
- Numeric#negative? positive?
- Hashの包含関係をチェックできるようになった
- Hash#to_proc(h= {1: 2,2: 4,4: 6} (1..3)..map(&h))
- Array,Hash#digメソッド追加(data.dig(:user, 0)のようにあればアクセスして値を返す)
- ヒアドキュメントにチルダをつけると、インデントの浅いところに合わせる
- frozen-string-literalをつけると、文字列に追加するとエラー、パフォーマンスがよくなる&エラーがはっきりする
- safe navigation オペレーター「&.」の追加(ぼっちオペレーター・・・) u && u.first && u.name が u&.first&.name になる
- 年に5%~10%の改善(2.3も同様)
よくなる提案を受け入れてもっと良い物をという、Rubyコミュニティの成果
- mruby1.2
ビルドプロセスとか、諸々の改善
Streem
- githubに公開してた
- 何もしないのに取り上げられて、色々とバズってしまった
Ruby3
- 変化はコスト、苦痛
- 言語デザインは難しい
- 矛盾する要求がある
未来の状況はわからない
スクリプト言語にオブジェクト指向要らない
→21世紀になってくると何らかの形でオブジェクト指向を持つものが多くなった
→人に合わせてつくることが無かった
新しい当たり前になれた
Ruby成功の秘訣
webappの分野ではトップ近くまでなれた
とはいえ、言語して完成しているわけではない
互換性の問題や、移行の問題(5年かかった)
# Python3よりはマシ
全部を捨てることはせず、段階的に変化させていく方法を取った
1つずつ、テストを書いて確認して実施
移行パスの提示
ドラスティックな変更はしないし、ひとつずつの進歩
バージョニング問題(1.8 vs 1.9のときは除くの轍は踏まなかった)は他の言語のようなことは起きなかった
変化のうえで学んだこと
- 何もかもいっぺんに捨てない
- 劇的な変化はしない(互換性を理由なく捨ててはいけない)
- 変化を続ける
- ユーザーへの利益(簡潔にかけるとか)
Ruby3では以下をやりたい
- マルチコアへの対応(開発当時はシングルコアでマルチスレッド)
- コードの拡大(主戦場が変った)
- 扱うデータ量の増加でのパフォーマンス対応
こんな感じ(約束はしていない)
- アクターモデル(goroutin+channelも一応こちらに)
- オーナーシップモデル
- STM(software transaction)は難しいし、無理かも
- streamモデル
- pipeラインを使ったイベントループ(2番めのVMを動かすことで実現)
- コンパイルを賢く
- soft typing(flowtyped interfaceでFlow / Crystal言語、ある程度の型チェックDialyzar(Erlang))
- 3倍早くをパフォーマンスも目標にする(Ruby2.0よりも3倍)
- 2020までにRuby3を出したい・・・
- 難しいことに挑戦
- メモリを大量に使うけど、消費量をおさえるようにはしたい