Presentation is loading. Please wait.

Presentation is loading. Please wait.

Christophe Pichaud Microsoft Architect Sogeti France

Similar presentations


Presentation on theme: "Christophe Pichaud Microsoft Architect Sogeti France"— Presentation transcript:

1 Christophe Pichaud Microsoft Architect Sogeti France
3/31/ :31 PM APP – SAC – TOOL Windows 8 BUILD Best-Of Christophe Pichaud Microsoft Architect Sogeti France © 2010 Microsoft Corporation. All rights reserved. Microsoft, Windows, Windows Vista and other product names are or may be registered trademarks and/or trademarks in the U.S. and/or other countries. The information herein is for informational purposes only and represents the current view of Microsoft Corporation as of the date of this presentation. Because Microsoft must respond to changing market conditions, it should not be interpreted to be a commitment on the part of Microsoft, and Microsoft cannot guarantee the accuracy of any information provided after the date of this presentation. MICROSOFT MAKES NO WARRANTIES, EXPRESS, IMPLIED OR STATUTORY, AS TO THE INFORMATION IN THIS PRESENTATION.

2 Metro Apps Start, Suspend…

3 Process lifetime walkthrough
App 1 App 2 App 3 App N Running Apps suspend after a short delay Apps resume instantly from suspend Suspended App terminated under memory pressure without notification Terminated

4 Introducing suspend System resources focused on app user is interacting with in the foreground Inactive apps have no impact on battery life or responsiveness, they are suspended by the OS Enables instant switching between apps!

5 Apps do not get notified when they are getting terminated
Termination happens System needs more memory User switch occurs System shutdown Apps crash Apps do not get notified when they are getting terminated

6 Process state transitions
App gets 5s to handle suspend App is not notified before termination Running App suspending Suspended App Terminated App User Launches App Low Memory resuming Apps are notified when they have been resumed Splash screen Code gets to run No code runs App not running

7 Suspend under the hood Suspended apps are not scheduled by the NT Kernel No CPU, Disk or Network consumed All threads are suspended Apps remain in memory Kernel ensures apps are not suspended in critical sections that could cause system wide deadlocks Apps instantly resumed from suspend when brought to foreground

8 App Activation Through Contracts
Apps are activated through contracts Launch, search, ShareTarget, etc. Apps need to initialize contract specific actions Context is provided Running App launch shareTarget activated kind search

9 App crash? Start over Apps that are stuck are no fun
Your app can be terminated abruptly in any of these cases Too long to load Too long to suspend Stopped handling input messages (Blocking I/O on UI thread) Task manager Bring the user back home, and ignore saved user session state previousExecutionState is provided in activation event args

10 Use live tiles to appear running
Your app’s tile is an opportunity to provide value to users even when they are not using your app Gives the user the sense that there is something going on with your app, and is an invitation to go back Two mechanisms available to update tiles on the Start screen

11 Lock screen apps Apps that can run in the background
Designed for real-time communications apps (Mail, IM, VoIP) Maintain TCP sockets in the background Run code periodically Run code in response to system events (user login)

12 Metro Style Apps connected

13 Review app process lifetime
Running App Suspended App Terminated App Suspending Low Memory Resuming

14 RTC trigger APIs for your apps
OS VoIP IM Mail Network Trigger System Trigger Time Trigger Background Task Infrastructure

15 Key points Longer Battery Life Always Reachable Apps

16 Recap

17 WinRT APIs for Metro style apps
User Interface HTML5 / CSS XAML DirectX Controls Data Binding SVG Tiles Input Accessibility Printing Devices Communications & Data Geolocation Printer NFC Contracts XML Web Sensors Portable Devices Networking Notifications Streams Media Local & Cloud Storage AtomPub Capture Visual Effects Background Transfer SMS PlayTo Transcoding Fundamentals App Lifetime Authentication Cryptography Globalization .NET Win32

18 APIs make it simple to build Metro style apps
User Interface HTML5 / CSS XAML DirectX Controls Data Binding SVG Tiles Input Accessibility Printing Devices Communications & Data Geolocation Printer NFC Contracts XML Web Sensors Portable Devices Networking Notifications Streams Media Local & Cloud Storage AtomPub Capture Visual Effects Background Transfer SMS PlayTo Transcoding Fundamentals Authentication Cryptography Globalization .NET Win32 App Lifetime

19 APIs make it simple to build Metro style apps
HTTP APIs RSS AtomPub IXHR HttpClient Atom WCF XHR HttpWebRequest Web services Data APIs Skydrive Live ID Json XML Streams Xbox Live Azure DataReader/DataWriter Information APIs Background APIs Network Information Cost Cost Download Upload RTC Push Notification Socket APIs TCP sockets UDP sockets SSL sockets Web Sockets Proximity sockets

20 Using DirectX in Metro style apps
App initialization CoreApplication & CoreWindow Handling events Pointer, gestures, keyboard Resource creation GPU & CPU resources Rendering

21 What is the Windows Runtime?

22 Windows Kernel Services
Metro style Apps Desktop Apps View XAML HTML / CSS HTML JavaScript Model Controller C/C++ C#, VB JavaScript (Chakra) C C++ C# VB Windows Runtime APIs Communication & Data Graphics & Media Devices & Printing System Services Application Model Internet Explorer Win32 .NET SL Kernel Windows Kernel Services

23 Windows Runtime Architecture
Metro style app Language Support (CLR, WinJS, CRT) Language Projection Windows Metadata & Namespace UI Pickers Controls Media Web Host (HTML, CSS, JavaScript)) XAML Storage Network Windows Runtime Core Runtime Broker Windows Core

24 Design Principles Major improvement to developer experience
Great intellisense & tooling Responsive and Fluid Async APIs where they are needed App-Centric Platform Well managed app-to-app contracts Platform based Versioning Apps keep running on future Windows versions

25 Windows Metadata Concise, complete description of the Windows Runtime
Generated natively from C++ or C#/VB Compiler Efficient binary format derived CLI Metadata Same structures, different meanings Rich enough to allow multi-language projection generation Full intellisense on statically known information

26 The Windows Namespace Windows.* Runtime objects are in a simple, unified, hierarchical namespace Great intellisense and browsing in Visual Studio One Clear type for each function Catalog is extensible but private Your apps can add objects (in C++/C#) Objects can be seen from JavaScript

27 Windows Runtime Basic Types
Strings HSTRING Avoids copying in multiple languages Basic Types INT32, UINT64 * Pointers allowed in limited cases Enumerations enum AsyncStatus Flag or non-flag styles Structures struct Rect; Can contain strings, but not interfaces Simple Arrays INT32 [] For very basic collections Interfaces IInspectable Methods are defined in interfaces Generic Interfaces IVector<T> Type-generic interface Runtime Class Windows.Storage.StorageFile Binds interfaces to make a class

28 What is a Windows Runtime Object?
Shell32.dll IInspectable IUnknown Object IStorageItemInformation IStorageItem FileInformation Runtime Class IStorageFile Interfaces Activation Store (Registry) Windows Metadata (Disk)

29 Projections IInspectable IUnknown Projection C++ App Projection
Object Projection CLR C#/VB App Projection Chakra HTML App Windows Metadata

30 Object Creation Start App asks to create object
Pass Name to RoActivateInstance Find DLL using Catalog Load DLL Call DllGet-ActivationFactory Object created by implementation code IInspectable returned Projection creates wrapper (using metadata) Object bound to wrapper Wrapper returned to App End App Projection WinRT Object Manager WinRT Object

31 Versioning IInspectable IInspectable IUnknown IUnknown Future Windows
Object Object Windows Metadata v8 Projection App Windows Metadata v9 Projection App

32 Windows Runtime Patterns
Collections IVector<T>, IVectorView<T>, IMap<T> Iterators, Collections and events cross-language Delegates delegate AsyncActionCompletedHandler Encapsulate the context to call back to an object Events IApplicationLayout::LayoutChanged Lists of callback recipients PropertySet interface IPropertySet Collection of items with varying types Async Interface ReceivePropertiesOperation A way to get a delayed result without blocking Contracts Windows.ApplicationModel. DataTransferManager Connect Apps to Windows Extension Points

33 Associative Collection
Collections IInspectable STL-style Projection C++ App IUnknown Array IVector<T> IVectorView<T> IEnumerable (T) style Projection CLR C#/VB App IObservableVector<T> IInspectable Chakra JavaScript Projection HTML App IUnknown Associative Collection IMap<T> IMapView<T> IObservableMap<T>

34 Asynchronous Objects Basic requirement for Metro style apps
Always responsive, ready “Long running” APIs must be delivered as async Simpler to allow apps to make synchronous calls But then bad apps can overwhelm quality of system Instead, build async into API shape And have language projections integrate it deeply

35 Threading Main UI Thread Threadpool App Code App Code App Code App
Windows UI Object Windows Object Windows Object App Code App Code App Code

36 Windows Runtime Threading
Three main types of object Thread bound – works only on the thread where it was created – most UI Thread flexible – works on any thread, uses locking if needed to control simultaneous access Brokered – out of process UI runs in single threaded environment that is not reentrant (“ Application STA”) Callbacks can only enter if they are related to an outgoing call Most non-UI runs in any thread

37 Brokered Objects IInspectable IUnknown Projection App
RuntimeBroker.exe Proxy App Projection IInspectable IUnknown Windows Runtime Object

38 Inside WinRT

39 The Windows Runtime is fundamental to Metro style apps.

40 WinRT registration catalogs
Install Extension Catalog Class Catalog Extension 1 Runtime Class “A” Launch Contract Extension 2 Runtime Class “B” Search Contract Extension 3 Runtime Class “C”

41 Extension Registrations
WinRT registration Install Extension Registrations Several OS supported contracts Extensions are contract implementation Extensions map the abstract to the concrete Class Registrations Classes are concrete implementations Contains information to activate and run code

42 Deployment pipeline Install Application Manifest Deployment Engine
Extension Catalog Application Manifest <Applications> <Application Id="App" StartPage="default.html"> <VisualElements DisplayName="Hello World" Logo="images\logo.png" Description="Hello_World" .... Deployment Engine Class Catalog

43 Tapping a tile Tap The OS stores the extension’s identification during install The OS queries the extension catalog to find the extension The OS activates the extension via WinRT

44 Finding the right extension
Tap Explorer.exe Extension Catalog Query Activation System Class Catalog Investigate Activate

45 Activating the extension
Tap Explorer.exe RPCSS Activation System Activate Application.exe Class Catalog DCOM Launch

46 Running the app Run RPCSS Register MTA Run Query Class Catalog
Application.exe RPCSS Register MTA main() { ... } Run Query Class Catalog

47 Completing app activation
Run Explorer.exe Complete Activation Activation System Instance Activate App RPCSS Application.exe Instance App Callback App Code

48 Application object Run MTA STA #1 Run Run STA #2 Activate Register
Application.exe MTA STA #1 Application Code Application Code Run Run STA #2 Activate Application Code Register

49 WinRT APIs Foundations

50 Windows Runtime APIs Available to all programming languages
JavaScript C#/VB C++ Available to all programming languages Requires a language neutral type system

51 Numeric types Behave differently in .NET/C++ compared to JavaScript
C++/.NET - Signed, Unsigned; 8, 16, 32, 64 bit int; 32, 64 bit float JavaScript – double-precision 64-bit binary format IEEE 754 value Windows Runtime – Same as C++/.NET without signed 8-bit integer But… Operating system uses 64-bit integers in some places file sizes, position, etc. JavaScript number can only represent 53 bits of precision

52 Numeric types ECMAScript (ECMA-262) Standard
Requires numbers treated as IEEE bit floating point values JavaScript applications using the Chakra runtime cannot accurately determine the values of some 64-bit integers But such values can be received from and passed back to WinRT APIs Many (most) values will work fine Use caution with 64 bit values whose absolute value is greater than 2^53 (9,007,199,254,740,992)

53 Strings Immutable or mutable? Null
Immutable – JavaScript, .NET; Mutable – C++ Null JavaScript: null is an object, string is a type C++: std::string has no 'null' semantics .NET System.String: reference type has a 'null' distinguished value Windows Runtime: string's immutable, no null representation

54 Structures Handled differently by languages As a result…
C++/CLR: Structures are value types, can contain all types JavaScript: Has no structure construct but structures can be simulated Windows Runtime supports structures, with restrictions on content Can only contain numbers, strings or structures Windows Runtime structures cannot contain pointers Windows Runtime structures are value types As a result… Structure valued property behavior differs in languages

55 References & pointers Target languages handle pointers and references differently C++: All types can be passed by value or by reference .NET: Objects are passed by reference, value types by value JavaScript: Objects passed by reference, numbers passed by value Windows Runtime: Objects (Interfaces) passed by reference, all other types passed by value As a result… Method parameters are [in] or [out], never [in, out]

56 Arrays Reference or value types? Windows Runtime
JavaScript, .NET, C++: Reference types Windows Runtime Arrays are value types so marshal by value ONLY WHEN they are marshaled!

57 Events Event syntax differs across languages Be aware…
C++/CLR – Clients add events with += operator JavaScript – Clients add events with either the addEventListener function or by setting the “on<eventname>” property on the object. Be aware… JavaScript event name casing is all lowercase Assigning to the property implies one listener while addEventListener allows multiple listeners Misspelling the event name in either case silently fails

58 Collections Windows Runtime collections are relatively straightforward
Vectors – similar to array, projected with array syntax Maps – key/value pairs, projected as dictionary to CLR apps Surprise… Because collection value accesses require a method call, they can be unexpected performance bottlenecks Can use the GetMany method for bulk retrieval

59 Method overloading Two criteria used when handling overloads
Overload on number of params (arity) JavaScript, .NET, C++ all distinguish methods by arity Overload on parameter type .NET, C++ all distinguish methods by type of parameters JavaScript has a limited notion of type Windows Runtime methods Overload on arity but not on type

60 Asynchronous APIs Platform design goal that APIs cannot block the UI thread Guidance: Anything taking > 50 ms should be asynchronous Resulted in prevalent use of Async Pattern in platform Established a naming pattern: <verb>[<noun>]Async GetThumbnailAsync Return value mapped to a promise for a future result In .NET – await obj.GetThumbnailAsync() In JavaScript – obj.GetThumbNailAsync().then (func);

61 .NET parallel programming

62 TPL Dataflow Overview System.Threading.Tasks.Dataflow.dll
Primitives for in-process message passing “Blocks” that can buffer and process data Used individually and/or linked together to create networks Inspired by Decades of computer science research/history Related Microsoft technologies Asynchronous Agents Library in Visual C Axum incubation project CCR from Microsoft Robotics

63 TPL Dataflow Dataflow Networks
“Dataflow Blocks” implement interfaces IDataflowBlock, ITargetBlock<TInput>, ISourceBlock<TOutput> Linkable to form a network Data automatically propagated from sources to linked targets Enables building powerful parallel and asynchronous pipelines, e.g. ActionBlock, TransformBlock, JoinBlock, … Integrates with Task, IObservable, … TransformBlock<byte[],byte[]> Compress TransformBlock<byte[],byte[]> Encrypt data compressed and encrypted

64 Parallel Debugging Additions
Parallel Watch Multi-process Pervasive Flagging

65 Concurrency Visualizer
Shift-Alt-F5 Faster processing, faster loading Supports big traces Supports EventSource and custom markers Built-in support for TPL, PLINQ, Sync Data Structures, and Dataflow Built-in support for your own EventSource types Also provides Visual Studio markers API New visualizations e.g. defender view

66 C++ and XAML

67 XAML benefits For WPF, SL and Windows Phone developers
Utilize current skills Reuse compatible assets For those new to XAML Powerful declarative programming model Separation of UI layer and application logic Expressive: Controls, layout, vector drawing Comprehensive : Styles, templates, data binding, animation Extensible : Custom controls

68 C++ for the Windows 8 runtime
Set of language extensions and libraries to allow direct consumption and authoring of Windows runtime types. Strongly-typed system for Windows runtime Automatically reference counted Exception-based Deep integration with STL Well defined binary contract across module boundaries

69 C++: First class support for Metro style apps
XAML designer C++ to access the Windows runtime Async nature of APIs IDE improvements Local, simulator and remote debugging Package your apps Code Analysis

70 Using Windows Runtime from C#

71 C# and Visual Basic influenced the Windows Runtime

72 Windows Runtime is designed to be used from object-oriented languages like C# and Visual Basic

73 Windows Runtime metadata files use an updated version of
Windows Runtime metadata files use an updated version of .NET’s metadata format

74 Windows Runtime includes a XAML based framework for Metro style apps

75 Windows Runtime was expressly designed to work well with C# and Visual Basic

76 Most differences between Windows Runtime and
Most differences between Windows Runtime and .NET are hidden from the managed developer

77 IIterable<T> ↔ IEnumerable<T>
.NET automatically maps collection interfaces to their Windows Runtime equivalent IIterable<T> ↔ IEnumerable<T> IVector<T> ↔ IList<T> IVectorView<T> ↔ IReadOnlyList<T> IMap<K,V> ↔ IDictionary<K,V> IMapView<K,V> ↔ IReadOnlyDictionary<K,V>

78 A few places use extension methods to bridge between Windows Runtime and managed code

79 You can write your own Windows Runtime components in C# or Visual Basic

80 You should build a Windows Runtime component when you want your code to be used from JS, C++, C# and VB

81 API signatures must only use Windows Runtime types
Structs can only have public data fields Inheritance can only be used for XAML controls, all other types must be sealed Only supports system provided generic types

82 Build your own managed Windows Runtime components
Influenced by C# and VB Feels natural and familiar from C# and Visual Basic Build your own managed Windows Runtime components

83 Using Windows Runtime with C++

84 C++ in a Metro style World Overview
Metro style Applications (Hybrid) HTML5 + JS front-end C++ components XAML UI Applications XAML interface C++ code behind Metro style Games DirectX & C++

85 C++ for Windows Runtime Overview
Set of language extensions and libraries to allow direct consumption and authoring of Windows Runtime types. Strongly-typed system for Windows Runtime Automatically reference counted Exception-based Deep integration with STL Well defined binary contract across module boundaries

86 C++ Component Extensions (C++/CX)
bindings to foreign type systems Key Bindings Feature Summary 1. Data Types ref class Reference type value class Value type interface class Interface property Property with get/set event “Delegate property” with add/remove/raise delegate Type-safe function pointer generic Type-safe generics 2. Allocation gcnew Garbage-collected allocation ref new Reference-counted allocation 3. Pointer & Reference ^ Strong pointer (“hat” or “handle”) % Strong reference

87 WinRT Types: For Cross-Language Use
C/C++ External Surface for native callers/callees WinRT External Surface for WinRT callers/callees Module Internals written in C++

88 Lifetime Management Handle (^) is a pointer to a Windows Runtime object for which the compiler performs automatic reference counting ref new instantiates or activates a Windows Runtime class. Person^ p; { Person^ p2 = ref new Person(); // refcount = 1 p2->Name = “John”; // refcount = 1 p = p2; // refcount = 2 } // refcount = 1 p = nullptr; // refcount = 0; ~Person()

89 Runtime Class Defining Using public ref class Person {
public: Person(String^ name, String^ ); void Greet(Person^ other); internal: ~Person(); void SetPassword(const std::wstring& passwd); }; ABI-safe cross-language class Public methods restricted to WinRT typed parameters Private/internal methods can use any legal C++ type parameters Using Person^ p = ref new Person(“John Surname”); p->Greet(ref new Person(“Jim Surename”);

90 Interface Defining Using Inheriting Implementing
public interface class IAnimal { void Play(); }; Methods are implicitly public Using IAnimal^ animal = ref new Cat(); animal->Play(); Inheriting public interface class IFeline : IAnimal { void Scratch(); }; Implementing ref class Cat : IFeline { public: virtual void Play(); virtual void Scratch(); Public inheritance only

91 Automatic Lifetime (Stack, Member)
Defining public ref class DatabaseConnection { public: ~ DatabaseConnection(); }; Using { DatabaseConnection db(); db.SetName( “Employees”); // … // … lots of queries, updates, etc. … } // ~DatabaseConnection()

92 Property Defining Trivial properties (with private backing store)
public: property String^ Name; User defined properties public: property Person^ Sibling { Person^ get() { InitSiblings(); return _sibling; } void set(Person^ value) { _sibling = value; NotifySibling(); } } private: Person^ _sibling; Using Person^ p = ref new Person(“John”); p->Sibling = ref new Person(p->Name);

93 Delegate Declaring: like a function public delegate void PropertyChanged( String^ propName, String^ propValue ); Instantiating: like a class From lambda: auto p = ref new PropertyChanged( [](String^ pn, String^ pv) { cout << pn << ” = “ << pv; } ); From free-function auto p = ref new PropertyChanged( UIPropertyChanged ); From class-member auto p = ref new PropertyChanged( this, MainPage::OnPropertyChanged ); Invoking: like a function p( “Visible”, false );

94 Event Defining Trivial event (with private backing store)
public: event PropertyChanged^ OnPropertyChanged; User defined event public: event PropertyChanged^ OnNetworkChanged { EventRegistrationToken add(PropertyChanged^); void remove(EventRegistrationToken t); void raise(String^, String^); } Using Subscribing person->OnPropertyChanged += propertyChangedDelegate; auto token = person->OnPropertyChanged::add(propertyChangedDelegate); Unsubscribing person->OnPropertyChanged -= token; person->OnPropertyChanged::remove(token);

95 Exception Signaling an error case: throw exception
HRESULT Exception E_OUTOFMEMORY OutOfMemoryException E_INVALIDARG InvalidArgumentException E_NOINTERFACE InvalidCastException E_POINTER NullReferenceException E_NOTIMPL NotImplementedException E_ACCESSDENIED AccessDeniedException E_FAIL FailureException E_BOUNDS OutOfBoundsException E_CHANGED_STATE ChangedStateException REGDB_E_CLASSNOTREG ClassNotRegisteredException E_DISCONNECTED DisconnectedException E_ABORT OperationCanceledException Signaling an error case: throw exception throw ref new InvalidArgumentException(); throw ref new COMException(E_*); Handling an error case: catch exception try { … } catch (OutOfMemoryException^ ex) { … } Access HRESULT value via ex->HResult Notes on exceptions: catch (Platform::Exception^) catches all WinRT exceptions Exceptions don’t carry any state and don’t travel across modules Deriving from an exception class is ill-formed

96 Generics Defining Using Implementing
generic<typename T, typename U> public interface class IPair { property T First; property U Second; }; Using IPair<String^, Uri^>^ uri = GetUri(); auto first = uri->First; // type is String^ auto second = uri->Second; // type is Uri^ Implementing ref class PairStringUri: IPair<String^, Uri^> { public: property String^ First; property Uri^ Second; };

97 Template Runtime Class
Defining template<typename T, typename U> ref class Pair: IPair<T, U> { public: property T First; property U Second; Pair(T first, U second) { First = first; Second = second; } }; Using IPair<String^, Uri^>^ pair = ref new Pair<String^, Uri^>( “//BUILD/”, ref new Uri(“

98 .winmd metadata .winmd files To consume a winmd file:
Contain the metadata representation of WinRT types To consume a winmd file: Right click on project in Solution Explorer > References > Add New Reference… Or #using <Company.Component.winmd> Make sure the winmd and implementation dll is packaged together with your application To produce a .winmd file: Start from the “C++ WinRT Component Dll” template Define public types (ref classes, interfaces, delegates, etc.) Tip: C++ WinRT components can be consumed from C++, JS or C#

99 Partial Runtime Class Partial class definition Class definition
private partial ref class MainPage: UserControl, IComponentConnector { public: void InitializeComponent(); void Connect() { btn1->Click += ref new EventHandler(this, &MainPage::Button_Click); } }; Class definition ref class MainPage MainPage() { InitializeComponent(); } void Button_Click(Object^ sender, RoutedEventArgs^ e);

100 Libraries

101 Vector and ObservableVector
Instantiating using namespace Platform; Vector<String^>^ items = ref new Vector<String^>(); Adding elements items->Append(“Hello”); Returning a read-only view of the vector IVectorView<String^>^ GetItems () { return items->GetView(); } Getting notification for changes items->VectorChanged += ref new VectorChangedEventHandler<String^> (this, &MyClass::VectorChanged);

102 Map and ObservableMap Defining Adding elements
using namespace Platform; Map<String^, Uri^> favorites = ref new Map<String^, Uri^>(); Adding elements favorites->Insert(“MSDN”, ref new Uri(“ Checking and removing elements if (favorites->HasKey(“MSDN”)) favorites->Remove(“MSDN”);

103 Library Integration: STL
STL Algorithms String has Begin()/End() member methods. For WinRT collections, collection.h defines begin() and end() functions. IVector<int>^ v = GetItems(); int sum = 0; std::for_each( begin(v), end(v), [&sum](int element) { sum += element; } ); Conversions String^  std::wstring (via wchar_t*) Vector  std::vector std::vector<int> v; v.push_back(10); auto items = ref new Vector<int>(v); Vector  std::vector Vector<int>^ items = …; std::vector<int> v = to_vector(items); Map  std::map

104 WinRT and JavaScript Basics

105 JavaScript and C# WinRT component
namespace CustomWinRTComponent { public interface IMoreMath { } public sealed class MoreMath : IMoreMath { public static double Sinh(double x) { return Math.Sinh(x); } // JavaScript var MoreMath = CustomWinRTComponent.MoreMath; var y = MoreMath.sinh(0.7);

106 C++ and Metro Style Apps

107 The C++ language extensions
Read / write metadata Maps between C++ patterns (e.g. constructors) and WinRT interfaces Maps between output parameters and return values Automatic reference counting Casting Maps between exceptions and HRESULTs

108 Exception & return value wrapping
HRESULT __stdcall Add( Calculator* this, int i, int j, int* result ) try { int i = Add(41, 1); } catch (OverflowException^ e) { printf("Too big"); int Add(int i, int j) { if (i+j < i) { throw OverflowException(); } return i + j; WinRT ABI Native to COM Wrapper COM to Native Wrapper HRESULT __stdcall __cli_Add(Calculator* calc, int i, int j, int* r) { try { *r = calc->Add(i, j); } catch (Exception^ e) { return e->HResult; return S_OK; }; inline int Add(int i, int j) { int res; HRESULT hr = __cli_Add(this, i, j, &res); if (hr != 0) { __throw_hr_as_exception(hr); // switch on hr & throw } return res; };

109 H^T A hat is a pointer to a pointer to an array of function pointers
“It’s not okay to call me a carrot” A hat is a pointer to a pointer to an array of function pointers aka: Pointer to vptr to vtable Calculator::ICalculator vtable &Calculator::QueryInterface &Calculator::AddRef &Calculator::Release &Calculator::GetIids &Calculator::GetRuntimeClassName &Calculator::GetTrustLevel &Calculator::Add ref class Calculator IStorageCell vtable * vfptr1 ICalculator vtable * vfptr2 int _storage int _refcount ICalculator^ calc

110 H^T A hat is a pointer to a pointer to an array of function pointers
“It’s not okay to call me a carrot” A hat is a pointer to a pointer to an array of function pointers aka: Pointer to vptr to vtable ^ provides automatic reference counting Similar to ComPtr<T> Adds ability to use casting.

111 C++ for Metro style apps
C++ language extensions gives you the best of both C++ and WinRT The compiler understands the concepts natively, and will do the best job at optimizing While giving you a readable and natural syntax C++ and Win8: power and performance!

112 Brings existing C++ code into Metro Style Apps

113 Windows SDK for Metro style apps
Desktop apps View XAML HTML / CSS HTML JavaScript Model Controller C C++ C# VB JavaScript (Chakra) C C++ C# VB WinRT APIs Communication & Data Graphics & Media Devices & Printing System Services Application Model Internet Explorer Win32 .NET / SL Core Windows Core OS Services

114 Windows SDK for Metro style apps
Windows 8 introduces the concept of “app container” broker Access to a number of resources (files, devices, etc.) is controlled by the broker A large number for Win32 APIs are replaced by the WinRT library A good number of Win32 APIs will not be available E.g. GDI, Registry, MessageBox, etc.

115 Existing code Desktop apps Metro style apps Microsoft Libraries good
Standard C++ Libs ppl (parallel patterns lib) Win32 ATL MFC 3rd party libs (boost, etc.) your code good WinRT + Win32 subset ATL subset no depends

116 Existing 3rd party libraries
3rd party Libraries will need to review their usage of existing Win32 APIs A few examples: boost: low usage of APIs not part of Windows SDK for Metro style apps Physics engines (e.g. Bullet): the core of the library have small usage of non-Metro style SDK APIs Math libraries (e.g. Deal.II, SciMath, etc.): very little usage (if any) of non-Metro style SDK APIs

117 Your code Basic steps to migrate your code to the Metro style environment Make sure you remove or replace the usage of non-Metro style SDK APIs Flagged by compiler errors #if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP) Flagged by Logo Verification Toolkit (if needed) Add a WinRT layer for smooth interoperability with any Metro style app

118 Metro style SDK partitioning
// c:\Program Files (x86)\Windows Kits\8.0\Include\um\mmdeviceapi.h #if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_APP) // Metro style SDK APIs #endif /* WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_APP) */ #if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP) // Desktop SDK APIs, not available for Metro style apps #endif /* WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP) */

119 .NET Kernel

120 Quick Reminder – What Is The CLR
Entity Frame-work ASP. NET WCF WPF Win Forms Work Flow And more! Base Class Libraries The CLR JIT & NGEN Garbage Collector Security Model Exception Handling Loader & Binder Profiling& Debugging APIs

121 Improvements to the Garbage Collector

122 Quick Reminder – GC Fundamentals
Roots Heap Generation 1 Generation 0 New objects allocated as Generation 0 Accessible References Keep Objects Alive GC Compacts Referenced Objects Objects Promoted to Older Generation

123 Quick Reminder – GC Fundamentals
2 Modes: Client (default) and Server Heaps Collection Flavors Small Object Heap Large Object Heap Client GC One Server GC One per logical processor Gen0/Gen1 Gen2 Client GC Always blocking Can be non-blocking Server GC

124 Quick Reminder - Server Mode (4.0)
3/31/ :31 PM Quick Reminder - Server Mode (4.0) (.NET 4.0) Maximizes application scalability © 2010 Microsoft Corporation. All rights reserved. Microsoft, Windows, Windows Vista and other product names are or may be registered trademarks and/or trademarks in the U.S. and/or other countries. The information herein is for informational purposes only and represents the current view of Microsoft Corporation as of the date of this presentation. Because Microsoft must respond to changing market conditions, it should not be interpreted to be a commitment on the part of Microsoft, and Microsoft cannot guarantee the accuracy of any information provided after the date of this presentation. MICROSOFT MAKES NO WARRANTIES, EXPRESS, IMPLIED OR STATUTORY, AS TO THE INFORMATION IN THIS PRESENTATION.

125 3/31/ :31 PM Background GC For Server Mode (New in 4.5) Performance: Reduces pause times (Desktop apps) (.NET 4.5) Gen0/Gen1 collections can proceed during Gen2 GC © 2010 Microsoft Corporation. All rights reserved. Microsoft, Windows, Windows Vista and other product names are or may be registered trademarks and/or trademarks in the U.S. and/or other countries. The information herein is for informational purposes only and represents the current view of Microsoft Corporation as of the date of this presentation. Because Microsoft must respond to changing market conditions, it should not be interpreted to be a commitment on the part of Microsoft, and Microsoft cannot guarantee the accuracy of any information provided after the date of this presentation. MICROSOFT MAKES NO WARRANTIES, EXPRESS, IMPLIED OR STATUTORY, AS TO THE INFORMATION IN THIS PRESENTATION.

126 Other GC Improvements Performance
3/31/ :31 PM Other GC Improvements Performance (Server GC) Scalable Marking for full blocking GCs Large Object Heap Allocation Improvements Better use of free space on LOH (Server only) Balancing the LOH allocations across processors … And More! LEARN MORE “Enhancements to the CLR GC in .NET 4.5” © 2010 Microsoft Corporation. All rights reserved. Microsoft, Windows, Windows Vista and other product names are or may be registered trademarks and/or trademarks in the U.S. and/or other countries. The information herein is for informational purposes only and represents the current view of Microsoft Corporation as of the date of this presentation. Because Microsoft must respond to changing market conditions, it should not be interpreted to be a commitment on the part of Microsoft, and Microsoft cannot guarantee the accuracy of any information provided after the date of this presentation. MICROSOFT MAKES NO WARRANTIES, EXPRESS, IMPLIED OR STATUTORY, AS TO THE INFORMATION IN THIS PRESENTATION.

127 Assembly Image Usage Logs
3/31/ :31 PM Automatic NGen model App Execute (MyApp.exe) App Execute App Execute Native Image Cache Assembly Image Usage Logs MyApp.ni.exe MyApp.exe OtherApp.ni.exe Auto Ngen Maintenance Task © 2010 Microsoft Corporation. All rights reserved. Microsoft, Windows, Windows Vista and other product names are or may be registered trademarks and/or trademarks in the U.S. and/or other countries. The information herein is for informational purposes only and represents the current view of Microsoft Corporation as of the date of this presentation. Because Microsoft must respond to changing market conditions, it should not be interpreted to be a commitment on the part of Microsoft, and Microsoft cannot guarantee the accuracy of any information provided after the date of this presentation. MICROSOFT MAKES NO WARRANTIES, EXPRESS, IMPLIED OR STATUTORY, AS TO THE INFORMATION IN THIS PRESENTATION.

128 Automatic NGen Windows 8 only .NET 3.5 – Framework Only .NET 4.5
3/31/ :31 PM Automatic NGen Windows 8 only .NET 3.5 – Framework Only .NET 4.5 Desktop app – Only assemblies in the GAC Metro style app – All assemblies eligible © 2010 Microsoft Corporation. All rights reserved. Microsoft, Windows, Windows Vista and other product names are or may be registered trademarks and/or trademarks in the U.S. and/or other countries. The information herein is for informational purposes only and represents the current view of Microsoft Corporation as of the date of this presentation. Because Microsoft must respond to changing market conditions, it should not be interpreted to be a commitment on the part of Microsoft, and Microsoft cannot guarantee the accuracy of any information provided after the date of this presentation. MICROSOFT MAKES NO WARRANTIES, EXPRESS, IMPLIED OR STATUTORY, AS TO THE INFORMATION IN THIS PRESENTATION.

129 Executed Methods Profile
Multi-Core Background JIT Performance: Improves startup time (Desktop apps) First Launch Subsequent Launch Executed Methods Profile

130 C# Next

131 C# and VB evolution C# 5.0 + VB 11.0 Windows Runtime + Asynchrony
Dynamic + Language Parity C# VB 9.0 Language Integrated Query C# VB 8.0 Generics C# VB 7.0 Managed Code

132 What’s new? C# 5.0 VB 11.0 Windows Runtime support
Asynchronous programming Caller info attributes Windows Runtime support Asynchronous programming Caller info attributes Iterators

133 Asynchronous programming models
Windows Runtime: IAsyncOperation<T> .NET Framework: Task<T> Javascript: Promises All are objects representing “ongoing operations” All use callbacks to signal completion of operation Challenge: Callbacks turn your code inside out Insight: Automatic transformation to callbacks is possible

134 The Roslyn project Compiler Compiler Meta-programming
Class Field public Foo private string X Meta-programming Read-Eval-Print Loop Language Object Model DSL Embedding Compiler Compiler Source File .NET Assembly Source code Source code Source code Source code

135 Binding and Flow Analysis APIs
Roslyn APIs Formatter Colorizer Outlining Navigate To Object Browser Completion List Find All References Rename Quick Info Signature Help Extract Method Go To Definition Edit and Continue Language Service Compiler APIs Parser Syntax Tree API Symbols Symbol API Binder Binding and Flow Analysis APIs Emit API IL Emitter Compiler Pipeline Metadata Import

136 Quick Recap WinRT Visual C++ Component Extensions

137 Windows Core OS Services
Windows 8 APIs Metro style app WinRT Win32 (Desktop Subset) Win32 (Metro style Subset) Windows Core OS Services

138 Exception^ WinRT APIs throw exceptions deriving from Platform::Exception … really, it’s HRESULTs under the cover HRESULT Exception E_OUTOFMEMORY OutOfMemoryException E_INVALIDARG InvalidArgumentException E_NOINTERFACE InvalidCastException E_POINTER NullReferenceException E_NOTIMPL NotImplementedException E_ACCESSDENIED AccessDeniedException E_FAIL FailureException E_BOUNDS OutOfBoundsException E_CHANGED_STATE ChangedStateException REGDB_E_CLASSNOTREG ClassNotRegisteredException E_DISCONNECTED DisconnectedException E_ABORT OperationCanceledException

139 Collections

140 WinRT collections family
Vector Map VectorView MapView IVector IMap IVectorView IMapView IIterable IObservableVector IObservableMap IIterator STL containers are the backing store see <collection.h>

141 Collections usage considerations
Mix STL containers with WinRT collections STL containers are faster but don’t have observable behavior Use STL containers internally; use WinRT collections at the boundary Fire up a profiler where it matters! Use STL algorithms on WinRT collections No need to copy the WinRT collection into an STL container You can have STL containers of ^ types Use Vector not IVector most of the time Only use IVector the public API surface

142 Collections usage considerations (cont.)
VectorView, MapView and Iterator get invalidated Copy if you plan to change the underlying Vector or Map Each iteration over collections is a virtual call Use bulk iteration (GetMany) when it makes sense Implementing IVector is tricky Use an underlying Vector

143 Async pattern

144 Async simplified Build on Parallel Patterns Library (PPL) tasks to implement async pattern Sample available here: Using this technique, async code is cleaner and more maintainable

145 Win32

146 Windows SDK for Metro style apps
Windows 8 introduces the concept of “app container” sandbox Access to a number of resources (files, devices, etc.) is controlled by the sandbox A large number for Win32 APIs are replaced by the WinRT library A good number of Win32 will not be available to Metro style apps Some Win32 APIs are still available directly to Metro style apps COM Core Direct2D File Systems Kernel Direct3D Globalization Accessibility DirectComposition Media Foundation Audio DirectManipulation Windows and Messages DirectWrite

147 C++ renaissance

148 Visual C++: The power and performance tool for Windows.
C++ Renaissance Industry momentum for C++. Renewing our commitment to C++: New programming model for Windows 8. Get the full power of your CPU and GPU. Use Windows 8 hardware capabilities to the fullest. Build for ARM. Visual C++: The power and performance tool for Windows.

149 Recap

150 For more information Related sessions Documentation & articles
PLAT-874T - Lap around the Windows Runtime APP-409T Fundamentals of Metro style apps: how and when your app will run TOOL-531T Using the Windows Runtime from C# and Visual Basic TOOL-532T Using the Windows Runtime from C++ TOOL-533T Using the Windows Runtime from JavaScript C++ Language extension summary The Windows Runtime Windows Runtime Design

151 Feedback and questions Team Park Windows 8 Dev Community
thank you Feedback and questions Team Park Windows 8 Dev Community

152 3/31/ :31 PM © 2011 Microsoft Corporation. All rights reserved. Microsoft, Windows, Windows Vista and other product names are or may be registered trademarks and/or trademarks in the U.S. and/or other countries. The information herein is for informational purposes only and represents the current view of Microsoft Corporation as of the date of this presentation. Because Microsoft must respond to changing market conditions, it should not be interpreted to be a commitment on the part of Microsoft, and Microsoft cannot guarantee the accuracy of any information provided after the date of this presentation. MICROSOFT MAKES NO WARRANTIES, EXPRESS, IMPLIED OR STATUTORY, AS TO THE INFORMATION IN THIS PRESENTATION. © 2011 Microsoft Corporation. All rights reserved. Microsoft, Windows, Windows Vista and other product names are or may be registered trademarks and/or trademarks in the U.S. and/or other countries. The information herein is for informational purposes only and represents the current view of Microsoft Corporation as of the date of this presentation. Because Microsoft must respond to changing market conditions, it should not be interpreted to be a commitment on the part of Microsoft, and Microsoft cannot guarantee the accuracy of any information provided after the date of this presentation. MICROSOFT MAKES NO WARRANTIES, EXPRESS, IMPLIED OR STATUTORY, AS TO THE INFORMATION IN THIS PRESENTATION.

153


Download ppt "Christophe Pichaud Microsoft Architect Sogeti France"

Similar presentations


Ads by Google