C#4.0 と Visual Studio 2010/.NET Framework 4.0~ここが Cool! いけてる機能10連発!~

Preview:

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 いけてる、お勧めの機能を、どんどんとデモで紹介します。

Citation preview

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

VSUG

Visual Studio® User Group

http://vsug.jp

4

こみゅぷらす

http://comuplus.net

5

マイブーム

自転車通勤“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

Recommended