プログラミングnet framework3のお題

41
プログラミング.NET Framework 第三版座談会

Upload: kazushi-kamegawa

Post on 22-Jun-2015

811 views

Category:

Technology


1 download

DESCRIPTION

Disscation at CLR via C#.

TRANSCRIPT

Page 1: プログラミングNet framework3のお題

プログラミング.NET Framework第三版座談会

Page 2: プログラミングNet framework3のお題

自己紹介

Page 3: プログラミングNet framework3のお題

書籍での担当

Page 4: プログラミングNet framework3のお題

翻訳のやり方に ついて

Page 5: プログラミングNet framework3のお題

翻訳のやり方について(1/2)

• ツール

–みんな大好きWordとExcel

• 章ごとにサブ文書化

• 訳語一覧とかはExcelで管理

• レビュ時にはExcel Web App – 時間がないので新しくGoogle Docs覚えるには時間がなかった

– FireFoxで動くからSUSEの人でも問題ないよね

–原稿はSubversionでバージョン管理

• 複数人でやるなら分散型でもいいかも

Page 6: プログラミングNet framework3のお題

翻訳のやり方について(2/2)

• プロセス

–イテレーティブなモデルを目指した

• ウォーターフォール執筆はつらい – ベテラン翻訳家ならともかく、品質向上の暇がなくなる

• 理想 – 初稿→編集さんチェック→レビュアさんチェック

• 現実 – 初稿→レビュラッシュ→編集さんチェック

–スタイルガイドというものがあります

• コーディング規約的なやつ

Page 7: プログラミングNet framework3のお題

翻訳で 苦労したところ

Page 8: プログラミングNet framework3のお題

翻訳で苦労したところ

• ページ数。

–結局分担してお願いすることに

• 担当者ごとのくせが結構あった(仕切り力が足りないともいう)

• 訳語

–口語、MSDN訳、Java界隈訳、アカデミック界隈訳

–定訳のないもの:construct、false sharing、interlocked

–おかしいもの:ジェネリックのvariance→分散?

Page 9: プログラミングNet framework3のお題

第二版との違い

Page 10: プログラミングNet framework3のお題

第二版との違い

• (用語が出そろっていることもあり)なるべくMSDN系と用語がずれないように

• 著作権の絡みもあり、作業自体はフルスクラッチ

• CLR 2からの部分についても、変更点などは修正

Page 11: プログラミングNet framework3のお題

本の内容について

Page 12: プログラミングNet framework3のお題

1~23章 (多少追記あり)

Page 13: プログラミングNet framework3のお題

24章~ (第三版の追加分)

Page 14: プログラミングNet framework3のお題

本の内容

• 各部の構成

–第1部:ランタイムの基本的事項 [level 400-500]

–第2部:処理系としての基本動作 [level 400]

–第3部:BCLや型システムの詳細解説 [level 300]

–第4部:処理系としての詳細解説 [level 400-500]

• 新たにシリアル化の章が追加

–第5部:非同期・並列 [level 300-400]

• 新規

Page 15: プログラミングNet framework3のお題

第1部の読み方

• CLRの基礎

–第1章 CLRの実行モデル

–第2章 アプリケーションと型のビルド、パッケージング、配置、管理

–第3章 共有アセンブリと厳密名を持つアセンブリ

• 配置のときのリファレンスとして

Page 16: プログラミングNet framework3のお題

第2部の読み方

• 型の設計

• 基礎力強化、ライブラリやフレームワーク作成のお供に

– 第4章 型の基礎 – 第5章 プリミティブ型、 参照型、値型

– 第6章 型とメンバーの 基礎

– 第7章 定数とフィールド

– 第8章 メソッド – 第9章 パラメーター – 第10章 プロパティ – 第11章 イベント – 第12章 ジェネリクス – 第13章 インターフェイス

Page 17: プログラミングNet framework3のお題

第3部の読み方

• 主要な型

–第14章 Char、String、テキスト操作

–第15章 列挙型とビットフラグ

–第16章 配列

–第17章 デリゲート

–第18章 カスタム属性

–第19章 null許容の値型

• BCLの重要ポイントを押さえたいあなたに

Page 18: プログラミングNet framework3のお題

第4部の読み方

• CLRの中核機能 –第20章 例外とステート管理

–第21章 自動的なメモリ管理 (ガベージコレクション)

–第22章 CLRのホスティングと アプリケーションドメイン

–第23章 アセンブリのロードとリフレクション

–第24章 ランタイムシリアル化

• 一歩踏み込みたいあなたやアーキテクトの教養として

Page 19: プログラミングNet framework3のお題

第5部の読み方

• スレッド処理

–第25章 スレッドの基礎

–第26章 計算量依存の非同期処理

–第27章 I/O依存の非同期処理

–第28章 プリミティブなスレッド同期コンストラクト

–第29章 ハイブリッドなスレッド同期コンストラクト

• 来たるべきC# 5やRxに備え非同期処理への備えをしたいあなたに

Page 20: プログラミングNet framework3のお題

読み方の例のご提案

• 初級者 – 14章、20章あたりをじっくり読んでみる。

• 中級者 – 第3部→第2部で復習、第5部と第4部はさらっと

• 上級者 – 第5部→第4部でさらなる高みを

• 猛者 – 頭からシーケンシャルに

• 中の人 – レビュとダメだし

Page 21: プログラミングNet framework3のお題

特に気に入っている 章は?

Page 22: プログラミングNet framework3のお題

裏話何かある?

この話は基本非公開で

Page 23: プログラミングNet framework3のお題

裏話とかその1

• 凶器である件

– 『プログラミングASP.NET』よりは軽いですよ

– Twitterでの「軽く凶器」発言に対し、編集部長が「軽くはないだろ」と言ったとか

–分冊化について

• どこで分けるかを考えると難しい

–電子書籍化について

Page 24: プログラミングNet framework3のお題

裏話とかその2

• マーケティング

–紙の書籍の場合、棚で「目立つ」かが重要→厚くなりがち

– TechEdで見本を配ろうかという話もあったり

Page 25: プログラミングNet framework3のお題

裏話とかその3

• レビュシート

–真っ赤になりました

• Wordファイル

–真っ赤になりました

Page 26: プログラミングNet framework3のお題

裏話とかその4

• 序文と訳者紹介は突貫工事

–序文はノリで訳しています

• なぜか序文を訳しているといろいろな人の顔が頭をよぎりました

• 訳していて楽しい章とつらい章がある

– GCとか非同期とか楽しいですね

Page 27: プログラミングNet framework3のお題

CLR2と4の この本の立ち位置

Page 28: プログラミングNet framework3のお題

CLR via C# CLR via VB.NETじゃだめ?

Page 29: プログラミングNet framework3のお題

後悔しているところ

すでにわかっている誤訳など

Page 30: プログラミングNet framework3のお題

Q&A

Page 31: プログラミングNet framework3のお題

using System; class Program { static void Main(string[] args) { Console.WriteLine(string.Empty); typeof(string).GetField("Empty").SetValue(null, "New Empty Value"); Console.WriteLine(string.Empty); } }

会場から何も出なかった時のお題

Page 32: プログラミングNet framework3のお題

String.Empty祭り

Page 33: プログラミングNet framework3のお題

何の話?

• String.Emptyって定数じゃないからFieldInfo.SetValueで書き換えらるよねという話

• ネタ元は Daily WTF らしい

– JavaだとInteger.valueOf用のキャッシュ値書き換えると楽しいよとか(publicじゃないけど)

• そもそもの問題はなにか

Page 34: プログラミングNet framework3のお題

Initonlyフィールド

• C#でいうreadonlyフィールド

• IL/CLIの仕様としてはコンストラクター内でのみ値を設定可能

– コンストラクター外で値を変えようとすると例外(VerificationExceptionあたり)

• 実はリフレクションで値を変えられる

Page 35: プログラミングNet framework3のお題

リフレクションで値を変えられるわけ

• 逆シリアル化の実装のため

–実際、SecurityPermission(SerializationFormatter=true)のコードアクセスセキュリティが必要

Page 36: プログラミングNet framework3のお題

でも

• StaticなInitonlyフィールドを書き換える必要はないよね?

Page 37: プログラミングNet framework3のお題

ところで

• String.Empty以外にやばいのある?

Page 38: プログラミングNet framework3のお題

たくさんある

• DBNull.Value,

• Decimal/DateTime/DateTimeOffset.MaxValue/MinValue

• IntPtr/UIntPtr.Zero

• Type.Missing, Type.Delimiter, etc..

• Path.DirectorySeparatorChar, etc.

• System.Reflection.Emit.OpCodes

Page 39: プログラミングNet framework3のお題

予想される動き

• LINQや正規表現あたりでInvalidProgramExceptionになる(Emitが壊れるから)

• AccessViolationException多発(IntPtr.Zeroが変な値になるから)

• ファイルI/O周り全滅(Pathの値がおかしいから)

Page 40: プログラミングNet framework3のお題

OpCodesを変えてみよう

• ldc_*をいじるとか(定数が変わるよ)

• bceとbgtの値を逆にするとか(if文が逆になるよ)

• rethrowを全部throwにするとか(スタックトレース途切れるよ)

• callvirtとcall入れ替えるとか(さよならポリモーフィズム)

Page 41: プログラミングNet framework3のお題

ワークアラウンド

• 丸投げディスカッション