Upload
lucien
View
126
Download
0
Embed Size (px)
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
Citation preview
帰ってきた C++CommunityOpenDay20132013/5/11 Sat
Room metro 大阪 遥佐保
はじめに
@hr_sao名前と経歴を言う出没コミュニティ• Room metro (大阪)• ExceptionalC++ 読書会(大阪)• SQLWorld (大阪)
自己紹介
VisualStudio2012 の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
0. 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
より上位の高級言語を目指した Java と C#Web 系言語の登場 … > どうみても押され気味 ?
90 年代以降をよく見て見る
‘00~‘90~
Java
Python
RubyPHP
JavaScript
C#D
Silverlight
C++は’98に ISO標準化委員会に管理される
‘00~
iOS と Android が登場• ナローバンドでの利用前提• Web 画面遷移の操作感の限界 クライアント側に情報を!
2000 年後半にスマートフォンの登場’07
iOS’08
Android
’05 Windows Mobile
UIとロジックの分離(流行った)
とにかく操作感良く!
http://isocpp.org/std/statusRecently Published: C++11 (2011)
いったん Web に走ったみんなの気持ちがクライアントサイド ( ネイティブ ) に戻ってきた…!C++11 規格をひっさげてVisualStudio2012 が通りますよっ
Welcome back to C++
1. Portability Linux と Windows で同じコードを動かす
2. Reusability 既存ライブラリ使いたい
3. Performance .NET がリッチすぎる
Now… use cases for C++
1. C++ separate programing categories
プログラミングのカテゴリが 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++ の世界
手続き型言語• 開発効率が高いとは言えないがシンプル• 実行速度が速く、サイズも小さい ↑↑↑もちろん作り方に依存するが、普通はそうなるfunction と struct の世界macros / void* / casts の多用スキルが身についてしまう
C 言語の世界
C 言語にプラスされたオブジェクト指向言語 struct にもっと機能を入れたなどなど private / operator overload / inheritance / interface / exception / virtual functions …
• C 言語よりは開発効率は上がる ↑↑↑もちろん作り方に依存するが、普通はそうなるC++85 style ( C with Classes)
class の世界
ジェネリック / メタプログラミングが可能 データの型には依存せず 任意 Object を格納できるコンテナ クラス・関数テンプレート / 特殊化 / テンプレートパラメータ…• 型・数値の差し替え、型推論でコーディング量の減少が可能に• その他応用例も多数
template の世界
いつでもどこでもTemplate(^^)
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; });
例えば、 C 言語を使う人の本音は• マクロだけで頑張るのはホントは辛い• ポインタを安全に使いたい、頑張ってるけどさ• エラー処理を確実にしたい、頑張ってるけどさ• もっと便利な機能を使いたい!
そこでCの拡張です!
Why Language Extensions?
例えば、 Windows で C++ を使う人の本音は• ファイルの操作、もっと楽に出来ないのかなぁ• 表示といえば、 MFC/DirectX/GDI… なんでこんなにコーディング量多いの… (  ̄ д  ̄ ) エー• いつも「それ C# がよしなにやってくれるよ」と言われる• Java/C# 使いたくない!!
そこでC++の拡張です!
Why Language Extensions? part2
C++ 言語の拡張 Visual C++ コンポーネント拡張のことを指すWindows ストアアプリの作成用※ ストアアプリ以外でも利用可能
C++/CX
2. Windows application - UI
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
C#/VB.NET での UI の表現Windows apps - C#/VB.NET
XAML
C#/VB.NET - .netframework
XNAWinForm
JavaScript UIWindows apps - JavaScript
JavaScript
HTMLJSIL.NET base
Browser Enchant Moon
PhoneGapEtc…
C++ から見ると簡単に表現する方法が増えた!Windows apps - C++
XAML
C/C++
DirectX
GDI
MFC WinRTnaitiveWTL
OpenGL
3. How can you use Visual Studio 2012?
Store apps Desktop
Visual Studio 2012 の C++ の世界
Windows8
DirectX
Windows Phone8
DirectX apps for phone
XAML for C++
WRL WTLMFC
Windows ストアアプリで COM コンポーネントなどローレベルアクセスを行う Template Library → WindowsRuntime は使わずATL で記述された COM コンポーネントを簡単に移植、操作可能WTL:Windows Template Library – ATL:Active Template Library という COM プログラミングを簡単にするためのテンプレートベースのライブラリ、ダイアログ、フレーム、 GDI などなど ,MFC より軽い
Windows Runtime C++ Template Library (WRL)
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 の書き方のみ
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++
4. Windows store apps – C++/CX
Build の流れ – C++編WinRT:Windows ストア Apps のプロジェクトファイルなんとなく触れそうなファイルは3つ
MainPage.xaml
MainPage.cpp
MainPage.h
Windows store apps – C++ buildMainPage.xa
mlMainPage.xaml.c
ppMainPage.xaml.h
AutoGenerate
d
MainPage.xaml
MainPage.g.hpp
MainPage.g.h
見慣れないソースコードがしれっと自動生成されます
<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
WinRT C++ Build process出典: Visula C++ Team Blog - Connecting C++ and XAMLhttp://blogs.msdn.com/b/vcblog/archive/2012/08/24/10343401.aspx
.winmd ファイルのおかげ WinRT のクラス名やメソッド名などのメタデータが入っているファイル.NET, C++, javaScript が共通で理解できる → *.lib ファイルに似てます! → .NET アセンブリと同じ (binary format)
*.winmdファイルがVisualStudioでコンパイルする時にWinRTのDLLの場所を教えてくれる
Windows meta data.winmd ファイル C:\Windows\System32\WinMetadata フォルダ
C:\Windows\System32 の下にあるよ Windows.○○○.dll
WinRT の実体実体は
DLLだったんですね!!
良い感じにマップしてくれる例Windows::Foundation の HSTRINGハンドルは…
C++/CX が Windows メタデータ (.winmd) ファイルを読み取ると…
言語 HSTRING のマップC++/CX Platform::String
classJavaScript String objectC#/VB.NET System.String
class
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系以
外
• Windows Runtime C#, VB, C++ に提供されている API UI 関係は Windows.UI.Xaml (★)• Windows Library for JavaScript JavaScript API ( 各種コントロール、 CSS ) (★)に相当するのは WinJS 名前空間
Windows ストアアプリのWindowsAPI
デスクトップアプリからも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
5. How to learn C++/CX
C++/CX を学習する• WinRT API が利用可能 →ネイティブライブラリ、 XAML が利用可能• DirectX の利用可能• 純粋にネイティブアプリ – WRL 利用可能• XAML からの DirectX 利用可能 →最初はいいと思ったけど後で良いかも
XAMLオブジェクトの
中が DirectXの世界
今、 C#/VB.net で作っている人 そのまま、 C# で書けばいいよ! C++ や DLL を呼び出す部分は完備されてますl
Why do we use C++?
でも、勘違いしないで!!
今までは C#/VB.NET でしかできなかった(仕方ない)XAML 系での最終表現の形態がそれしかなかった
Why do we use C++?
でも、今は違います!!
WinRT における C++ の土俵 C# が出来ることと全く同じことが可能 C# で出来るから C# を利用する時代ではない
Why do we use C++?
表現出来る土表は全て整っている
C++ プログラマにC++/CX つまり Windows ストアアプリを作るための情報が必要に行きわたっていないこと正しい C++ での Windows ストアアプリの使い方を伝えていないことにある(だって XAML 系の使い方に慣れてるのは C#/VB.NET 系ユーザなんだから、仕方ないでしょ)
問題は…
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++ を選択したら…
http://hilo.codeplex.com/C++ と XAML を利用するための実践的サンプル
HiloWindows7の時は DirectXでした
今は C++/XAML版と、 JavaScript版があるよ
• Windows 8• Microsoft Visual Studio 2012• C++ と XAML のプログラミングに対する関心 → C++ と異なり、 XAML は UI を宣言型で書ける
Hilo 利用の前提条件
• UX の設計• 非同期プログラミング パターンとヒント• タイルとスプラッシュ画面の操作• Model-View-ViewModel (MVVM) パターン使用• リポジトリ パターンの使用• ページの作成とページ間の移動• コントロールの使用• タッチの使用
Hilo で学べること
• 中断、再開、アクティブ化の処理• パフォーマンスの向上• Windows ストア アプリのテストと展開
初心者向け表記巨大なリンク集&プログラム解説http://msdn.microsoft.com/ja-jp/library/windows/apps/jj160316.aspx
C++/CX プログラミングノウハウHilo
task チェーン – 処理流れ、チェーンの取り消しHilo
Hilo で Windows ストアアプリの作り方を覚えたら、次は通信がしたくなる http://casablanca.codeplex.com/
Casablanca – C++ REST SDK
• REST サービス (Windows Vista/7/8, Linux) VS2010/2012, クラウドベースの通信サポート• 非同期処理、ストリームバッファ• HTTP Client• C++11 base• Apache オープンソース
Casablanca とは
Azureなど
-. Welcome back to Windows Phone
Windows Phone8 の C++ サポートVC++ 2012Windows8 と同じコードで OKC++11 ベースDirectX ( XAML は利用できない )
Using C++ in your Windows Phoen Apps
summary
• クライアントサイドアプリケーション復権 C++ ネイティブコード• C++11 規格 拡張 C++/CX• XAML での表現力• Windows Runtime は API• XAML × C++ の学習 Hilo / Casablanca
まとめ
これからもC++ でアプリケーションを作りましょう
そのための道はマイクロソフトが全て用意してくれています