プログラミング.NET Framework出版記念座談会に出てきた

ここには全く書きませんでしたが、今年の春先は、こちらの翻訳レビューに着手していて、Xamarin Evolveの準備やらGoogle I/Oに遊びに行くやらで渡米ラッシュだった合間にちまちまと読んでいたのでした。

プログラミング.NET Framework 第4版 (プログラミングシリーズ)

プログラミング.NET Framework 第4版 (プログラミングシリーズ)

 

それが今月半ばにめでたく発行されまして、先週末の26日には、それに合わせて主犯・共犯を集めて座談会ということで、台風直撃イベントはみんなキャンセル必須!!というデマが飛び交う中(デマじゃないか)、ワタクシも顔を出して適当に口出しをしてきました。さいわいなことに、司会の亀川さんの進行がたいへん紳士的だったため、わたしも隙あらばと用意してきた数々の悪口を出す機会も特に無く、終始無口のままに終わったのでした。*1

http://d.hatena.ne.jp/kkamegawa/20131027

第3版の時は文法レベルでの指摘点もそれなりにあったのですが、今回の第4版は、訳者の藤原さんも明言していた通り、訳文の質がかなり向上していて、指摘内容はほとんどが曖昧に読める可能性の指摘が中心(それも注意して読めば成り立たないようなものも含む)でした。まあ総量で言えばわたしのほうがもう翻訳量はぜんぜん少ないはずなので、わたしの翻訳チェックというのは「別の人が時間をかけて精査したら気づく」という以上のものではない気もしています*2。ちなみに訳文にどういうツッコミを入れるかというと、(今回の書籍とは全く関係ありませんが)似たようなレビューの公開事例としてはこんな感じです。

今回の座談会では、この本の位置付けってどの辺にあるの?的な話も出てきたので*3、わたしの理解の範囲で書こうと思いますが(座談会でもざっくり話しましたが)、「プログラミング .NET Framework」は、.NET全体について書かれたものではなく、あくまで原著タイトルが"CLR via C#"である通り、CLRについて解説したものということになります。クラスライブラリの使い方の説明だけで足りる部分については、基本的に必要ないわけです。

わかりやすい見分け方としては、mscorlib.dllに無い型については、この本で勉強する内容ではないと言っていいでしょう。ASP.NETADO.NETはもちろん、System.Netのクラス(System.dllにある)やSystem.Drawing(.dll)などは、実装の詳細はWindowsAPI(winsockとかgdiplusとか)を使いました、という程度でしょうから、この本の対象外ということになります。実のところASP.NETでもIIS統合の部分とか、ADO.NETでもSqlClientとかSQLCLRとか*4、.NET固有のトピックは少々あるわけですが、各専門書で対処してくれといったところでしょう。(Drawingはそれ自体の有用性とは別に、唯一の応用がWindows Formsなので、どうしてもオワコン感が否めないところです。)

mscorlib.dllの型としても、たとえばGlobalizationに関する機能の大半は、Windows APIの応用に過ぎず、Windows国際化プログラミングのトピックなので、別の専門書を読むと良いでしょう*5。一連のコレクション型についても、単にマネージドコード*6だけで書けてしまうので、この本の守備範囲ではないということになるでしょう(mscorlibに入っているのは単に他の部分で使いたいからですね。) I/Oも、Windows APIを「呼んでいるだけ」の範疇に収まるかと思います。話がThreadingとなると、AppDomainとの関係でメモリ管理はどうなっているのかとか、割と.NETオンリーの話が多いので、この本でじっくり解説する必要があるというわけですね(アレが原著者の生きがいかどうかは別として)。

mscorlib.dllでCLRとも関係が深いにも関わらず言及されていない大きな部分はセキュリティですが、最初に言及すべき基盤となるコードアクセスセキュリティはオワコン感が否めず、今更言及する価値はないように思います。まあMSDNでじっくり解説されている以上もう解説はいらんということもあるでしょう。簡略化されたセキュリティ部分やCoreCLRセキュリティも含めて、別の書籍になっていてもおかしくない気がしますが、特に見当たらないですね。*7

原著はCLR via "C#"ですが、C#コンパイラがどういうILを生成しどうCLRの機能を用いるか、という観点では、語られていることは多くありません(ILで出来てもC#で出来ない部分については、要所要所で説明はありますが)。yieldやLinqやasync/awaitなど、コンパイラの実装の詳細やらアプローチやらに属する話があってもおかしくなさそうなものですが、コンパイラだけで完結する部分なので無いのでしょう。ジェネリクスはランタイム部分に重要な実装がある部分なので、当然のように記述があります。

ちなみに本書の主要なトピックはCLRであってCLIではなく、たとえばMonoという単語は出てきません(何ということか…!)。そういう向きには別の奇書がありますね。(.NET Frameworkにまつわる書物はなぜ奇書だらけになるのか…)

まあそんなわけで、次はWinRT via C#だそうで、わたしはほぼ興味ないのですが(Windows固有のトピックなので)、やはりCOM統合など悪魔的な技術について、似たような語り口で書かれているのではないかと思います。

*1:このものがたりは実話をもとに書かれています。

*2:わたしも訳文を色々出していた時は同程度の密度のフィードバックを受け取っていたので…

*3:↑のリンク先のスライドの34ページあたり

*4:そもそもわたしは無縁になってから久しいのでこの単語が生きてるのかどうかさえ覚束ないのですが

*5:ぱっと見では、「使う」ならこの辺、「識る」ならこの辺という印象です。

*6:未だにマネージコードという表記を見ると、こういうのが日本人の英語力を落とすんだという気持ちで許しがたいのですが、訳書にはツッコミとして入ってはいません。

*7:WS-Securityとかは別のオワコンとして別の本に言及があるかとは思います