ものがたり(旧)

atsushieno.hatenablog.com に続く

(今さら)プログラミング.NET Framework 第3版

事後になって書くのも何ですが、C#ユーザー会のイベントで(おまけで)しゃべってきたのでした。話のネタは、プログラミング.NET Framework第3版です。

プログラミング.NET FRAMEWORK 第3版 (Microsoft Press)

プログラミング.NET FRAMEWORK 第3版 (Microsoft Press)

この本自体は今年の2月には発行されていたので、ココに書くのも今さら感があるわけですが…

第2版までは吉松さんの翻訳だったわけですが、今回は何やら多忙だったそうで、実績のある藤原さんに回ってきた。それで、わたしのところに(元々は)監訳のようなかたちで話をいただいたわけです。んが、なるはやで出版できるようにしたいということで、結局翻訳にも着手することに…w そんなわけで、22-24章はこっそりわたしの翻訳です。後は25-29章は訳文チェックをやらしい感じで担当しました*1。実のところ、自分の訳文の方がはるかに怪しいところです。自分で自分のチェックはしていないですし。

翻訳の話ばかり書いてもしょうがないので、少し内容の話を書きます。でも実のところ第2版もリファレンス的にしか読んでいなかったし、読書会直前まで自分たちが訳した第3版すら全部読んでいなかったのですが…

今回は第3版ということで、第2版以降にリリースされた.NET 4.0の変更に触れつつ、いろいろ加筆されたもののようです。特にスレッディング周りが新しく追加されていて、元々Richterはこの辺に一家言ある人物なので、細かく書かれている上に自作のPower Threading Libraryの紹介が(いらないwくらい)じっくり書かれています。C#5のasync/awaitが出る前で、Rxが出る前でもあったので、原文はともかく翻訳の方は時期的には悪かった気もするwわけですが、逆に言えばasync/awaitの仕組みのようなものを知るにはコレで十分なのかもしれません。実際、(わたしが自分で確認したことではありませんが)C#5のasync/awaitはPTLに近いという声もありました。

型システムについては、無難な(?)内容がひと通りまとめられています。基礎的な部分の他にリフレクションについても章を別立てしてあります。個人的にはSystem.Reflectionの他にSystem.Reflection.Emitの話が書いてあってほしかったと思いますが…(そうするとdynamic methodとかLinqのexpression treeの話にも繋がると思いますし)。ちなみに無難でないレベルの話については、.NET 2.0以前ですがEssential .NETの方がいろいろ詳しいと思います。

Essential .NET ― 共通言語ランタイムの本質

Essential .NET ― 共通言語ランタイムの本質

あとMS荒井さんのRoot of .NET Frameworkも(これについては id:atsushieno:20090101 を参照)。

今回はserializationの話も追加されていますが、実のところremotingの話も一緒に書いてくれれば良かったのにと思います。SoapFormatterやBinaryFormatterを経由した通信は過去のものかもしれませんが、DelegateをBeginInvoke()/EndInvoke()した時に使われる内部的な仕組みは古くありませんし、AOPまわりの話に繋げることも出来るでしょう(そうするとMEFあたりも話題に含まれるようになったり…)。ちなみにXML serializationやWCFのserializationには言及されていません*2

…とまあ、仮に.NET Frameworkのバージョンがそのままであっても、この本のお題でさらに追記されうるネタは多々あるんじゃないかなあ、と思っています。既に900ページ超の内容になっているけど。

この本で面白いのは、RichterがCLRC#のいろんな部分を好んでいないのが読み取れるところで、「イベント駆動型非同期プログラミングモデルはイケてない」のレベルから「プロパティなんていらない」くらいのことまで平気で書かれています。個人的にウケたのはintより(System.)Int32って書く方が好みですっていう部分かな。

あと、いつの間にかけっこうな価格になってしまったこともあって、割と買うのを躊躇っている声が多いと思いましたw 会社の経費などで買える人はその路線で入手した方がいいかもしれません。

*1:どんな風にやらしいかというと、(全く無関係な文章ですが)こんな感じでネチネチと読み込みます

*2:わたしの理解する限り、この本はあくまでmscorlibが関わるものを中心に書かれています