トップ » 技術記事 » RHG 片手に Ruby 1.9 を読む集い(The RHG Strikes Back)に参加した(2) - 第3回 RHG の逆襲

RHG 片手に Ruby 1.9 を読む集い(The RHG Strikes Back)に参加した(2) - 第3回 RHG の逆襲

タグ: Ruby

どうも、あかさたです。4/6 に第3回 RHG の逆襲(Ruby 1.9 のソースコードを読む勉強会)が行われました。第1回第2回に引き続き今回も参加したので、その勉強会の模様をレポートします。

当日の概要

勉強会の趣旨などは第1回および第2回の記事を読んでいただくとして、まずは当日の概要を紹介します。

第3回も第1回、第2回と同じく新橋(汐留)のミラクル・リナックス株式会社さんの会議室で行われました。参加人数は約20名。スクール形式に座って発表者(事前に候補者を募り当日ランダムに決定)が発表しつつ、適宜参加者が自由にツッコミを入れていくというスタイルです。

以下、発表者の一覧です。

  • 三井さん(クラス、モジュール、メソッドを定義する API の説明)
  • さん(特異クラス、メタクラス、モジュールの概念の説明)
  • Yugui さん(星さんと適宜入れ替わりながら説明)

※ 今回は環境が準備できなかったため、動画はありません。

第3回RHGの逆襲

第1回、第2回、第3回(今回)の内容は、大きく見ると Ruby のオブジェクトモデルが C レベルでどのように実装されているか理解するためのものです。第1回はオブジェクトの構造、第2回はオブジェクトに含まれるメソッドやインスタンス変数を格納するハッシュテーブルが Ruby ではどのように実装されているか学習しました。

今回は、クラス、モジュール、特異クラス(特異メソッド)がどのように実現されているか、C の実装レベルも多少見ましたが、概念レベルの理解を特に重要視して学習しました。RHG でいうところの、第4章 クラスとモジュールに相当します。

勉強会の主催者である Yugui さんによると、Ruby 1.8 まででは、概念が難しいため一番理解が難しい箇所(理解してしまえば実装的にはそれほど難しくはない)とのことだったため、図を駆使しながら理解を進めました。ちなみに、1.9 では YARV が一番難しいとのことです。

理解が難しい箇所だからといって、コードの読み方としては拡張ライブラリなどに公開された API からたぐっていく基本的な戦略は変わりません。今回で言えば、クラス/モジュール/メソッドの定義用 API を深掘りしていくことになります。ただ、事前に概念を知っておくことで難解なものもいくらか容易に読み進めることができるようになるので、本記事では理解の難しいいくつかの概念を主に紹介することとします。

クラスと特異クラス

まずはクラスと特異クラスについて紹介しましょう。特異クラス(特異メソッドを持つ特定のオブジェクトのためのみに存在するクラス)というややマイナーというか特殊なケースを先に持ってくる理由は、スタティックなメソッド(クラスメソッド)の定義の実現でも特異メソッドの機構が利用されているためです。以下の図の例から考えてみることとしましょう。

オブジェクトとクラス(by Kodougu

特定のオブジェクトにのみ定義されたメソッドを特異メソッドと呼びます。「object」オブジェクトに特異メソッドを定義するとします。Ruby では、オブジェクトに特異メソッドを定義すると、Ruby ユーザからは見えない(厳密には見る方法はありますが)クラス(特異クラス)を裏で生成して、特異メソッドはそのクラスに定義されます。オブジェクトはその特異クラスのインスタンスとして扱われます。(ただし、Ruby ユーザーからは「object」は「MyClass」のインスタンスとして見えます。)

特異メソッドと特異クラス(by Kodougu

Series Navigation«第1回 RHG の逆襲«第2回 RHG の逆襲第5回 RHG の逆襲»

1 2

執筆者紹介

あかさた

あかさた

未踏(2006年度下期)でWeb上で動作するモデリング環境 Kodougu の開発をしてました。こちらでもブログを書いています。

TrackBack URL :