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