帰 ってきた c++

64
帰帰帰帰帰 C++ CommunityOpenDay2013 2013/5/11 Sat Room metro 帰帰 帰帰帰

Upload: lucien

Post on 16-Feb-2016

126 views

Category:

Documents


0 download

DESCRIPTION

帰 ってきた C++. CommunityOpenDay2013 2013/5/11 Sat Room metro 大阪 遥佐保. はじめに. 自己紹介. @ hr_sao 名前と経歴 を 言う 出没コミュニティ Room metro (大阪) ExceptionalC ++ 読書会(大阪 ) SQLWorld (大阪). 本日 の 目的. VisualStudio2012 の C++ 関連の 理解度 を深める. Topics. 0. C++ とその周りの歴史 C++ separate programing categories - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: 帰 ってきた C++

帰ってきた C++CommunityOpenDay20132013/5/11 Sat

Room metro 大阪 遥佐保

Page 2: 帰 ってきた C++

はじめに

Page 3: 帰 ってきた C++

@hr_sao名前と経歴を言う出没コミュニティ• Room metro (大阪)• ExceptionalC++ 読書会(大阪)• SQLWorld (大阪)

自己紹介

Page 4: 帰 ってきた C++

VisualStudio2012 のC++ 関連の

理解度を深める

本日の目的

Page 5: 帰 ってきた C++

0. C++ とその周りの歴史1. C++ separate programing categories2. Windows application – UI3. How can you use Visual Studio 2012?4. Windows store apps – C++/CX5. How to learn C++/CX-. Welcome back to Windows Phone

Topics

Page 6: 帰 ってきた C++

0. C++ とその周りの歴史

Page 7: 帰 ってきた C++

‘00~‘90~‘80~‘70~‘60~

C/C++ の歴史Simula

BCPL

B

K&L C

Classic C

C with Classes

C89 C99

Early C++

ARM C++

C++98

C++03

C++11

Page 8: 帰 ってきた C++

より上位の高級言語を目指した Java と C#Web 系言語の登場  … > どうみても押され気味 ?

90 年代以降をよく見て見る

‘00~‘90~

Java

Python

RubyPHP

JavaScript

C#D

Silverlight

C++は’98に ISO標準化委員会に管理される

Page 9: 帰 ってきた C++

‘00~

iOS と Android が登場• ナローバンドでの利用前提• Web 画面遷移の操作感の限界   クライアント側に情報を!

2000 年後半にスマートフォンの登場’07

iOS’08

Android

’05 Windows Mobile

UIとロジックの分離(流行った)

とにかく操作感良く!

Page 10: 帰 ってきた C++

http://isocpp.org/std/statusRecently Published: C++11 (2011)

Page 11: 帰 ってきた C++

いったん Web に走ったみんなの気持ちがクライアントサイド ( ネイティブ ) に戻ってきた…!C++11 規格をひっさげてVisualStudio2012 が通りますよっ

Welcome back to C++

Page 12: 帰 ってきた C++

1. Portability     Linux と Windows で同じコードを動かす

2. Reusability    既存ライブラリ使いたい

3. Performance     .NET がリッチすぎる

Now… use cases for C++

Page 13: 帰 ってきた C++

1. C++ separate programing categories

Page 14: 帰 ってきた C++

プログラミングのカテゴリが 3 つある• C 言語を使う• Class を使う• Template を使うC++ Primer Plus (6th Edition) http://www.amazon.com/Primer-Plus-6th-Developers-Library/dp/0321776402

Day 1 Keynote - Bjarne Stroustrup: C++11 Style http://channel9.msdn.com/Events/GoingNative/GoingNative-2012/Keynote-Bjarne-Stroustrup-Cpp11-Style

C++ の世界

Page 15: 帰 ってきた C++

手続き型言語• 開発効率が高いとは言えないがシンプル• 実行速度が速く、サイズも小さい  ↑↑↑もちろん作り方に依存するが、普通はそうなるfunction と struct の世界macros / void* / casts の多用スキルが身についてしまう

C 言語の世界

Page 16: 帰 ってきた C++

C 言語にプラスされたオブジェクト指向言語   struct にもっと機能を入れたなどなど private / operator overload / inheritance / interface / exception / virtual functions …

• C 言語よりは開発効率は上がる  ↑↑↑もちろん作り方に依存するが、普通はそうなるC++85 style ( C with Classes)

class の世界

Page 17: 帰 ってきた C++

ジェネリック / メタプログラミングが可能 データの型には依存せず 任意 Object を格納できるコンテナ  クラス・関数テンプレート / 特殊化 / テンプレートパラメータ…• 型・数値の差し替え、型推論でコーディング量の減少が可能に• その他応用例も多数

template の世界

いつでもどこでもTemplate(^^)

Page 18: 帰 ってきた C++

sample: C style and C++11// for-loopsum = 0;for( vector<int>size_type i = 0; i < v.size(); i ++ ){

sum += v [ i ];}// for_each + lambdasum = 0;for_each( v.begin(), v.end(), [&sum]( int x ) { sum += x; });

Page 19: 帰 ってきた C++

例えば、 C 言語を使う人の本音は• マクロだけで頑張るのはホントは辛い• ポインタを安全に使いたい、頑張ってるけどさ• エラー処理を確実にしたい、頑張ってるけどさ• もっと便利な機能を使いたい!

そこでCの拡張です!

Why Language Extensions?

Page 20: 帰 ってきた C++

例えば、 Windows で C++ を使う人の本音は• ファイルの操作、もっと楽に出来ないのかなぁ• 表示といえば、 MFC/DirectX/GDI… なんでこんなにコーディング量多いの… (  ̄ д  ̄ )  エー• いつも「それ C# がよしなにやってくれるよ」と言われる• Java/C# 使いたくない!!

そこでC++の拡張です!

Why Language Extensions? part2

Page 21: 帰 ってきた C++

C++ 言語の拡張  Visual C++ コンポーネント拡張のことを指すWindows ストアアプリの作成用※ ストアアプリ以外でも利用可能

C++/CX

Page 22: 帰 ってきた C++

2. Windows application - UI

Page 23: 帰 ってきた C++

Programing modelDesktop apps

CC++

Win32

C#VB

.NET SL

HTMLJavaScript

Internet Explorer

Windows store apps

Windows Kernel Services

Communication & Data

Devices & Printing

WinRT APIs

Graphics & Media

Application Model

XAML

JavaScript

HTML / CSSC

C++C#VB

DirectX

Page 24: 帰 ってきた C++

C#/VB.NET での UI の表現Windows apps - C#/VB.NET

XAML

C#/VB.NET - .netframework

XNAWinForm

Page 25: 帰 ってきた C++

JavaScript UIWindows apps - JavaScript

JavaScript

HTMLJSIL.NET base

Browser Enchant Moon

PhoneGapEtc…

Page 26: 帰 ってきた C++

C++ から見ると簡単に表現する方法が増えた!Windows apps - C++

XAML

C/C++

DirectX

GDI

MFC WinRTnaitiveWTL

OpenGL

Page 27: 帰 ってきた C++

3. How can you use Visual Studio 2012?

Page 28: 帰 ってきた C++

Store apps Desktop

Visual Studio 2012 の C++ の世界

Windows8

DirectX

Windows  Phone8

DirectX apps for phone

XAML for C++

WRL WTLMFC

Page 29: 帰 ってきた C++

Windows ストアアプリで COM コンポーネントなどローレベルアクセスを行う Template Library → WindowsRuntime は使わずATL で記述された COM コンポーネントを簡単に移植、操作可能WTL:Windows Template Library – ATL:Active Template Library という COM プログラミングを簡単にするためのテンプレートベースのライブラリ、ダイアログ、フレーム、 GDI などなど ,MFC より軽い

Windows Runtime C++ Template Library (WRL)

Page 30: 帰 ってきた C++

DirectX機能レベル ShaderModelD3D_FEATURE_LEVEL_9_1 2.0D3D_FEATURE_LEVEL_9_2 2.0D3D_FEATURE_LEVEL_9_3 2.0D3D_FEATURE_LEVEL_10_0 4.0D3D_FEATURE_LEVEL_10_1 4.1D3D_FEATURE_LEVEL_11_0 5.0D3D_FEATURE_LEVEL_11_1 5.0

XP

Vista

Win7

Win8

WP8

WindowsRT

RT なら Feature Levelは「 D3D_FEATURE_LEVEL_9_1 」ベース

Windows環境にビデオやサウンドなどのマルチメディア機能を提供するための APIWindows ストアアプリは、 DirectX11.1 の書き方のみ

Page 31: 帰 ってきた C++

C++/CXC#/VB.NET と同様の UI 表現 -XAML が利用可能XML ベースで UI を表現する<Grid> <Button x:Name=“btn00” Content=“ 押してね“ Click="btn00_Click"/> <TextBox x:Name="txt00" Text="何が出るかな? " FontSize="36"/></Grid>

XAML for C++

Page 32: 帰 ってきた C++

4. Windows store apps – C++/CX

Page 33: 帰 ってきた C++

Build の流れ – C++編WinRT:Windows ストア Apps のプロジェクトファイルなんとなく触れそうなファイルは3つ

MainPage.xaml

MainPage.cpp

MainPage.h

Page 34: 帰 ってきた C++

Windows store apps – C++ buildMainPage.xa

mlMainPage.xaml.c

ppMainPage.xaml.h

AutoGenerate

d

MainPage.xaml

MainPage.g.hpp

MainPage.g.h

見慣れないソースコードがしれっと自動生成されます

Page 35: 帰 ってきた C++

<Button x:Name="btn00" Content="Cleck me :)"/>

XAML Obj を利用可能な pointer にvoid ::StoreApp1::MainPage::InitializeComponent(){ …btn00 = safe_cast<::Windows::UI::Xaml::Controls::Button^>

(static_cast<Windows::UI::Xaml::IFrameworkElement^>

(this)->FindName(L"btn00"));… }

MainPage.g.hpp

MainPage.xaml

Page 36: 帰 ってきた C++

WinRT C++ Build process出典: Visula C++ Team Blog - Connecting C++ and XAMLhttp://blogs.msdn.com/b/vcblog/archive/2012/08/24/10343401.aspx

Page 37: 帰 ってきた C++

.winmd ファイルのおかげ WinRT のクラス名やメソッド名などのメタデータが入っているファイル.NET, C++, javaScript が共通で理解できる → *.lib ファイルに似てます! → .NET アセンブリと同じ (binary format)

*.winmdファイルがVisualStudioでコンパイルする時にWinRTのDLLの場所を教えてくれる

Page 38: 帰 ってきた C++

Windows meta data.winmd ファイル  C:\Windows\System32\WinMetadata フォルダ 

Page 39: 帰 ってきた C++

C:\Windows\System32 の下にあるよ Windows.○○○.dll

WinRT の実体実体は

DLLだったんですね!!

Page 40: 帰 ってきた C++

良い感じにマップしてくれる例Windows::Foundation の HSTRINGハンドルは…

C++/CX が Windows メタデータ (.winmd) ファイルを読み取ると…

言語 HSTRING のマップC++/CX Platform::String

classJavaScript String objectC#/VB.NET System.String

class

Page 41: 帰 ってきた C++

WinRT は API単なるインタフェース 実体は DLLDesktop apps

CC++

Win32

C#VB

.NET SL

HTMLJavaScript

Internet Explorer

Windows store apps

Windows Kernel Services

Communication & Data

Devices & Printing

WinRT APIs

Graphics & Media

Application Model

XAML

JavaScript

HTML / CSSC

C++C#VB

DirectX

デスクトップ C++からも呼べるよ※ XAML/HTML系以

Page 42: 帰 ってきた C++

• Windows Runtime   C#, VB, C++ に提供されている API   UI 関係は Windows.UI.Xaml (★)• Windows Library for JavaScript   JavaScript API ( 各種コントロール、 CSS )  (★)に相当するのは WinJS 名前空間

Windows ストアアプリのWindowsAPI

Page 43: 帰 ってきた C++

デスクトップアプリからもWindowsRuntime 利用可能Win32 コンソールアプリケーション作成int main( Platform::Array<Platform::String^>^ argv )コンパイルオプション /ZW つける、 /Gm- を外す.winmd ファイルを 2 つ参照追加• Windows.winmd - C:\Program Files (x86)\Windows Kits\8.0\References\CommonConfiguration\

Natural

• Platform.winmd - C:\Program Files (x86)\Microsoft SDKs\Windows\8.0\ExtensionsSDKs\Microsoft.VCLibs\11.0\References\CommonConfiguration\natural

Page 44: 帰 ってきた C++

5. How to learn C++/CX

Page 45: 帰 ってきた C++

C++/CX を学習する• WinRT API が利用可能  →ネイティブライブラリ、 XAML が利用可能• DirectX の利用可能• 純粋にネイティブアプリ – WRL 利用可能• XAML からの DirectX 利用可能   →最初はいいと思ったけど後で良いかも

XAMLオブジェクトの

中が DirectXの世界

Page 46: 帰 ってきた C++

今、 C#/VB.net で作っている人 そのまま、 C# で書けばいいよ! C++ や DLL を呼び出す部分は完備されてますl

Why do we use C++?

でも、勘違いしないで!!

Page 47: 帰 ってきた C++

今までは C#/VB.NET でしかできなかった(仕方ない)XAML 系での最終表現の形態がそれしかなかった

Why do we use C++?

でも、今は違います!!

Page 48: 帰 ってきた C++

WinRT における C++ の土俵  C# が出来ることと全く同じことが可能  C# で出来るから C# を利用する時代ではない

Why do we use C++?

表現出来る土表は全て整っている

Page 49: 帰 ってきた C++

C++ プログラマにC++/CX つまり Windows ストアアプリを作るための情報が必要に行きわたっていないこと正しい C++ での Windows ストアアプリの使い方を伝えていないことにある(だって XAML 系の使い方に慣れてるのは C#/VB.NET 系ユーザなんだから、仕方ないでしょ)

問題は…

Page 50: 帰 ってきた C++

MSDN : C++ を使った Windows ストア アプリのためのロードマップhttp://msdn.microsoft.com/ja-jp/library/windows/apps/xaml/hh700360.aspx

Windows ストアアプリのための C++ 情報まとめ• concurrency::create_async …• task – then(), when_all() …• casablanca – C++ REST SDK bindings to HTTP,

JSON, and URIs

ストアアプリで C++ を選択したら…

Page 51: 帰 ってきた C++

http://hilo.codeplex.com/C++ と XAML を利用するための実践的サンプル

HiloWindows7の時は DirectXでした

今は C++/XAML版と、 JavaScript版があるよ

Page 52: 帰 ってきた C++

• Windows 8• Microsoft Visual Studio 2012• C++ と XAML のプログラミングに対する関心 → C++ と異なり、 XAML は UI を宣言型で書ける

Hilo 利用の前提条件

Page 53: 帰 ってきた C++

• UX の設計• 非同期プログラミング パターンとヒント• タイルとスプラッシュ画面の操作• Model-View-ViewModel (MVVM) パターン使用• リポジトリ パターンの使用• ページの作成とページ間の移動• コントロールの使用• タッチの使用

Hilo で学べること

• 中断、再開、アクティブ化の処理• パフォーマンスの向上• Windows ストア アプリのテストと展開

Page 54: 帰 ってきた C++

初心者向け表記巨大なリンク集&プログラム解説http://msdn.microsoft.com/ja-jp/library/windows/apps/jj160316.aspx

Page 55: 帰 ってきた C++

C++/CX プログラミングノウハウHilo

Page 56: 帰 ってきた C++

task チェーン – 処理流れ、チェーンの取り消しHilo

Page 57: 帰 ってきた C++
Page 58: 帰 ってきた C++

Hilo で Windows ストアアプリの作り方を覚えたら、次は通信がしたくなる http://casablanca.codeplex.com/

Casablanca – C++ REST SDK

Page 59: 帰 ってきた C++

• REST サービス (Windows Vista/7/8, Linux)    VS2010/2012, クラウドベースの通信サポート• 非同期処理、ストリームバッファ• HTTP Client• C++11 base• Apache オープンソース

Casablanca とは

Azureなど

Page 60: 帰 ってきた C++

-. Welcome back to Windows Phone

Page 61: 帰 ってきた C++

Windows Phone8 の C++ サポートVC++ 2012Windows8 と同じコードで OKC++11 ベースDirectX ( XAML は利用できない )

Using C++ in your Windows Phoen Apps

Page 62: 帰 ってきた C++

summary

Page 63: 帰 ってきた C++

• クライアントサイドアプリケーション復権   C++ ネイティブコード• C++11 規格  拡張 C++/CX• XAML での表現力• Windows Runtime は API• XAML × C++ の学習 Hilo / Casablanca

まとめ

Page 64: 帰 ってきた C++

これからもC++ でアプリケーションを作りましょう

そのための道はマイクロソフトが全て用意してくれています