SlideShare une entreprise Scribd logo
1  sur  15
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
strongly
typed
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
廃止でひと騒ぎ

Contenu connexe

Plus de Kentaro Inomata

.NETの業務向けOSSフレームワーク鼎談
.NETの業務向けOSSフレームワーク鼎談.NETの業務向けOSSフレームワーク鼎談
.NETの業務向けOSSフレームワーク鼎談Kentaro Inomata
 
ASP.NET MVCとEntity Frameworkで作ってみた
ASP.NET MVCとEntity Frameworkで作ってみたASP.NET MVCとEntity Frameworkで作ってみた
ASP.NET MVCとEntity Frameworkで作ってみたKentaro Inomata
 
MacintoshでSilverlight開発
MacintoshでSilverlight開発MacintoshでSilverlight開発
MacintoshでSilverlight開発Kentaro Inomata
 
仮面ライダー勉強会LT06 響鬼についていろいろと
仮面ライダー勉強会LT06 響鬼についていろいろと仮面ライダー勉強会LT06 響鬼についていろいろと
仮面ライダー勉強会LT06 響鬼についていろいろとKentaro Inomata
 
18-D-5 MVP & .NET Community Members Lightning Talks
18-D-5 MVP & .NET Community Members Lightning Talks18-D-5 MVP & .NET Community Members Lightning Talks
18-D-5 MVP & .NET Community Members Lightning TalksKentaro Inomata
 
パズルをコンピュータに解かせる
パズルをコンピュータに解かせるパズルをコンピュータに解かせる
パズルをコンピュータに解かせるKentaro Inomata
 
GUIのアーキテクチャ
GUIのアーキテクチャGUIのアーキテクチャ
GUIのアーキテクチャKentaro Inomata
 
Silverlightと業務アプリ
Silverlightと業務アプリSilverlightと業務アプリ
Silverlightと業務アプリKentaro Inomata
 
コミュニティの壁を越える
コミュニティの壁を越えるコミュニティの壁を越える
コミュニティの壁を越えるKentaro Inomata
 
業務システムを使いやすく! .NET Webアプリケーションの現在
業務システムを使いやすく!.NET Webアプリケーションの現在業務システムを使いやすく!.NET Webアプリケーションの現在
業務システムを使いやすく! .NET Webアプリケーションの現在Kentaro Inomata
 
解題:私がJavaからCsharpに乗り換えた10の理由
解題:私がJavaからCsharpに乗り換えた10の理由解題:私がJavaからCsharpに乗り換えた10の理由
解題:私がJavaからCsharpに乗り換えた10の理由Kentaro Inomata
 

Plus de Kentaro Inomata (14)

.NETの業務向けOSSフレームワーク鼎談
.NETの業務向けOSSフレームワーク鼎談.NETの業務向けOSSフレームワーク鼎談
.NETの業務向けOSSフレームワーク鼎談
 
RESTful Webサービス
RESTful WebサービスRESTful Webサービス
RESTful Webサービス
 
Azureといえば
AzureといえばAzureといえば
Azureといえば
 
ASP.NET MVCとEntity Frameworkで作ってみた
ASP.NET MVCとEntity Frameworkで作ってみたASP.NET MVCとEntity Frameworkで作ってみた
ASP.NET MVCとEntity Frameworkで作ってみた
 
MacintoshでSilverlight開発
MacintoshでSilverlight開発MacintoshでSilverlight開発
MacintoshでSilverlight開発
 
仮面ライダー勉強会LT06 響鬼についていろいろと
仮面ライダー勉強会LT06 響鬼についていろいろと仮面ライダー勉強会LT06 響鬼についていろいろと
仮面ライダー勉強会LT06 響鬼についていろいろと
 
18-D-5 MVP & .NET Community Members Lightning Talks
18-D-5 MVP & .NET Community Members Lightning Talks18-D-5 MVP & .NET Community Members Lightning Talks
18-D-5 MVP & .NET Community Members Lightning Talks
 
パズルをコンピュータに解かせる
パズルをコンピュータに解かせるパズルをコンピュータに解かせる
パズルをコンピュータに解かせる
 
GUIのアーキテクチャ
GUIのアーキテクチャGUIのアーキテクチャ
GUIのアーキテクチャ
 
Silverlightと業務アプリ
Silverlightと業務アプリSilverlightと業務アプリ
Silverlightと業務アプリ
 
コミュニティの壁を越える
コミュニティの壁を越えるコミュニティの壁を越える
コミュニティの壁を越える
 
釣りの楽しみ
釣りの楽しみ釣りの楽しみ
釣りの楽しみ
 
業務システムを使いやすく! .NET Webアプリケーションの現在
業務システムを使いやすく!.NET Webアプリケーションの現在業務システムを使いやすく!.NET Webアプリケーションの現在
業務システムを使いやすく! .NET Webアプリケーションの現在
 
解題:私がJavaからCsharpに乗り換えた10の理由
解題:私がJavaからCsharpに乗り換えた10の理由解題:私がJavaからCsharpに乗り換えた10の理由
解題:私がJavaからCsharpに乗り換えた10の理由
 

Csharpのはなし