Interpreter技術部の遠藤(@mametter)です。Rubyの開発やってます。クックパッドでは、Hackaradeという社内ハッカソンを定期的に開催しています。Challenge)、第3回はISUCON風の社内コンテストを行いました。4回目となる今回は、遠藤が講師となり、「言語処理系を自作する」というテーマで開催しました。その概要と成果の一部をご紹介します。mametter言語処理系の作り方の基本を一日で習得することを目標として、「RubyインタプリタをRubyで書くこと」を具体的な課題としました。言語処理系は通常、プログラムテキストを抽象構文木に変換する「パーサ」と、抽象構文木を元に指示を実行する「評価器」からなります。gemを利用しました)。フルセットのRubyを一日で作るのは不可能に近いので、"MinRuby"というサブセット言語をターゲット言語としました。配列、ハッシュ講師からは、インタプリタの骨格となるスクリプト(interp.rb)とテストケースを提供しました。このスクリプトには多数のraise(NotImplementedError)が含まれています。この穴を上から順に埋めていくと、上記の機能が順に実装されていって、テストケースも徐々に通っていきます。このあたりはゲーム感覚で進められるように配慮しました。すべてのテストが通ったら、最後の課題は「セルフホスト」です。セルフホストとは、ホスト言語(インタプリタを実装している言語)をターゲット言語にすることです。interp.rbをRubyではなくMinRubyで書き直します。これにより、「interp.rbをinterp.rbの上で動かす」とか、「interp.rbを動かすinterp.rbをinterp.rbの上で動かす」というようなことが可能になります。発展課題と成果セルフホストに成功した後は、自由にインタプリタを拡張してもらいました。正確に数えていませんが、少なくとも10人以上の参加者がセルフホストに成功し、さらにいろいろ拡張してくれました。Hackarade当日の夜はパーティで、有志に成果を発表していただきました。その一部を以下に紹介します。gemに依存せずにinterp.rb単体でセルフホストするようにしたMinRubyは規模が小さいので、手軽に新機能を実験する土台になります。いえ、一日でコンパイラや完全セルフホストに到達する人まで出るとは、正直予想を上回りました。まとめ「言語処理系を自作する」というテーマで開催した第4回のHackaradeを紹介しました。言語処理系に詳しいエンジニアから、そもそもRubyをあまり触ったことのないエンジニアまで、幅広い人に楽しんでいただけたと思っています。Hackaradeはクックパッドのエンジニアの技術力向上を目的としているイベントです。社員エンジニアは原則全員参加(もちろん業務として)、今回はさらにエンジニアアルバイトも業務として参加可能でした。そんなクックパッドに興味を持った方は、募集要項ページをご覧ください。今回の資料はSlideShareとGitHubに公開しています。https://github.com/mame/cookpad-hackarade-minruby言語処理系のセルフホストは概念的にはむずかしくないですが、実際にやってみると意外とデバッグがむずかしい(多段になると、どのレベルで例外が起きているのか把握するのに頭を使う)です。読者の方もぜひ一度やってみてください。ゼロから学びなおすプログラミング言語入門』(Amazon)をベースとしています。自力で解くのが難しかった方、答え合わせがしたい方、復習したい方などはご参照ください。インタプリタを開発している笹田です。コミッタをしている笹田です。インタプリタの開発をしています。Challenge技術部の笹田です。インタープリタの開発をしています。使ったセキュリティログ検索基盤の構築サービス特性にあった検索システムの設計戦略クックパッド採用説明会「クックパッドはサービスの作り手を採用したいんです。/*}*/スターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。