ドリコムのエンジニアの薗田です。
こちらの記事では、RubyKaigi2018の1日目に発表されたセッションの中で、
印象に残ったセッションを紹介したいと思います。
キーノートセッション
早速試してみましょう!!
と言っても、ただのaliasなので
1 | Object.class_eval { alias then yield_self } |
だけでもいいのですが今回はtrunkからbuildします
1 2 | git clone git@github.com:ruby/ruby.git cd ruby |
cloneが終わったらドキュメントを参考にコンパイルしていきます
今回はrbenvでinstallしていきますので、先にrbenvをinstallしておいてください
1 2 3 4 5 6 | $ autoconf $ mkdir build && cd build $ mkdir ~/.rubies $ ../configure --prefix=$HOME/.rbenv/versions/trunk $ make up && make install $ rbenv shell trunk |
2018年5月31日現在、macだと
1 2 | $ ruby -v ruby 2.6.0dev (2018-05-31 trunk 63538) [x86_64-darwin17] |
のように表示されると思います。
irbを起動して試してみましょう!!
https://docs.ruby-lang.org/ja/latest/method/Object/i/yield_self.html
yield_self {|x| … } -> object[permalink][rdoc]
self を引数としてブロックを評価し、ブロックの結果を返します。例
12"my string".yield_self {|s| s.upcase } # => "MY STRING"
3.next.yield_self {|x| x**x }.to_s # => "256"
最後にリポジトリを削除し、
1 | $ rbenv uninstall trunk |
でお掃除は完了です。
Rubyのメーリングリストに登録していれば最新の情報を手に入れることができますので、登録してみてはいかがでしょうか。
Hijacking Ruby Syntax in Ruby
@joker1007さんと@tagomorisさんの発表です
Hijacking Ruby Syntax in Ruby
class TracePoint
を用いてRubyをHijackingしていくセッションです
class TracePointとは、
:line
:class
:end
:call
:return
:c_call
:c_return
:raise
:b_call
:b_return
:thread_begin
:thread_end
:fiber_switch
が呼び出されたときの情報を収集するクラスです。
endが実行されたときのcontextでhijackしたとき、コードを見ただけでは動作が予想できません。
またbindingを利用しているためプロダクションには投入するのは少し難しいと感じました。
Refinementで安全に実装されている、disableモードでプロダクション環境では無効にできる、と安全性を考慮した作りになってます。 プロダクションに投入してくれたプロジェクトもあるそうです。