Ruby Hack Challenge Holiday #7

2019/10/06(日)13:00 〜 17:00 開催
ブックマーク

イベント内容

Ruby Hack Challenge Holiday

休日に Ruby インタプリタをハックしよう!

2019 年は、試しに休日の午後、半日の Ruby Hack Challenge (RHC) をやってみようと思います。 好きなテーマで、Ruby インタプリタをハックしてみてください。

Ruby コミッタの笹田と遠藤がサポートします。 講義形式では行いません。モクモク進めて頂いても良いですし、わからなければ気軽に質問してください。

今回も、Rails Girls More と同時開催になります。

Ruby アプリを作る勉強会ではなく、RubyインタプリタをC言語などでハックするイベントです! ご注意下さい。

Ruby 開発最前線

今回は、我々が Ruby インタプリタ開発で取り組んでいる課題について、ガチでご紹介します。好評だったら続けます。


  • 時間:13:10~13:50 (40min)
  • 話者:笹田耕一
  • 題目:Cコンパイラの末尾呼び出しを活用した効率的命令ディスパッチ手法の研究開発
  • 発表概要:Rubyインタプリタは、長らく(利用できるなら)Direct threading(DT)という仕組みを使っていました(YARV Maniacs 【第 3 回】 命令ディスパッチの高速化)。DT は(gcc拡張つきの)C言語ですべて記述できるので、楽でいいのですが、(1) 次の実行命令をメモリから読み取り (2) そのアドレスにジャンプする、という仕組み上、(1) メモリのロードおよび (2) 間接ジャンプによる分岐というオーバヘッドが生じる。とくに、(2) についてはプロセッサの分岐予測ミスを生じる必要があり、問題がある、と言われています(実際は、マイクロベンチマーク程度では、たいてい分岐あたります)。この方式に対し、アセンブラで call 命令を並べることで、分岐予測ミスをなくすサブルーティンスレッディング(ST)(もしくは、コンテキストスレッディング(CT))という手法が知られています。具体的には、「命令アドレスのロード→間接ジャンプ」ではなく、各命令に対応した関数に対するcall 命令を並べることで、命令ディスパッチを行う、という手法が知られています。この手法では、call/return の組み合わせなので、プロセッサがジャンプ先を先読みすることが容易であり、分岐ミスが生じづらいというメリットがあります(が、デメリットも沢山あります)。そこで、現在 MRI に ST を実装しています。実装にあたって、VM を実行するために必要になる仮想レジスタをどのように命令関数間で共有するか、というのが問題になりますが、これに対しCコンパイラが行う末尾呼び出しの最適化が利用できることを発見し、これを実装しています。本講演では、仮想マシンの命令ディスパッチ手法をいくつか紹介し、今回実現しようとしている ST の利点欠点を議論し、最新の開発状況をご紹介します。

  • ※興味ない方は、もちろん聞かずにモクモクして頂いて構いません!
  • ※事情によっては笹田の出席が困難な場合があります(もうすぐ子供が生まれる)。そのため、もし出来なかったらごめんなさい。

もくもくするテーマ一覧

Rubyインタプリタハッキングに関する好きなテーマに取り組んで下さい。 (笹田、遠藤がサポートできそうなテーマを並べています)

  • Cookpad Ruby Hack Challenge を進めよう
  • 最新の Ruby を試そう
    • Ruby 2.7 では、今後推奨しないコードに警告が沢山でます。有名 gem や自分のアプリで試して、警告除去をしてみましょう。
    • Ruby 2.6 で導入された JIT compiler を試してみましょう
    • Ruby に型付けを行う Steep で、自分のアプリケーションを型付けしてみよう
    • Ruby 2.7 に導入予定の新機能(パターンマッチや numbered parameter など)を試してみよう。また、自分のアプリケーションがちゃんと動くか試して、動かなかったら報告してみよう。
    • Ruby 2.7 では、キーワード引数の仕様がいろいろ変わっています。Ruby 2.7 開発版で試して、動かなかったら報告してみよう。
  • 好きな Hack をしよう

コミュニケーションチャンネル

事前、開催中、事後のコミュニケーションチャンネルとして、 Gitter https://gitter.im/rubyhackchallenge/Lobby を用意しています。参加される方はご活用ください。 また、ruby-jp slack workspace#rhc チャンネルも用意したので、そちらもご利用下さい。

注意事項

※ こちらのイベント情報は、外部サイトから取得した情報を掲載しています。
※ 掲載タイミングや更新頻度によっては、情報提供元ページの内容と差異が発生しますので予めご了承ください。
※ 最新情報の確認や参加申込手続き、イベントに関するお問い合わせ等は情報提供元ページにてお願いします。

関連するイベント