c#4.0 と visual studio 2010/.net framework 4.0~ここが cool! いけてる機能10連発!~
DESCRIPTION
「INETA Day 2009~コミュニティパワーをリアルに体験しよう」 2009年7月11日 日本科学未来館 みらいCanホール http://ineta.jp/tabid/232/Default.aspx セッション 1-3 『C#4.0 と Visual Studio 2010/.NET Framework 4.0~ここが Cool! いけてる機能10連発!~』 6月に公開されたばかりの Visual Studio 2010 Beta 1 を使って、C#4.0 と Visual Studio 2010/.NET Framework 4.0 いけてる、お勧めの機能を、どんどんとデモで紹介します。TRANSCRIPT
C#4.0 とVisual Studio 2010/.NET Framework 4.0
1
2009/07/11 INETA DAY 2009
VSUGこみゅぷらすMicrosoft MVP for Development Tools - Visual C#
小島 富治雄
~ここが Cool! いけてる機能 10 連発 ! ~
自己紹介
2
小島 富治雄 (Fujiwo)
・ VSUG・こみゅぷらす・ Microsoft MVP for Development Tools - Visual C#
3
マイブーム
自転車通勤“bicycle commute”
ジャグリング“juggling”
英語の勉強“learning English”
アジェンダ
•はじめに•いけてる機能 10 連発 !–Visual Studio 2010 新機能–C#/C++ 4.0 新機能–.NET Framework 4.0 新機能
はじめに
8
デモが中心です。
9
デモ環境
Visual Studio 2010 Beta 1( 日本語版 )
onWindows 7 RC
10
背景11
最近のマイクロソフトの技術
•Windows Azure–クラウド コンピューティング–分散、並列、スケーラビリティ ( スケールアウト )
12
最近のマイクロソフトの技術
•Oslo と M 言語–モデリング–DSL ( ドメイン特化言語 )
13
最近のマイクロソフトの技術•DLR–Dynamic Language Runtime–ダイナミック言語
14
プログラミング言語のトレンド
宣言型プログラミング
並列プログラミング
ダイナミック
DSL
宣言型プログラミング
“What” を記述⇔ 命令型プログラミング–“How” を記述 (C# 2 .0 以前など )
ダイナミック ( 動的 )
コンパイラによる型チェック無し⇔ スタティック ( 静的 )–コンパイラによる型チェック
(C# 3.0 以前など )
DSL ( ドメイン特化言語 )
ドメインのモデルの記述に特化した言語
⇔ 汎用言語(C#, Visual Basic 等 )
並列プログラミング
19
ムーアの法則の破れ
20
「今から 10 年後、 15 年後に、
われわれは極めて根本的な問題に直面する」
2007/09/18
「半導体に集積されるトランジスタの数は18 ~ 24 カ月ごとに
倍増する」ムーアの法則 1965
ゴードン・ムーア( インテルの共同創業者 )
マルチコア CPU
21
プログラマはどうすればいいか
22
James Hughes 氏( サン マイクロシステムズ副社長 )
マルチ スレッディングを有効に活用するための
並列プログラミング技術が必要2008/12/03
マルチパラダイム• 手続き型• オブジェクト指向型• 関数型• 命令型 ⇔ 宣言型• 静的型付き ⇔ 動的型無し• Generic• 並列プログラミング 23
各のパラダイムの限界
•手続き型の限界•オブジェクト指向の限界
→ 適材適所のパラダイム→ マルチパラダイム
24
どんな風にプログラミング
したいか
25
複雑なものでも楽に
より早く
26
どんな風にプログラミングしたいか
コンピュータにできることは
コンピュータにやってほしい
27
→ ツール重要
どんな風にプログラミングしたいか
•シンプルに書きたいことだけを書く–モデル記述
( モデル = 関心事が分離されたもの )
28
→ モデリング重要 !
どんな風にプログラミングしたいか
•CPU に指示するようでなく•コンパイラに指示するようでなく•人が人に話すように
29
→ パラダイム採用 !
本日のキーワード
•ツール•モデリング•マルチパラダイム
30
ツール重要 !
パラダイム採用 !
モデリング重要 !
いけてる機能 10 連発 !
31
「いけてる ! 」と思ったら
拍手してください
32
練習します
33
1 発目Visual Studio 2010
スタート ページ
34
ツール重要 !
スタートページ
•WPF ベース• “ 最近使ったプロジェクト”–ピン止め機能など
•カスタマイズ可能
2 発目Visual Studio 2010
コード エディター
36
ツール重要 !
モデリング重要 !
コード エディター等
•コード 文字サイズのZoom-In 、 ZoomOut•フローティング–マルチディスプレイに便利 !
•呼び出し階層の表示–メソッドを選択 - 呼び出し階層の表示
コード エディター等•検索–検索単語を選択して•編集 - 移動 → 移動•選択単語の強調表示
• インテリセンス–自動採用するかどうかの切り替え• Ctrl+Alt+Space
38
自動生成機能
•クラスの自動生成•プロパティの自動生成
テスト駆動開発を更にサポート
メソッドの内部設計をしながらの実装が可能に
シンプルに書きたいことだけを書く
→ モデル記述( モデル = 関心事が分離されたもの )
40
3 発目Visual Studio 2010
アーキテクチャエクスプローラ
41
ツール重要 !
モデリング重要 !
モデリング機能•アーキテクチャ
エクスプローラ–コードの依存関係を可視化• ソース / クラス / メソッド等を選択 - グラフィッ
ク
4 発目Visual Studio 2010
UML
43
ツール重要 !
モデリング重要 !
モデリング機能•UML–アクティビティ図–ユースケース図–レイヤー図–論理クラス図–コンポーネント図–シーケンス図
モデリング機能
•シーケンス図の生成–ソースコードから
5 発目Visual Studio 2010
デバッガー
46
ツール重要 !
デバッガー
•ブレークポイント–エキスポート–検索•デバッグ - ウィンドウ - ブレークポイント - 検索窓
デバッガー
•Data Tips–付箋紙のような変数ウォッチ• ( デバッグ中 ) 変数を選択 - 付箋紙アイコン
•デバッグ履歴
48
デバッガー
•Parallel Tasks/Stacks–並列動作のデバッグ• ( デバッグ中 )デバッグ - Window - Parallel Tasks または Parallel Stacks
49
break
50
6 発目C#4.0
dynamic
51
パラダイム採用 !
• dynamic–var•コンパイル時に型を特定•C# 3.0
–dynamic•実行時に型を特定•C# 4.0
C# 4.0
7 発目C#4.0
オプション引数 /名前付き引数
53
•オプション引数public void Foo(int x = 1, int y=2, int z=3){ … }
•名前付き引数
Foo(x: 10, z: 11);
C# 4.0
• オートメーション オブジェクトをダイナミック オブジェクト (dynamic) に• 省略可能な名前付きパラメータ• 省略可能な “ ref”
COM 相互運用性の改善
8 発目.NET Framework
4.0
並列プログラミング
56
パラダイム採用 !
Parallel Computing• Task Parallel Library (TPL)– Task ベースの並列処理の必要性– 最大限の効率を求める Work-Stealing アルゴリズ
ム– 抽象化により、Thread などの低レベルの知識が不
要
• Parallel Linq (PLINQ)– 宣言的データ並列処理– LINQ to Object を使用したシンプルな並列処理
• Coordination Data Structures (CDS)– 並列処理を支援する為のデータ構造体
パラレル•Task Parallel Library(TPL)
Parallel.For(0, 100,index => 何か重い処理
(index));
– Parallel の中断• Exception 、 ParallelLoopState クラ
ス、 Break 、 Stop 、 ShouldExitCurrentIteration
パラレル•PLINQ–AsParallel()–AsOrdered()–ParallelEnumerable
Enumerable.Range(1, 100).AsParallel().ForAll(Console.WriteLine);
ParallelEnumerable.Range(10, 100).AsOrdered().ForAll(Console.WriteLine);
パラレル•スレッドセーフな
コレクションクラス –BlockingCollection<T>–ConcurrentBag<T>–ConcurrentDictionary<TKey,
Tvalue>–ConcurrentQueue<T>–ConcurrentStack<T>
9 発目C++
C++ 0x への対応
61
C++ 0x への対応
•auto キーワード•ラムダ式•static_assert 宣言•decltype 演算子• rvalue への参照宣言
62
10 発目C++
Parallel Pattern Library
63
パラダイム採用 !
Parallel Pattern Library
array<int, 5> values = { 1, 2, 3, 4, 5 };
parallel_for(0U, values.size(),[&values] (size_t i){
values[i] *= 2;}
); 64
Parallel Pattern Library
array<int, 5> values = { 1, 2, 3, 4, 5 };
parallel_for_each(values.begin(),values.end(),[] (int& value) { value *= 2; }
);
65
Let’s enjoyprogramming!
66
Thank you for your attention.
67