C#のはなし @ 歌舞伎座.tech#9「異種プログラミング言語格闘勉強会」

15
C# のののの @matarillo

Transcript of C#のはなし @ 歌舞伎座.tech#9「異種プログラミング言語格闘勉強会」

Page 1: C#のはなし @ 歌舞伎座.tech#9「異種プログラミング言語格闘勉強会」

C# のはなし@matarillo

Page 2: C#のはなし @ 歌舞伎座.tech#9「異種プログラミング言語格闘勉強会」

http://www.zdnet.com/article/microsoft-the-evil-empire-re-surfaces/

Page 3: C#のはなし @ 歌舞伎座.tech#9「異種プログラミング言語格闘勉強会」

“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

Page 4: C#のはなし @ 歌舞伎座.tech#9「異種プログラミング言語格闘勉強会」

MS もオープンになってきてる Runtime

◦ https://github.com/dotnet/coreclr Libraries

◦ https://github.com/dotnet/corefx Compiler

◦ https://github.com/dotnet/roslyn

Page 5: C#のはなし @ 歌舞伎座.tech#9「異種プログラミング言語格闘勉強会」

https://twitter.com/chomado/status/708675794273316864

Page 6: C#のはなし @ 歌舞伎座.tech#9「異種プログラミング言語格闘勉強会」

stronglytyped

dynamic

C# 代数的データ型 ない

Option/Maybe ない

型クラス ない

高カインド型 ない

Unit / Bottom ない

null 許容型 ある

ダウンキャスト ある

dynamic 型 ある

Page 7: C#のはなし @ 歌舞伎座.tech#9「異種プログラミング言語格闘勉強会」

その他、 C# にない言語機能 パターンマッチング 強い型推論 マクロ/コンパイル時計算 トレイト/実装の多重継承 型エイリアス 構造的部分型 正規表現リテラル ユーザー定義演算子            などなど…

Page 8: C#のはなし @ 歌舞伎座.tech#9「異種プログラミング言語格闘勉強会」

C# 魔改造の歴史 Java っぽい何かに対し…

◦unsafe ポインタ◦数値 enum◦struct◦演算子オーバーロード◦プロパティ◦デリゲート/イベント◦foreach

C/C++ から

Delphi/VB から

Page 9: C#のはなし @ 歌舞伎座.tech#9「異種プログラミング言語格闘勉強会」

さらに魔改造 ジェネリクス

匿名メソッド

yield

null 許容型

partial

実行時に具象化するが、高カインド型はない型引数の省略もあまり賢くない

クロージャ的なことが可能だが記法が微妙型も微妙

遅延ストリーム専用ジェネレータ匿名メソッドでは使えない

null がない値型に null を持ち込む型null 禁止型はない

Generation Gap パターンを言語機能で解決IDE 前提

Page 10: C#のはなし @ 歌舞伎座.tech#9「異種プログラミング言語格闘勉強会」

さらにさらに魔改造 var

ラムダ式

匿名型

クエリ式

式木

ローカル変数専用、推論というほど賢くないimmutable 対応もない

匿名メソッドが短く書けるがやっぱり yield が使えない

型定義がいらないが基本的にメソッド内でしか使えない

do 記法とか for 内包とかに似てるしかし語彙がアレ

ラムダ式を AST に変換するだが制約が多い

Page 11: C#のはなし @ 歌舞伎座.tech#9「異種プログラミング言語格闘勉強会」

もっと!魔改造 dynamic 型

共変・反変

async/await

null 条件演算子

なんかよくわからんが短く書けたりする構文糖

実行時コード生成で意外と高速だが型安全とは何だったのか

ジェネリクスと継承の闇中途半端

制御構文と混ぜられて便利だが万能ではないし、拡張性も微妙

Embrace Null

!?

Page 12: C#のはなし @ 歌舞伎座.tech#9「異種プログラミング言語格闘勉強会」

今後の魔改造見通し 関数型プログラミング的ななにかをさらに混ぜ込む方向性◦ いろんな構文を文から式にするとか◦ パターンマッチ、タプル、値の分解とか◦ 代数的データ型とか(次バージョンには入らず、さらにその先)

詳しくは Build Insider オピニオン「次期 C# および 次期 .NET の見通しについて」 http://www.buildinsider.net/column/iwanaga-nobuyuki もしくは https://github.com/dotnet/roslyn

Page 13: C#のはなし @ 歌舞伎座.tech#9「異種プログラミング言語格闘勉強会」

C# の微妙なところ 専用構文(キーワード)が微妙に多い 言語機能が微妙に直交してない プログラマーに DSL を作る手段をくれない 微妙に IDE(Visual Studio) を意識した言語仕様 あと、セミコロンと中カッコがやけに多い

Page 14: C#のはなし @ 歌舞伎座.tech#9「異種プログラミング言語格闘勉強会」

では、なぜ C# ?

C# はぼくらのための言語

8 割の人が悩まず使える 2 割のユースケース

IDE は友達ステップ実行最高

Page 15: C#のはなし @ 歌舞伎座.tech#9「異種プログラミング言語格闘勉強会」

C# の強み(少しだけまじめに) 地味にいろんなプラットフォームで動く

◦ thanks, Mono! thanks, Unity! ネイティブ (C/C++) をうまいことラップしたり相互運用したりしつつ、基本的にはマネージドな世界に住める◦ Win32API を手軽に扱える言語仕様◦ 数値ベース enum とか struct とか unsafe ポインタとか

◦ いわゆる LL→C も書くだろ常識的に考えて◦ Java→JNI/JNA 、プリミティブ型とクラスでがんばる

sun.misc.Unsafe廃止でひと騒ぎ