The evolution of c#

5,165 views

Published on

急速な勢いで拡大し続けるソーシャルゲーム業界において、その成長と同じ様に日々進化する「C#」は、想像を超える安定性と、ソーシャルゲームへの適応力を持っていることは知られていません。
しかしC#は、Visual Studio, SQL Server, Windows Serverなど、オールインワンで取り巻く環境が提供され、どれもが強力なGUIを備えているなど、非常に安定したリソースを備えている言語です。
2012年の現在もアップデートされている、進化し続けるC#のポテンシャルを余すことなくご説明します。

Published in: Technology
0 Comments
11 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
5,165
On SlideShare
0
From Embeds
0
Number of Embeds
2,426
Actions
Shares
0
Downloads
0
Comments
0
Likes
11
Embeds 0
No embeds

No notes for slide

The evolution of c#

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

×