Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Talk about C-Sharp
Search
INOMATA Kentaro
March 20, 2016
Technology
0
6
Talk about C-Sharp
C#のはなし
2016/03/20に行われた歌舞伎座.tech#9「異種プログラミング言語格闘勉強会」の発表資料です。
https://kbkz.connpass.com/event/26677/
INOMATA Kentaro
March 20, 2016
Tweet
Share
More Decks by INOMATA Kentaro
See All by INOMATA Kentaro
F# Design and Trade-offs: Functional Paradigm on .NET
matarillo
6
590
関数型プログラミングの設計テクニック
matarillo
9
4.7k
Bash on Ubuntu on Windows ちょっとだけ Windows Subsystem for Linux
matarillo
4
3.3k
A guide for "Microsoft Application Architecture Guide, 2nd Ed."
matarillo
0
9
Other Decks in Technology
See All in Technology
AWS UG Grantでグローバル20名に選出されてre:Inventに行く話と、マルチクラウドセキュリティの教科書を執筆した話 / The Story of Being Selected for the AWS UG Grant to Attending re:Invent, and Writing a Multi-Cloud Security Textbook
yuj1osm
1
120
Okta Identity Governanceで実現する最小権限の原則 / Implementing the Principle of Least Privilege with Okta Identity Governance
tatsumin39
0
160
Linux カーネルが支えるコンテナの仕組み / LF Japan Community Days 2025 Osaka
tenforward
1
110
Introduction to Bill One Development Engineer
sansan33
PRO
0
300
AIフル活用で挑む!空間アプリ開発のリアル
taat
0
140
[2025年10月版] Databricks Data + AI Boot Camp
databricksjapan
1
240
Digitization部 紹介資料
sansan33
PRO
1
5.6k
Implementing and Evaluating a High-Level Language with WasmGC and the Wasm Component Model: Scala’s Case
tanishiking
0
170
事業開発におけるDify活用事例
kentarofujii
4
1.3k
Introduction to Sansan Meishi Maker Development Engineer
sansan33
PRO
0
310
CREが作る自己解決サイクルSlackワークフローに組み込んだAIによる社内ヘルプデスク改革 #cre_meetup
bengo4com
0
280
Introdução a Service Mesh usando o Istio
aeciopires
1
280
Featured
See All Featured
Making Projects Easy
brettharned
120
6.4k
Learning to Love Humans: Emotional Interface Design
aarron
274
41k
Practical Orchestrator
shlominoach
190
11k
jQuery: Nuts, Bolts and Bling
dougneiner
65
7.9k
Easily Structure & Communicate Ideas using Wireframe
afnizarnur
194
16k
Build your cross-platform service in a week with App Engine
jlugia
232
18k
Visualizing Your Data: Incorporating Mongo into Loggly Infrastructure
mongodb
48
9.7k
The Cost Of JavaScript in 2023
addyosmani
55
9.1k
How to Create Impact in a Changing Tech Landscape [PerfNow 2023]
tammyeverts
55
3k
Faster Mobile Websites
deanohume
310
31k
Fireside Chat
paigeccino
40
3.7k
Evolution of real-time – Irina Nazarova, EuRuKo, 2024
irinanazarova
9
990
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
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 廃止でひと騒ぎ