c#のはなし @ 歌舞伎座.tech#9「異種プログラミング言語格闘勉強会」
TRANSCRIPT
C# のはなし@matarillo
http://www.zdnet.com/article/microsoft-the-evil-empire-re-surfaces/
“Why free software shouldn't depend on Mono or C#”
https://www.fsf.org/news/dont-depend-on-mono
“Microsoft's Empty Promise”http://www.fsf.org/news/2009-07-mscp-mono
MS もオープンになってきてる Runtime
◦ https://github.com/dotnet/coreclr Libraries
◦ https://github.com/dotnet/corefx Compiler
◦ https://github.com/dotnet/roslyn
https://twitter.com/chomado/status/708675794273316864
stronglytyped
dynamic
C# 代数的データ型 ない
Option/Maybe ない
型クラス ない
高カインド型 ない
Unit / Bottom ない
null 許容型 ある
ダウンキャスト ある
dynamic 型 ある
その他、 C# にない言語機能 パターンマッチング 強い型推論 マクロ/コンパイル時計算 トレイト/実装の多重継承 型エイリアス 構造的部分型 正規表現リテラル ユーザー定義演算子 などなど…
C# 魔改造の歴史 Java っぽい何かに対し…
◦unsafe ポインタ◦数値 enum◦struct◦演算子オーバーロード◦プロパティ◦デリゲート/イベント◦foreach
C/C++ から
Delphi/VB から
さらに魔改造 ジェネリクス
匿名メソッド
yield
null 許容型
partial
実行時に具象化するが、高カインド型はない型引数の省略もあまり賢くない
クロージャ的なことが可能だが記法が微妙型も微妙
遅延ストリーム専用ジェネレータ匿名メソッドでは使えない
null がない値型に null を持ち込む型null 禁止型はない
Generation Gap パターンを言語機能で解決IDE 前提
さらにさらに魔改造 var
ラムダ式
匿名型
クエリ式
式木
ローカル変数専用、推論というほど賢くないimmutable 対応もない
匿名メソッドが短く書けるがやっぱり yield が使えない
型定義がいらないが基本的にメソッド内でしか使えない
do 記法とか for 内包とかに似てるしかし語彙がアレ
ラムダ式を AST に変換するだが制約が多い
もっと!魔改造 dynamic 型
共変・反変
async/await
null 条件演算子
なんかよくわからんが短く書けたりする構文糖
実行時コード生成で意外と高速だが型安全とは何だったのか
ジェネリクスと継承の闇中途半端
制御構文と混ぜられて便利だが万能ではないし、拡張性も微妙
Embrace Null
!?
今後の魔改造見通し 関数型プログラミング的ななにかをさらに混ぜ込む方向性◦ いろんな構文を文から式にするとか◦ パターンマッチ、タプル、値の分解とか◦ 代数的データ型とか(次バージョンには入らず、さらにその先)
詳しくは Build Insider オピニオン「次期 C# および 次期 .NET の見通しについて」 http://www.buildinsider.net/column/iwanaga-nobuyuki もしくは https://github.com/dotnet/roslyn
C# の微妙なところ 専用構文(キーワード)が微妙に多い 言語機能が微妙に直交してない プログラマーに DSL を作る手段をくれない 微妙に IDE(Visual Studio) を意識した言語仕様 あと、セミコロンと中カッコがやけに多い
では、なぜ C# ?
C# はぼくらのための言語
8 割の人が悩まず使える 2 割のユースケース
IDE は友達ステップ実行最高
C# の強み(少しだけまじめに) 地味にいろんなプラットフォームで動く
◦ thanks, Mono! thanks, Unity! ネイティブ (C/C++) をうまいことラップしたり相互運用したりしつつ、基本的にはマネージドな世界に住める◦ Win32API を手軽に扱える言語仕様◦ 数値ベース enum とか struct とか unsafe ポインタとか
◦ いわゆる LL→C も書くだろ常識的に考えて◦ Java→JNI/JNA 、プリミティブ型とクラスでがんばる
sun.misc.Unsafe廃止でひと騒ぎ