お知らせ 【技術コミュニティ運営者の皆さま】成長し続けるエンジニアを支援する「Forkwell」と「connpass」が連携し、connpass上でイベントを開催する技術コミュニティを2020年3月末まで支援いたします。詳しくはこちら by Forkwell

このエントリーをはてなブックマークに追加

10月

6

Ruby Hack Challenge Holiday #7

休日に Ruby インタプリタを Hack しよう

Hashtag :#cookpad_rhc
Registration info

参加枠1

Free

FCFS
18/30

Description

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 チャンネルも用意したので、そちらもご利用下さい。

Media View all Media

If you add event media, up to 3 items will be shown here.

Feed

SasadaKoichi

SasadaKoichi published Ruby Hack Challenge Holiday #7.

09/03/2019 09:48

Ruby Hack Challenge Holiday #7 を公開しました!

Ended

2019/10/06(Sun)

13:00
17:00

Registration Period
2019/09/03(Tue) 09:47 〜
2019/10/06(Sun) 17:00

Location

クックパッド株式会社

〒150-6012 東京都渋谷区恵比寿4-20-3 恵比寿ガーデンプレイスタワー12F

Attendees(18)

hemispherium

hemispherium

Ruby Hack Challenge Holiday #7 に参加を申し込みました!

take-cheeze

take-cheeze

Ruby Hack Challenge Holiday #7 に参加を申し込みました!

ayumu_kanechika

ayumu_kanechika

Ruby Hack Challenge Holiday #7 に参加を申し込みました!

kaneko keiko

kaneko keiko

Ruby Hack Challenge Holiday #7に参加を申し込みました!

musokan55

musokan55

Ruby Hack Challenge Holiday #7 に出席を申し込みました!

Sho-Igarashi

Sho-Igarashi

Ruby Hack Challenge Holiday #7に参加を申し込みました!

monochrome

monochrome

Ruby Hack Challenge Holiday #7に参加を申し込みました!

s4na_penguin

s4na_penguin

Ruby Hack Challenge Holiday #7 に参加を申し込みました!

miura1729

miura1729

Ruby Hack Challenge Holiday #7 に参加を申し込みました!

publichtml

publichtml

Ruby Hack Challenge Holiday #7 に参加を申し込みました!

Attendees (18)

Canceled (5)