トップ «前の日記(2014-12-07) 最新 次の日記(2014-12-16)» 編集

日々の破片

著作一覧

2014-12-12

_ Rubyのしくみ

風邪で寝込みつつ、以前、オーム社から送っていただいた(ありがとうございます)Rubyのしくみをようやく読んだ(読み込んだ、とは言えないけど)。

本書は言語処理系としてのRuby(特にMRI)にフォーカスして、字句解析、構文解析から始めてオブジェクトのメソッド呼び出しとオブジェクトの実装上の仕組みについて解説したものだ(だけではないので、それは後述)。

そのあたりはRHGを読んだから知っているよという人でも、2~4章にわたって説明されている、コンパイル、コード実行、制御構造とメソッドディスパッチの箇所は、YARVに基づいているので新味があると思う。

というわけで、Rubyの処理系を解説した本としては既にRHGというものがあるわけだが(Rubyソースコード完全解説という名前で売られていたが、当時の世相からハックという言葉が受け入れられなかったのが書名の理由なので、心ある人たちは本来の名前のRubyハッキングガイド(RHG)という名前で呼ぶ)、アプローチの仕方がまったく違う。

RHGはRubyのソースコードを読み解き、Rubyが何をしているかを解説した本だ。つまり、Rubyの解説という柱とは別にCで記述されたある程度の規模のソースコードを読み解くための技術解説という側面がある。これはとても志が高くなければできないし、書くのは実に大変な作業だ。類書が余りない理由でもある。もう一つ、RHGのハッキングという言葉が暗示しているように、RubyのCソースファイルの読者が生まれれば、それはRuby処理系の開発者(つまり、Rubyをハックする人)の養成につながるという意図もあると思う。

Rubyのしくみは、必要に応じてRuby1.8とRuby1.9(あるいはJRubyなども交えて)ベンチを取りながら、Ruby処理系の解説と、そこで採られている高速化のための手法などを解説する。どちらかというとRuby処理系で実行するアプリケーションの開発者が(想像力と技術力が必要なのは当然として)高速かつ安定(安全)にアプリケーションを動作させるために知っておくべき、処理系自体の考え方や実装詳細についての情報を与えるという意図があるように思う。

つまりRHGはCプログラマを向いている本(目的はRuby開発への参加要請=>Rubyコアコミュニティへの貢献)だが、RubyのしくみはRubyプログラマを向いている本(目的はRubyを基盤とするアプリケーションの安定かつ高速稼働=>Railsコミュニティへの貢献とまでは断言しないけど、まあそういう感じはある)だ(もちろん、そうは言っても処理系の解説書なので、本書を読んで、おれもすげぇプログラミング言語を作ってやろうという意欲を掻き立てられる人も出てくるだろうし、それも筆者の望むところだと思う)。

という目的の差もあって、Rubyのしくみはとても読みやすい。図が多く、能書きが多くなったなと思うとベンチしてみたりして、結構、このての純粋技術解説書でありながら、構成にめりはりが効いている。

そのての工夫としては、JRubyとRubiniusの章で、それぞれ既に説明したMRIと比べたりすることで理解を促進させているのだが、比較としているオブジェクトがJRubyではString、RubiniusではArrayと変化をつけているのもおもしろい(これらのオブジェクトがJRubyやRubiniusにおいて特に特徴を持っているのか? と思いながら読んだが、別にそういうことはなかった。少なくとも僕の読み込みでは。間違っていたら、風邪で頭がぼーっとしていたから、というのが原因だろう)

あと、新しいだけに当然のようにRefinementsについての説明もある(RailsコミュニティのRuby処理系に対する貢献の一つに実際にオープンクラスを試しまくった結果としてのRefinementsの要請(必要性の確信)だったのではないか?)。

最後に短いのだが、笹田さんがYARVについて解説している。その解説が、どうやってYARVを開発して1.9で組み込まれるようになったか、という(うかつに読むと一見)自慢話みたいに見えるのだが、すごく重要なことを書いている。

つまり、それはRubyが持つモジュラー構造についてで、そもそもYARVは拡張ライブラリとして実装されていたという点だ。ぱっと思いつくところだとyajitも拡張ライブラリとして実装されていたはずだが、処理系の内側(微妙な表現だなぁ。内側ではないという声が聞こえてきた)に手を入れる部分を拡張ライブラリとしてはめ込めるという点は、Rubyという処理系の最も重要な特徴なのかも知れない。

とか、いろいろおもしろかった。

簡単に読めるかどうかは微妙だし、買ってすぐ役に立つレシピブックのようなものとは正反対の性格の本だが、仕事でまじめに(つまりRubyで開発したアプリケーションを継続的に、最終的にはお金を目的として使い、つまりは安定していて高速な実行が必要な)Rubyのプログラミングをしているのであれば、読んだほうが良い。また、その価値はある。

Rubyのしくみ -Ruby Under a Microscope-(Pat Shaughnessy)


2003|06|07|08|09|10|11|12|
2004|01|02|03|04|05|06|07|08|09|10|11|12|
2005|01|02|03|04|05|06|07|08|09|10|11|12|
2006|01|02|03|04|05|06|07|08|09|10|11|12|
2007|01|02|03|04|05|06|07|08|09|10|11|12|
2008|01|02|03|04|05|06|07|08|09|10|11|12|
2009|01|02|03|04|05|06|07|08|09|10|11|12|
2010|01|02|03|04|05|06|07|08|09|10|11|12|
2011|01|02|03|04|05|06|07|08|09|10|11|12|
2012|01|02|03|04|05|06|07|08|09|10|11|12|
2013|01|02|03|04|05|06|07|08|09|10|11|12|
2014|01|02|03|04|05|06|07|08|09|10|11|12|
2015|01|02|03|04|05|06|07|08|09|10|11|12|
2016|01|02|03|04|05|06|07|08|09|10|11|12|
2017|01|02|03|04|05|06|07|08|09|10|11|12|
2018|01|02|03|04|05|06|07|08|09|10|11|12|
2019|01|02|03|04|05|06|07|08|09|10|11|12|
2020|01|02|03|04|05|06|07|08|09|10|11|12|
2021|01|02|03|04|05|06|07|08|09|10|11|12|
2022|01|02|03|04|05|06|07|08|09|10|11|12|
2023|01|02|03|04|05|06|07|08|09|10|11|12|
2024|01|02|03|

ジェズイットを見習え