O'Reilly Japan Community Blog

このblogには、オライリーWebサイト協力者からの寄稿記事や、独自のインタビュー、レポート記事などを掲載します。

[Programmer's High]

UnionMount

AUFS/UnionFSがunion内のメンバをディレクトリとするのに対し、UnionMountでのメンバはブロックデバイス(すなわちマウントとしてunion機能実装)です。もっとも大きな違いはその実装方針にあり、UnionMountはより上位に位置するVFS内でunion機能を実現しようとしています( 図6 )。

ファイルシステムとしてのunion実装と比較すると、VFS内でメンバ内から処理対象を選択決定する点が大きく異なります。このため、 vfs_mkdir() などVFSヘルパ関数を再度コールする必要がなくなります。

[Programmer's High]

はじめに

平成21年春のLinux Storage & Filesystems Workshopで、LinuxカーネルにUnionMountという機能を実装することについて話し合われました。

UnionMountとは、かつてのSunOSに実装されていたTranslucent(Transparent)FilesystemやBSDのunion mountに相当する機能で、すでにディスクをマウントしているディレクトリ(マウントポイント)に別のディスクを重ねてマウントし、1つのマウントポイントから2台のディスクを同時に使用可能にするものです。例えばLiveCD(HDDへインストールせずにCD/DVD/FlashのみでLinuxを起動し、使用可能にする環境)などではこの機能を積極的に利用しています。

この記事ではLinuxカーネルにこの機能を実装するこれまでの試みと、前述の話し合いの結果としてLinux Kernel Mailing Listへ投稿されたパッチシリーズについて考察します。

keith_peters.jpg

「神の書」として知られる『ActionScript 3.0 アニメーション』の著者、Keith Peters氏の最新作『詳解 ActionScript 3.0アニメーション――衝突判定・AI・3DからピクセルシェーダまでFlash上級テクニック』が、1月23日、ついにオライリー・ジャパンから発売されました。発売がアナウンスされた直後、なんと予約だけでAmazon.co.jpのPC書ランキング入りを果たすなど、ActionScriptユーザーの熱い注目を集めています。 昨年11月に来日された際には、オライリー・ジャパンのオフィスにも立ち寄っていただきました(写真はその際のものです。Keithさんの左胸に注目!)。とても物静かで真摯なお人柄に、オライリーのスタッフも一目でファンになってしまいました。
今回、この『詳解 ActionScript 3.0アニメーション』刊行に先立って、Keithさんにメールインタビューを行いました。Keithさんのプライベートから、「神の書」と呼ばれるほどの書籍を書くまでに読んできた書籍や学習法などについてお話していただいております。

8回にわたってお届けしてきたこのシリーズも、いよいよ最終回。今回はその他の新しい機能、さらに、まつもとさんの口からは次のバージョンの話も飛び出します。

ラムダ

目立つ機能としては、「->」によるラムダ(λ)を入れたり、「.()」による呼び出しを入れたということですね、やっぱり関数型言語の影響が大きく、ラムダをこんな記号(->)で導入しました。

― まずこの話があったときは、まず最初に何があったかというと、「ラムダ」って書きづらいと。

1.8だとラムダメソッドってのがあって、lambdaだっけ、(綴りに)自信がないけど。Lispの人たちはそれこそ湯水のように使うけれど、普通のプログラマにはなじみがないし、読みにくい、書きにくい、長いメソッド名どうよって話があって。

あと、メソッドって再定義できるじゃないですか。「lambda」って書いても、本当にラムダを返すのか自信がない。ラムダじゃないものが返せてしまうかもしれない。いろんな最適化のことを考えると、こういうものは言語組み込みであった方がうれしいよねって思って、この2点から新しい記法を取り入れました。
ただエライ不評で、「この記号λに見えないじゃん」って。ターミナルっぽいフォントで表示して横に傾けるとλに見える、って言うとみんな笑ってくれるけど、それでも迫害は止まらないんです。

Ruby 1.9で注目の新機構、M17N(多言語化)を、まつもとさん、卜部さんのお二方が語ります。M17Nとは何か、どんなメリットがあるのか、M17Nが実装されたことで開かれる可能性とは?

Ruby 1.9では文字列の抽象度が上がった

Ruby 1.8ではすべてがバイト列だったんです。で、Ruby 1.9ではコードポイント1と対になっている文字を表現するようになりました。ちょっと抽象度があがりました。

ですから、これからは"ABCあいう"という文字列の0番目を取ると「A」という文字を返します。で、3文字目から1文字を取ると、変なバイトではなくて「あ」という文字を返します。

― 3番目というのはゼロから数えて3番目のことですね。

ゼロから...皆さん分かりますよね。数字はゼロから数えますよね。

書籍『プログラミング言語Ruby』を章ごとに語り終え、ここからはリリースされたばかりのRuby 1.9の変更点についてのお話が始まります。

Ruby 1.8とRuby 1.9は非互換です。その中には大きなものから小さなものまであって、その中でも重要なのは「ブロックパラメータ」「文字列」「M17N」です。

ブロックパラメータ

rubytalk01.jpg

Rubyにはブロックというものがあります。縦棒(|)の中に変数があって、(直前に書かれたイテレータの各要素が)渡されパラメータとして代入される。これはもともとループの抽象化として誕生したので、棒の間はループの各要素が代入される場所だったんです。(ブロックパラメータは)任意の変数、つまりグローバル変数でも、ローカル変数でも、配列でも大丈夫。何でも置けたんです。

ところが1.9からはちょっと変わっていて、グローバル変数を置こうとするともうダメ。これまではオブジェクトの属性に代入できたり、配列のスライスを呼び出せたのも、できなくなりました。それと同時に、(ブロックパラメータに指定された)ローカル変数のスコープは、ブロックの範囲内にとどまるということ。xに15を代入してループにパラメータを用意して、xに10を代入する。1.8では、ブロックの外側のxと内側のxは同じものなので、10に書き変わったんですね。だけど1.9からはブロックの中身なので、同じ名前だけど違うものになったとみなして数が変わらない。

前回までのあらすじ
『プログラミング言語Ruby』の生まれた経緯から書籍へと入ります。言語仕様の解説部分では、リリースマネジャーの卜部さんでさえ知らなかった内容が登場するなど、なかなか侮れない内容。Ruby初心者も上級者も楽しめる内容。今回はよりディープなRubyの世界へと移ります...

5章 文と制御構造

ch05.jpg

Rubyって文と式とあんまり区別がないんですけど、普通のプログラミング言語で文といわれているようなものとか、制御構造と言われているものについて解説しています。

―この辺から発展的内容って感じですね、4章までは、どちらかと言えばRubyの基礎的な内容でしたが、ここからですね、なんて言うんですかブレーキが外れてきて、

ははは。

―この章の一番最後の方にスレッドとかファイバとか継続について書いてあるんですけど、ファイバに関して言うと、この本の原著が最初に出たのが2008年1月。このころは、まだファイバが出てきたばかりで、これ本当に書くのか? という感じで。2007年の11月に飛行機の中でドラフト版を読んで「ファイバに何ページも割いてある」と言ったら、(まつもとさんに)「ちょ、ちょっと見せて」とか言われて。まだ当時そんなに固まってないのに「こんなに書かれるとヤバい」と。

ファイバ作っている本人でさえ嫌がると。

前回までのあらすじ
「ヤギ」から「ハチドリ」へ至った経緯、そして本書がいかに変わっているかという話題から、これまた一風変わったRubyist、why_the_lucky_stiffへと話題は変わります。今回は1章から4章までを語ります。

―日本語版では、まつもとさんの「まえがき」という重要な部分が

日本語版ではまえがきを書いていて、すこし貢献度があがったと。

-みなさん、ぜひまつもとさんのまえがきを読んでいただいて...

はい。前書き作家としての(活躍を)ですね。僕がまえがき書くと本が売れるんですよ。『Googleを支える技術』1、去年のベストセラー。その前は『Code Reading』2、あれも前書き書いてるんですよ。今年はこれでベストセラーを狙います。まえがき書いても全然印税入んないんですけど。まえがきとオビ(の推薦文)で知名度を上げるべく頑張っております。

前回までのあらすじ:
ヤギが表紙の『Rubyデスクトップリファレンス』が、ハチドリ本こと『プログラミング言語Ruby』に変化した経緯をお話いただきました。今回からは監訳の卜部昇平さんと一緒に、『プログラミング言語Ruby』の章立てを順に追いつつ、本書とRubyにまつわる話がはじまります。が、まず書籍のタイトルやクレジットの話題から、まつもとさんがウォッチする「あの人」の話題に...

『プログラミング言語Ruby』のヘンなところ

この本って、結構オライリー的には変わった本で、とさっきオライリーの人から聞いたんですけど、1つはタイトルが『The Ruby Programing Language』って書いてあるんです。

―原著ですね。

こっち(日本語版)でも『プログラミング言語Ruby』となっていて、他の、オライリーの他の本で、こういう『Programing Language』というタイトルの本がほかにない。

―例えばPerlだと『Programming Perl』ですね。

あれが原典ですね。Pythonは『Programming Python』。

―『JavaScript』とか『CVS』(のようなもの)もありますね。

そう、ソフトウェアの名前そのままというのはありますけど。

―そういえば『The Ruby Programing Language』みたいなのはあまりないですね。

そうですね。もっともピッケル本が「プログラミングRuby」なので、書名をとられちゃったという理由があるのかもしれないですけれど。

前回のあらすじ:
「ポケットリファレンス」と呼ぶには分量の多かった『デスクトップリファレンス』。英語版への翻訳が進んだが、分量を倍に増やして『in a Nutshell』になることに。死にそうな思いで加筆をし、無事出版されるも、期待したほどの売れ行きをあげることはできなかった。フランス語版とロシア語版の計画は、フランス語版のみが形となる。

驚きの共著者が登場『The Ruby Programming Language』

それで『Ruby in a Nutshell』の後、そのまま長らくなかったことになっている感じだったのですが、ある日、2007年だったと思いますけれども、オライリーの編集者から久しぶりにメールが来てですね、「in a Nutshellの新しい本を作りたいんだ」と。Rubyも大分広まったし(今の)「in a Nutshell」は薄いからと。でも「お前が書くのは無理だろうから」って、分かってらっしゃる。

で、ですね、「共著者を用意するから」という風に言われて、まあ、僕が書けないのは分かっているので、「これをベースに誰か書いてくれればそれに越したことはないけれど」と思っていた。次のメールが来て「(共著者を)見つけて来たから。David Flanagan」。聞いたことのある名前だなあって。