gab2015 aurelien regat-barrel_des applicationsclientesportablesgraceaucppmoderne

22
#GlobalAzure #ViseoSpirit Des applications clientes portables grâce au C++ moderne ! Aurélien Regat-Barrel

Upload: vincent-thavonekham-pro

Post on 08-Aug-2015

48 views

Category:

Technology


2 download

TRANSCRIPT

Page 1: Gab2015 aurelien regat-barrel_des applicationsclientesportablesgraceaucppmoderne

#GlobalAzure #ViseoSpirit

Des applications clientes portables grâce au C++

moderne !

Aurélien Regat-Barrel

Page 2: Gab2015 aurelien regat-barrel_des applicationsclientesportablesgraceaucppmoderne

Microsoft Azure #GlobalAzure #ViseoSpirit

GAB 2015 LYON ORAGANIZER

LOCAL SPONSORS

THANK YOU ALL !!

WORLDWIDE SPONSORS

#GlobalAzure #ViseoSpirit

Page 3: Gab2015 aurelien regat-barrel_des applicationsclientesportablesgraceaucppmoderne

Microsoft Azure #GlobalAzure #ViseoSpirit

• Le C++ aujourd'hui : où en est-on ?• Quels sont ses capacités pour développer des

applications clientes modernes ? • Présentation de QML/Qt Quick

Au programme :

Page 4: Gab2015 aurelien regat-barrel_des applicationsclientesportablesgraceaucppmoderne

Microsoft Azure #GlobalAzure #ViseoSpirit

C++ !

Quel est leur point commun ?

Page 5: Gab2015 aurelien regat-barrel_des applicationsclientesportablesgraceaucppmoderne

Microsoft Azure #GlobalAzure #ViseoSpirit

• Performance ?– “C++ doesn’t give you performance, it gives you control

over performance.” (Chandler Carruth)• Portabilité !

– En particulier grâce à Qt• Pérennité du code

– Développer en C++, c'est investir sur le long terme

Pourquoi choisir C++ aujourd'hui ?

Page 6: Gab2015 aurelien regat-barrel_des applicationsclientesportablesgraceaucppmoderne

Microsoft Azure #GlobalAzure #ViseoSpirit

• Présent sur à peu près toutes les architectures / OS• Est à la base de beaucoup de langages / technologies• Cette base est rendue accessible de façon diverse et variée…

– A l'ancienne : JNI, NDK, P/Invoke, wrapping de code...– Via un langage spécifique : C++/CLI, C++ CX, Obj. C++– Intégration directe : Node.js, QtScript, QML...– Via un compilateur dédié : NaCL, pNaCl, asm.js

Le C++ aujourd'hui

Page 7: Gab2015 aurelien regat-barrel_des applicationsclientesportablesgraceaucppmoderne

Microsoft Azure #GlobalAzure #ViseoSpirit

• A l'inverse, les applications C++ se diversifient de plus en plus– Vers une plus grande hybridation des genres ?

• Les développeurs C++ ont donc intérêt à se former aux autres technologies...– ... et vice versa !

Le C++ aujourd'hui

Page 8: Gab2015 aurelien regat-barrel_des applicationsclientesportablesgraceaucppmoderne

Microsoft Azure #GlobalAzure #ViseoSpirit

http://stackoverflow.com/research/developer-survey-2015

Page 9: Gab2015 aurelien regat-barrel_des applicationsclientesportablesgraceaucppmoderne

Microsoft Azure #GlobalAzure #ViseoSpirit

We asked respondents what programming languages and technologies they've developed with over the past year and what languages and technologies they want to develop with.

Page 10: Gab2015 aurelien regat-barrel_des applicationsclientesportablesgraceaucppmoderne

Microsoft Azure #GlobalAzure #ViseoSpirit

• Dans ses outils : conformité des compilateurs, portabilité• Dans sa pratique : apparition du « C++ moderne »• Dans son utilisation : hybridation / combinaison croissante

avec d'autres langages / technologies (jeux vidéos...)• Dans sa forme (et sa vitesse d'adoption !) :

– Une norme majeure en 2011, une mineur en 2014– Prochaine norme majeure attendue en 2017

De 1998 à nos jours

Page 11: Gab2015 aurelien regat-barrel_des applicationsclientesportablesgraceaucppmoderne

Microsoft Azure #GlobalAzure #ViseoSpirit

Page 12: Gab2015 aurelien regat-barrel_des applicationsclientesportablesgraceaucppmoderne

Microsoft Azure #GlobalAzure #ViseoSpirit

• En C++ moderne, la gestion des ressources est automatisée via des objets dédiés– RAII : « Resource Acquisition Is Initialization »

Et le garbage collector ?

class RAII {public: void incr() { QMutexLocker lock(&mutex); counter += 1; } private: int counter = 0; QMutex mutex;};

=> Pas de pointeur / new / delete=> Généralisable à tout type de ressource (fichier, socket, mutex...)

Page 13: Gab2015 aurelien regat-barrel_des applicationsclientesportablesgraceaucppmoderne

Microsoft Azure #GlobalAzure #ViseoSpirit

• Immutabilité (const) propagée aux méthodes (lecture seule)• Sémantique de valeur : objet typiquement utilisé sur la pile

(RAII, objets mathématiques...)• Généricité et meta-programmation (templates)• C++11/14 : lambdas, inférence de types (auto)...

Autres aspects du C++ moderne...

Le C++ (moderne) est-il plus fonctionnel qu'orienté objet ?

auto xplus = [](auto y) { return [=](auto x) { return x + y; };};cout << xplus(1.5)(2);

Page 14: Gab2015 aurelien regat-barrel_des applicationsclientesportablesgraceaucppmoderne

Microsoft Azure #GlobalAzure #ViseoSpirit

C++14 en un seul slide...int main() { tuple<int, double, string> t0 { 0, 0.0, "0" }; auto t1 = make_tuple(1, 1.0, "1"); list<decltype(t0)> tuples = { t0, t1 }; for (int n : { 1, 2, 3 }) { tuples.emplace_back(n, n, to_string(n)); }

auto lambda = [](const auto & t) { return get<0>(t) == 1; };

int n = count_if(begin(tuples), end(tuples), lambda); cout << n << "\n";}

Page 15: Gab2015 aurelien regat-barrel_des applicationsclientesportablesgraceaucppmoderne

Microsoft Azure #GlobalAzure #ViseoSpirit

• Microsoft fait de gros efforts pour supporter les évolutions de C++ (ainsi que du C) et être plus interopérable

• Détail du support de C++11/14/17 :– http://blogs.msdn.com/b/vcblog/archive/2014/11/17/c-11-14-17-features-in-vs-2015-preview.aspx

• Possibilité de compiler avec Clang/LLVM pour cibler Android !– Support de iOS planifié…– ...on pourra compiler son code C++ vers Android /

Windows / iOS !

Visual C++ 2015

Page 16: Gab2015 aurelien regat-barrel_des applicationsclientesportablesgraceaucppmoderne

Microsoft Azure #GlobalAzure #ViseoSpirit

https://casablanca.codeplex.com/Microsoft C++ REST SDK

Page 17: Gab2015 aurelien regat-barrel_des applicationsclientesportablesgraceaucppmoderne

Microsoft Azure #GlobalAzure #ViseoSpirit

• C++ est un langage très vivant, en pleine évolution• Pour autant, priorité est donnée à la pérennité du code

– Les frameworks disponibles sont stables et matures• Interopérable avec les technos / systèmes actuels…et futurs !• La tendance est à l'hybridation

– Des briques en C++ sont exploitées via diverses technos• Bien géré, le code legacy est une force !

Conclusion : un langage à (re)découvrir

Page 18: Gab2015 aurelien regat-barrel_des applicationsclientesportablesgraceaucppmoderne

Microsoft Azure #GlobalAzure #ViseoSpirit

Page 19: Gab2015 aurelien regat-barrel_des applicationsclientesportablesgraceaucppmoderne

Microsoft Azure #GlobalAzure #ViseoSpirit

• Nombreux outils :– Qt Creator (IDE avec profiler), système de build (qmake,

qbs), framework de test, de traduction…• Disponible en LGPL sur 15 plateformes

– Windows (Win32, CE, WinRT), Linux / UNIX (X11, Wayland, Embedded), Mac (OS X, iOS), Android, BlackBerry, QNX, VxWorks, Integrity…

– +800.000 utilisateurs

Qt : une plateforme logicielle mature

Page 20: Gab2015 aurelien regat-barrel_des applicationsclientesportablesgraceaucppmoderne

Microsoft Azure #GlobalAzure #ViseoSpirit

• Nombreux modules (APIs) :– IHM, Réseau, SQL, Multimedia, XML, OpenGL, Scripting,

MapReduce, 3D, Cloud, Web engine, JSON, Bluetooth…• Qt Quick/QML :

– Langage déclaratif orienté IHM animées et "fluides"– Basé sur Javascript + une sorte de super CSS– Intégration aisée avec un moteur C++

Qt : une plateforme logicielle mature

Page 21: Gab2015 aurelien regat-barrel_des applicationsclientesportablesgraceaucppmoderne

Microsoft Azure #GlobalAzure #ViseoSpirit

Démo de QML / Qt Quick

Page 22: Gab2015 aurelien regat-barrel_des applicationsclientesportablesgraceaucppmoderne

Microsoft Azure #GlobalAzure #ViseoSpirit

GAB 2015 LYON ORAGANIZER

LOCAL SPONSORS

THANK YOU ALL !!

WORLDWIDE SPONSORS

#GlobalAzure #ViseoSpirit