『【13-B-7】言語の現在・過去・未来を語る』話題メモ - C# side
Developers Summit 2008『【13-B-7】言語の現在・過去・未来を語る』のメモ.C# side.
誰かメモを公開してくれてるかなぁと勝手に期待してましたが,裏番組に id:amachang の『【13-D-7】JavaScript Tips & Technique』が入っていたせいもあってか今のところあまり見ないですね.というわけで憶えているうちに少し書いておきます.なお,これで全部じゃないのと,話題に上った順序とは必ずしも一致していないことに注意.あちこち話題が飛びながらまったり聞いて楽しむ感じの内容でした.「ラジオの深夜放送みたいだった」という渋木さんの表現はまさにぴったり.
以下の内容で興味を持たれた方は,当日聞いていた人を適当に捕まえて詳細を聞き出してみて下さい.
波村さん自己紹介
C# の言語仕様
- クエリ式の,from x in xs という構文について
- 当初は foreach(var item in source) where ... といった構文も検討されていた
- Anders はクエリ式に 1 年ぐらい反対していた
- しかしユーザビリティテスト (テスタに新しい構文を試してもらう) をやってみたところ,メソッド方式では誰も join を書けなかった
- SQL での語順を弄って,select よりも from が先に来ているのは,IntelliSense で型情報を使うため
- 2005 年の発表段階では,Visual Basic は select x in xs だった
- from from in xs は,当初書けるようにするつもりだったが,文法上の曖昧さが起きることが分かってサポート外となった
- var による型推論の話は C# 1.0 の頃からあった
- 当時は JavaScript に間違われると「良くない」と思われていた
- 今は状況が変わった
- 今では Ruby がデザインミーティングで話題に上ることも
- 昔,まだ海外で Ruby がそこまで騒がれていない頃,波村さんが Anders に Ruby の話を振ったらスルーされた
- 今 Anders が興味があること
- メタプログラミング
- 言語設計で後悔していること
C# の開発形態
- デザインミーティングは週 3 回,各 2 時間
- 言語仕様が決まったら実装してみてテスト
- C# 1.0 がリリースされる頃にはもう,Microsoft Research からほぼ動く形の Generics 実装が上がってきていた
- 結局ほとんど書き直して 2 年ぐらいかかった
- 中身はほとんど同じ
- 「シンボル名の付け方が Research くさい」のが気に入らない等々
- 後でマージするときに困った
- もたもたやっていると Research の連中は勝手に fork して自分たちで言語拡張をやり出す
- 結局ほとんど書き直して 2 年ぐらいかかった
- ソフトウェアってのはやはり属人的な面が強い
- 2 週間ぐらい黙々と作業して一気に書き上げてチェックインする人も
- 「機械のような奴」と呼ばれている
- チェックインしてすぐに vacation に出かける奴がいて困る
- 2 週間ぐらい黙々と作業して一気に書き上げてチェックインする人も
- お気に入りのところは Anders がコードを書くことも
- でも実際に製品コードにするには色々テストとかチェックリストがあってそこまでやってくれる訳じゃない*2
- できれば C# で C# コンパイラを書き直したいけどそのコストが正当化できないため未だにできない*3
C# の要望の上げ方
- 色々なチャンネルがある
- 要望は一旦 PM がとりまとめて適当に集計して Anders に提出される
- 確実に reject されるものはここで落とされる
- でも以前 reject されたものが通ることもあるから難しい
- Anders の機嫌が良さそうなときにリストの上から挙げていく
- 確実に reject されるものはここで落とされる
- 波村さん自身がプッシュして採用された部分も
- C# 2.0 の yield return は,最初 yield のみだった.return があった方がよいと波村さんが推して通った.
C# の互換性
- ある言語仕様が,後でどう影響してくるか,最初から見通すのは非常に困難
- 今回波村さんが来日するときに,「Ruby の変数スコープについては触れるな」とアドバイスされた
- 一度決めた言語仕様の変更は非常に困難
- foreach に対して出力する IL コードを変更しただけで,問題が報告されてくる
- IL 解析ツールの動作が影響を受けた