Ginza.rb 第40回

Ginza.rb 第40回 自分の作ったものをみせてみように行った。

ginzarb.doorkeeper.jp

何人くらい話すのかなと思って行ったら10人以上の発表申し込みがあって「おお...」と思った。

今回は自分の作ったものがテーマということで、作った Gem や過去に出した PR など GitHub に公開しているものベースでストーリーを固めた。

発表で使ったスライドは以下。時間がなくて話せなかった各 Gem 実装で得たいくらかの知見についてスライド中のテキストに起こしたりしているので参考にしてもらえればと思う。

www.slideshare.net

懇親会では、joker1007 さんの発表で取り上げられていた given_keyword_args という Gem で現れた C拡張での rb_binding_new() 関数を使った実装の黒魔術に感動したので、いつもの銀座ライオンでコードベースの話を聞いたりしてた。

github.com

rb_funcall(self, rb_intern("__given_keyword_args__"), 2, binding, Qfalse);__given_keyword_args__ の呼び出しあたりは、C 拡張から 同ライブラリ中の Ruby 実装に処理をディスパッチしていて、Ruby のコード上からbinding を隠蔽 (Ruby 上で書かなく) するためにrb_binding_new() をもちいるという目的にフォーカスした部分のみで C 拡張を書くという設計も勉強になった。