The Evolution of C#
C#の秘めるポテンシャルとソーシャルゲーム

                 gloops Holdings Pte. Ltd.
                                Engineer
              Microsoft MVP for Visual C#
                         Yoshifumi Kawai
Self Introduction
株式会社gloops (グループス)
  ソーシャルアプリケーションプロバイダ
  大戦乱!!三国志バトル, 大召喚!!マジゲート, etc…
  Windows Server(IIS) + SQL Server + ASP.NET + C# で構築


個人活動
  Web : http://neue.cc/
  Twitter : @neuecc
  Microsoft MVP for Visual C# (2011/04 – 2013/04)
進化する言語 C#
The Evolution of C#                                       Async


                                            2010 C# 4.0
                            LINQ                             2012 C# 5.0



                                                     Dynamic
              2005 C# 2.0
Java/Delphi                   2008 C# 3.0



                       Generics
2002 C# 1.0
最適な言語を選択する
領域が変われば言語は変わる
 Cは基本!C最速!Cで全て書ける!
 ……わけはない。
 Cの生産性でウェブアプリケーションを作るのは大変だし利点もない
    書けないわけではないけど、実質書けない

ウェブアプリケーションで大事なのは?
 パフォーマンスは勿論大事、だけど全てにおける優先事項ではない
   比較対象がC++とか、そういうお話
   CPUよりもDBアクセスとかがネックになりがちなので
 速いリリース速度に対応するための軽量さが何よりも大事
軽量とは
Lightweight Laguage...
  軽量プログラミング言語(けいりょうプログラミングげんご、和製英
  語:Lightweight Language,LL)とは、日本においてスクリプト言語を指す
  ジャングリッシュで、取り回しに優れ、コードの作成や修正が容易と見な
  されるプログラミング言語のことを指す。
  出展:ウィキペディア「軽量プログラミング言語」

つまるところ
  コードの作成や修正が容易であること
  それは、リリース後も高速に更新をし続ける、ソーシャルゲームで何より
  も大事なこと
C#は軽量か?
軽量です!
 Rubyなどと比較しても?
 Visual Studioという翼があれば!

今時の言語は単独で評価できない
 IDE・フレームワーク・言語、これらは三位一体

Visual Studioはロケットブースター
 C#単体の走る速度はLLには敵わないかもしれない
 しかしロケットブースターがついた時、その速さには誰も敵わない
自動生成 vs 言語機能
どちらも大事
 自動生成があれば全て事足りる、などということはない
 いくらIDEがロケットブースターでも、重さは、重さ

例えば型推論
 C# 3.0から入った機能
 型は非常に大事だけど、手で書くのは面倒なので推論してくれる
 言語機能にそれがない場合、IDEを使って右側の型から自動生成で宣言す
 る型を作ることもできる(e.g. Eclipse)
 でも、頻繁に行う部分でそれって、凄く手間だし、コード上の視覚的にも
 良くない
静的型付け vs 動的型付け
コンパイルでの検出ってやっぱ大事
 ユニットテストがあるからなくても大丈夫、ではない
 コンパイルエラーならIDEが「リアルタイム」に検出する
   リアルタイムなのは、速さであり軽さ

強力な入力支援
 甘美なるIntelliSense!もうこれなしで生きていけない!

強力なリファクタリング支援
 ソーシャルゲームの頻繁な更新のもとでは、設計は不変、ではない
 むしろころころ変わる
 強固なリファクタリング支援は型付けあってのもの
足を止めたらお終い
要求が変わっていくのは当たり前
 10年前に現代のようなプログラミングは想像できたか?

言語も進化し続けなければならない
 要求が変われば、追随していかなければならない
 ただたんに書ければいい、というだけではダメ
 より軽量に!より高速に!



→C#ははどのように進化していったか
進化する言語 C#
C# 3.0 - LINQ
LINQの存在はC#の大きな強み
 あらゆるデータを統一的に扱う仕組み
 特にコレクションに対する操作(LINQ to Objects)が強力
   LINQ != SQLです:)

コレクション?
 データベースから取得したデータもそう
    "select * from hogehoge"の結果は行のコレクション
 ウェブアプリケーションの中心はやはり、それ!
 DB上で整形済みだから、特に必要ない……?
JOINを避ける
DBへの負荷削減
 大量のデータを扱う関係上、JOINは極力避けるようにしている
 代わりにメモリにキャッシュ可能なデータは積極的にメモリへ

NoSQL
 高速なデータ取得、かわりにDB上での柔軟な結合はない
 gloopsではMemcachedとRedisを利用中

LINQ to Objectsによるインメモリ結合
 データはC#上で結合するが、普通にやると生産性落ちるしバグの元
 そこで、LINQ to Objectsを使う
 SQLよりも強力なパワーを持つので、むしろ書きやすい
例えばこんなインメモリ結合
  パーティー   装備アイテム   皮の鎧、とか……

  勇者
                   色が一致するのがそのキャラ
                   クターの装備してるアイテム
  剣士

魔法使い
                   パーティーテーブルと装備アイテ
  僧侶                ムテーブルを結合したい!
こういう風に結合されればいい
  勇者

  剣士

魔法使い
                                 それGroupJoinで一撃
  僧侶

 party.GroupJoin(equipItems,
     x => x.CharacterId, x => x.CharacterId,
     (character, items) => new { character, items });
GroupJoin != OuterJoin
  勇者

  剣士

魔法使い                       オブジェクトの集合をバラさ
                           ずそのままで結合
  僧侶

 party.GroupJoin(equipItems,
     x => x.CharacterId, x => x.CharacterId,
     (character, items) => new { character, items });
LINQ > SQL
SQLの外部結合と同じようにも出来る
    SelectManyでバラすだけ
// SelectManyでバラす & DefaultIfEmptyで存在しない場合のnull化
party.GroupJoin(equipItems,
         x => x.CharacterId, x => x.CharacterId,
         (character, items) => new { character, items })
     .SelectMany(x => x.items.DefaultIfEmpty(), (chara, ....

でも、わざわざバラす必要はない
    むしろバラした形でしか問い合わせできないのはSQLが問題
    自由なクエリはSQL的なしがらみに囚われなくていい
C# 4.0 - Dynamic
世界の全てが型付けできはしない
 外の世界とのやり取りの境界線が必ずある
 そこで基本は静的に、部分的に動的にするのがdynamic

例えば?
 SignalRというWebSocketなどを透過的に扱うライブラリがある
     WebSocketという最新フィーチャーにも.NETは追随してます!
 (擬似的に)ブラウザ上のメソッドを呼び出すことが出来
 ここでの境界はブラウザ上で動くJavaScriptであり、動的な存在
C# 5.0 - Async
高まる非同期処理の重要性
 Node.js(流行ってますね!)に代表されるノンブロッキングI/O
 I/Oを待っている間のスレッド消費がなくなる

が、しかしコールバック地獄
 ネストする関数
 例外処理は?リトライ処理は?
 気の利いたライブラリでカバーしようにも限界

C# 5.0は言語構文として用意した
 非同期処理が重要だ、という時代の要請への素早い対応
C# 6.0? - Compiler as a Service
C#はIDEとの相性が考えられている
  C# + Visual Studioの良さは、言語設計からして考慮されているから
  例えばC#の型推論は非力な側面もあるけれど、IDEでの入力補完などを考
  えると、ギリギリのラインになっている

Visual Studioを拡張する
  ただのエディタマクロ以上の拡張を実装するには、構文解析が必要
  そこでC#自体のParserを提供、更にVisual Studio拡張との融合も
  これにより個々のアプリケーション開発に特化した拡張機能を、簡単に作
  ることができ、生産性が爆発的に高まる
Conclusion
まとめ
進化する言語 C#
 大事なことなので三度言いました!
 業界の最前線、高い要求に対して、応え続けてくれる
 C# + Visual Studio + .NET Frameworkと、三位一体で進化し続けている


言語が思考を規定する
 言語が進化するのは、決して複雑怪奇にしたいからではない
 むしろ楽させるために進化している
 常により良いを目指して、しがらみに囚われず変わり続けよう
The evolution of c#

More Related Content

PPTX
Developers Summit 2014 【13-D-7】 コミュニティLT - Story 5. 「新人技術者にどうプログラミングを教えたか」
PDF
4 Colors Othello’s Algorithm @仙台 IT 文化祭 2017
PDF
Unity sdk-plugin
PDF
de:code報告
ODP
Unity ネイティブプラグインの作成について
PPTX
Decode報告(提供版)
PDF
式の体を成して無い式を式の体を成すように式と式木で何とかする式
PPTX
他言語との連携(ネイティブから動的言語まで)
Developers Summit 2014 【13-D-7】 コミュニティLT - Story 5. 「新人技術者にどうプログラミングを教えたか」
4 Colors Othello’s Algorithm @仙台 IT 文化祭 2017
Unity sdk-plugin
de:code報告
Unity ネイティブプラグインの作成について
Decode報告(提供版)
式の体を成して無い式を式の体を成すように式と式木で何とかする式
他言語との連携(ネイティブから動的言語まで)

What's hot (20)

PPTX
Swiftで説明する「モナド」:Swiftにおける関数型プログラミングの使い方
PPTX
はじめてのChu カッコカリ
PDF
What's MVP
PPTX
Visual Studio による開発環境・プログラミングの進化
PDF
Programmer's Brain
PPTX
勉強会用Swift授業2018-0126
PDF
KotlinJSって正直どうなん
PDF
Swiftでの関数型プログラミングについて考えていること
PDF
Swiftによる関数型プログラミング超入門
PPTX
開発チームにKotlinを導入した話
PPTX
最新C#動向と関数型言語haskell ~命令型静的プログラミングから関数型動的プログラミングへのシフト~
PDF
アジャイルと形式手法
PDF
協働ロボットCOROの開発における形式的仕様記述KMLの開発と適用
PDF
The Fastest Possible Way to Develop an Interactive App
PDF
PHPカンファレンス関西 2011
PDF
恊働ロボットCOROの開発における形式的仕様の適用事例
PDF
YAPC::Hokkaido 2016 「普段使い言語環境」更新によるスキルリセットサバイバルガイド
PDF
C#のココが好き!
PDF
開発者は仕事でリーダブルなコードを書けるのか?
PDF
XP祭り2016 - SWチームとHWチームがスクラムを組んだら
Swiftで説明する「モナド」:Swiftにおける関数型プログラミングの使い方
はじめてのChu カッコカリ
What's MVP
Visual Studio による開発環境・プログラミングの進化
Programmer's Brain
勉強会用Swift授業2018-0126
KotlinJSって正直どうなん
Swiftでの関数型プログラミングについて考えていること
Swiftによる関数型プログラミング超入門
開発チームにKotlinを導入した話
最新C#動向と関数型言語haskell ~命令型静的プログラミングから関数型動的プログラミングへのシフト~
アジャイルと形式手法
協働ロボットCOROの開発における形式的仕様記述KMLの開発と適用
The Fastest Possible Way to Develop an Interactive App
PHPカンファレンス関西 2011
恊働ロボットCOROの開発における形式的仕様の適用事例
YAPC::Hokkaido 2016 「普段使い言語環境」更新によるスキルリセットサバイバルガイド
C#のココが好き!
開発者は仕事でリーダブルなコードを書けるのか?
XP祭り2016 - SWチームとHWチームがスクラムを組んだら
Ad

Viewers also liked (6)

PDF
Javaによるゲーム開発パッケージ化への取り組みと開発ノウハウ
PDF
新カゴプロジェクトの プロダクトオーナーとして やってきたこと
PDF
プロダクトマネージャーに求められるスキルとマインドセットとは-[ITビジネスセミナー] 現役プロダクトマネージャーが語る、日本企業におけるプロダクトマネー...
PDF
プロジェクトとプロジェクトマネジメントの基本
PDF
プロダクトマネージャーにたちはだかる壁を、どう乗り越えるか
PDF
マーケティングを捨てよ、サポートへ出よう 事例から見るスタートアップ初期におけるユーザー獲得
Javaによるゲーム開発パッケージ化への取り組みと開発ノウハウ
新カゴプロジェクトの プロダクトオーナーとして やってきたこと
プロダクトマネージャーに求められるスキルとマインドセットとは-[ITビジネスセミナー] 現役プロダクトマネージャーが語る、日本企業におけるプロダクトマネー...
プロジェクトとプロジェクトマネジメントの基本
プロダクトマネージャーにたちはだかる壁を、どう乗り越えるか
マーケティングを捨てよ、サポートへ出よう 事例から見るスタートアップ初期におけるユーザー獲得
Ad

Similar to The evolution of c# (20)

PDF
.NET Coreから概観する.NETのOSSへの取り組み
PDF
[2001/05/30] .NET Developers Conference 2001 May / C#の生産性とパフォーマンス
PDF
The Twelve-Factor (A|M)pp with C#
PPTX
新しい Visual Studio & .NET と新時代のアーキテクチャ
PDF
C#の強み、或いは何故PHPから乗り換えるのか
PDF
【16-D-4】3分ではじめるスマホアプリのビジュアル開発
PPTX
20160702 linuxでもできるc#でアプリ開発
PPTX
C#メタプログラミング概略 in 2021
PPT
20021007
PDF
.NET の今と未来 ~ デバイス&クラウド ネイティブを目指して
PDF
デブサミ2013 【15-B-2】iOS/Android向け開発をビジュアルに!
PPTX
.NETの自作ツール公開手段
PDF
Microsoft learnご紹介vol2
PDF
.NET Coreとツール類の今
PPTX
C#4.0 と Visual Studio 2010/.NET Framework 4.0~ここが Cool! いけてる機能10連発!~
PDF
LightSwitch ~結局何ができるの~ rev 2
PDF
AIと協働する技術 コンテキストとの向き合い方 - Technologies for Collaborating with AI: Approaches...
PDF
改めて C# でできることを振り返る
PDF
[Japan Tech summit 2017] APP 001
PPTX
Office アドイン ハンズオン
.NET Coreから概観する.NETのOSSへの取り組み
[2001/05/30] .NET Developers Conference 2001 May / C#の生産性とパフォーマンス
The Twelve-Factor (A|M)pp with C#
新しい Visual Studio & .NET と新時代のアーキテクチャ
C#の強み、或いは何故PHPから乗り換えるのか
【16-D-4】3分ではじめるスマホアプリのビジュアル開発
20160702 linuxでもできるc#でアプリ開発
C#メタプログラミング概略 in 2021
20021007
.NET の今と未来 ~ デバイス&クラウド ネイティブを目指して
デブサミ2013 【15-B-2】iOS/Android向け開発をビジュアルに!
.NETの自作ツール公開手段
Microsoft learnご紹介vol2
.NET Coreとツール類の今
C#4.0 と Visual Studio 2010/.NET Framework 4.0~ここが Cool! いけてる機能10連発!~
LightSwitch ~結局何ができるの~ rev 2
AIと協働する技術 コンテキストとの向き合い方 - Technologies for Collaborating with AI: Approaches...
改めて C# でできることを振り返る
[Japan Tech summit 2017] APP 001
Office アドイン ハンズオン

More from leverages_event (20)

PDF
Ac tsumugu 20170712
PDF
20171206 tsumugu4 人工知能特集_v1.00_抜粋
PDF
【ヒカ☆ラボ】アーキテクト養成講座「入門編」 折田 武己 氏 登壇資料 20171205
PDF
【ヒカ☆ラボ】 dely株式会社 梅森 翔氏 登壇資料 20171121
PDF
【ヒカ☆ラボ】 dely株式会社 大竹 雅登氏 登壇資料 20171121
PDF
【ヒカ☆ラボ】 dely株式会社 深尾 もとのぶ氏 登壇資料 20171121
PDF
【ヒカ☆ラボ】 dely株式会社 三笠 斉輝氏 登壇資料 20171121
PPTX
【ヒカ☆ラボ】 株式会社AMG Solution 山口 博史氏登壇資料 20170817
PPTX
【ヒカ☆ラボ】株式会社ライナフ 登壇資料
PDF
【ヒカ☆ラボ】株式会社エアー様~ETLツール活用法について~
PPTX
インスタグラムを活用した、マーケティングについて
PDF
ヒカ☆ラボ ユニティ・テクノロジーズ・ジャパン合同会社 安原 祐二氏登壇資料_20170119
PPTX
ヒカ☆ラボ 株式会社PR TIMES 山田 和広氏登壇資料 20161129
PPTX
ヒカ☆ラボ 株式会社PR TIMES 新井 隆士氏登壇資料 20161129
PDF
ヒカラボ「自社サービス開発会社で活躍し続けるために必要な○○とは?」開発エンジニア
PDF
ヒカラボ「自社サービス開発会社で活躍し続けるために必要な○○とは?」UIデザイナー
PDF
初心者向けGo言語勉強会
PDF
DMM.comラボはなぜSparkを採用したのか?レコメンドエンジン開発の裏側をお話します!
PPTX
Node.js×mongo dbで3年間サービス運用してみた話
PDF
株式会社waja 安藤様 登壇資料
Ac tsumugu 20170712
20171206 tsumugu4 人工知能特集_v1.00_抜粋
【ヒカ☆ラボ】アーキテクト養成講座「入門編」 折田 武己 氏 登壇資料 20171205
【ヒカ☆ラボ】 dely株式会社 梅森 翔氏 登壇資料 20171121
【ヒカ☆ラボ】 dely株式会社 大竹 雅登氏 登壇資料 20171121
【ヒカ☆ラボ】 dely株式会社 深尾 もとのぶ氏 登壇資料 20171121
【ヒカ☆ラボ】 dely株式会社 三笠 斉輝氏 登壇資料 20171121
【ヒカ☆ラボ】 株式会社AMG Solution 山口 博史氏登壇資料 20170817
【ヒカ☆ラボ】株式会社ライナフ 登壇資料
【ヒカ☆ラボ】株式会社エアー様~ETLツール活用法について~
インスタグラムを活用した、マーケティングについて
ヒカ☆ラボ ユニティ・テクノロジーズ・ジャパン合同会社 安原 祐二氏登壇資料_20170119
ヒカ☆ラボ 株式会社PR TIMES 山田 和広氏登壇資料 20161129
ヒカ☆ラボ 株式会社PR TIMES 新井 隆士氏登壇資料 20161129
ヒカラボ「自社サービス開発会社で活躍し続けるために必要な○○とは?」開発エンジニア
ヒカラボ「自社サービス開発会社で活躍し続けるために必要な○○とは?」UIデザイナー
初心者向けGo言語勉強会
DMM.comラボはなぜSparkを採用したのか?レコメンドエンジン開発の裏側をお話します!
Node.js×mongo dbで3年間サービス運用してみた話
株式会社waja 安藤様 登壇資料

The evolution of c#

  • 1. The Evolution of C# C#の秘めるポテンシャルとソーシャルゲーム gloops Holdings Pte. Ltd. Engineer Microsoft MVP for Visual C# Yoshifumi Kawai
  • 2. Self Introduction 株式会社gloops (グループス) ソーシャルアプリケーションプロバイダ 大戦乱!!三国志バトル, 大召喚!!マジゲート, etc… Windows Server(IIS) + SQL Server + ASP.NET + C# で構築 個人活動 Web : http://neue.cc/ Twitter : @neuecc Microsoft MVP for Visual C# (2011/04 – 2013/04)
  • 4. The Evolution of C# Async 2010 C# 4.0 LINQ 2012 C# 5.0 Dynamic 2005 C# 2.0 Java/Delphi 2008 C# 3.0 Generics 2002 C# 1.0
  • 5. 最適な言語を選択する 領域が変われば言語は変わる Cは基本!C最速!Cで全て書ける! ……わけはない。 Cの生産性でウェブアプリケーションを作るのは大変だし利点もない 書けないわけではないけど、実質書けない ウェブアプリケーションで大事なのは? パフォーマンスは勿論大事、だけど全てにおける優先事項ではない 比較対象がC++とか、そういうお話 CPUよりもDBアクセスとかがネックになりがちなので 速いリリース速度に対応するための軽量さが何よりも大事
  • 6. 軽量とは Lightweight Laguage... 軽量プログラミング言語(けいりょうプログラミングげんご、和製英 語:Lightweight Language,LL)とは、日本においてスクリプト言語を指す ジャングリッシュで、取り回しに優れ、コードの作成や修正が容易と見な されるプログラミング言語のことを指す。 出展:ウィキペディア「軽量プログラミング言語」 つまるところ コードの作成や修正が容易であること それは、リリース後も高速に更新をし続ける、ソーシャルゲームで何より も大事なこと
  • 7. C#は軽量か? 軽量です! Rubyなどと比較しても? Visual Studioという翼があれば! 今時の言語は単独で評価できない IDE・フレームワーク・言語、これらは三位一体 Visual Studioはロケットブースター C#単体の走る速度はLLには敵わないかもしれない しかしロケットブースターがついた時、その速さには誰も敵わない
  • 8. 自動生成 vs 言語機能 どちらも大事 自動生成があれば全て事足りる、などということはない いくらIDEがロケットブースターでも、重さは、重さ 例えば型推論 C# 3.0から入った機能 型は非常に大事だけど、手で書くのは面倒なので推論してくれる 言語機能にそれがない場合、IDEを使って右側の型から自動生成で宣言す る型を作ることもできる(e.g. Eclipse) でも、頻繁に行う部分でそれって、凄く手間だし、コード上の視覚的にも 良くない
  • 9. 静的型付け vs 動的型付け コンパイルでの検出ってやっぱ大事 ユニットテストがあるからなくても大丈夫、ではない コンパイルエラーならIDEが「リアルタイム」に検出する リアルタイムなのは、速さであり軽さ 強力な入力支援 甘美なるIntelliSense!もうこれなしで生きていけない! 強力なリファクタリング支援 ソーシャルゲームの頻繁な更新のもとでは、設計は不変、ではない むしろころころ変わる 強固なリファクタリング支援は型付けあってのもの
  • 12. C# 3.0 - LINQ LINQの存在はC#の大きな強み あらゆるデータを統一的に扱う仕組み 特にコレクションに対する操作(LINQ to Objects)が強力 LINQ != SQLです:) コレクション? データベースから取得したデータもそう "select * from hogehoge"の結果は行のコレクション ウェブアプリケーションの中心はやはり、それ! DB上で整形済みだから、特に必要ない……?
  • 13. JOINを避ける DBへの負荷削減 大量のデータを扱う関係上、JOINは極力避けるようにしている 代わりにメモリにキャッシュ可能なデータは積極的にメモリへ NoSQL 高速なデータ取得、かわりにDB上での柔軟な結合はない gloopsではMemcachedとRedisを利用中 LINQ to Objectsによるインメモリ結合 データはC#上で結合するが、普通にやると生産性落ちるしバグの元 そこで、LINQ to Objectsを使う SQLよりも強力なパワーを持つので、むしろ書きやすい
  • 14. 例えばこんなインメモリ結合 パーティー 装備アイテム 皮の鎧、とか…… 勇者 色が一致するのがそのキャラ クターの装備してるアイテム 剣士 魔法使い パーティーテーブルと装備アイテ 僧侶 ムテーブルを結合したい!
  • 15. こういう風に結合されればいい 勇者 剣士 魔法使い それGroupJoinで一撃 僧侶 party.GroupJoin(equipItems, x => x.CharacterId, x => x.CharacterId, (character, items) => new { character, items });
  • 16. GroupJoin != OuterJoin 勇者 剣士 魔法使い オブジェクトの集合をバラさ ずそのままで結合 僧侶 party.GroupJoin(equipItems, x => x.CharacterId, x => x.CharacterId, (character, items) => new { character, items });
  • 17. LINQ > SQL SQLの外部結合と同じようにも出来る SelectManyでバラすだけ // SelectManyでバラす & DefaultIfEmptyで存在しない場合のnull化 party.GroupJoin(equipItems, x => x.CharacterId, x => x.CharacterId, (character, items) => new { character, items }) .SelectMany(x => x.items.DefaultIfEmpty(), (chara, .... でも、わざわざバラす必要はない むしろバラした形でしか問い合わせできないのはSQLが問題 自由なクエリはSQL的なしがらみに囚われなくていい
  • 18. C# 4.0 - Dynamic 世界の全てが型付けできはしない 外の世界とのやり取りの境界線が必ずある そこで基本は静的に、部分的に動的にするのがdynamic 例えば? SignalRというWebSocketなどを透過的に扱うライブラリがある WebSocketという最新フィーチャーにも.NETは追随してます! (擬似的に)ブラウザ上のメソッドを呼び出すことが出来 ここでの境界はブラウザ上で動くJavaScriptであり、動的な存在
  • 19. C# 5.0 - Async 高まる非同期処理の重要性 Node.js(流行ってますね!)に代表されるノンブロッキングI/O I/Oを待っている間のスレッド消費がなくなる が、しかしコールバック地獄 ネストする関数 例外処理は?リトライ処理は? 気の利いたライブラリでカバーしようにも限界 C# 5.0は言語構文として用意した 非同期処理が重要だ、という時代の要請への素早い対応
  • 20. C# 6.0? - Compiler as a Service C#はIDEとの相性が考えられている C# + Visual Studioの良さは、言語設計からして考慮されているから 例えばC#の型推論は非力な側面もあるけれど、IDEでの入力補完などを考 えると、ギリギリのラインになっている Visual Studioを拡張する ただのエディタマクロ以上の拡張を実装するには、構文解析が必要 そこでC#自体のParserを提供、更にVisual Studio拡張との融合も これにより個々のアプリケーション開発に特化した拡張機能を、簡単に作 ることができ、生産性が爆発的に高まる
  • 22. まとめ 進化する言語 C# 大事なことなので三度言いました! 業界の最前線、高い要求に対して、応え続けてくれる C# + Visual Studio + .NET Frameworkと、三位一体で進化し続けている 言語が思考を規定する 言語が進化するのは、決して複雑怪奇にしたいからではない むしろ楽させるために進化している 常により良いを目指して、しがらみに囚われず変わり続けよう