Gab2015 Jeremy Mounet Azure Dynamics 2012 and 2015 (on MS Azure)
Gab2015 aurelien regat-barrel_des applicationsclientesportablesgraceaucppmoderne
-
Upload
vincent-thavonekham-pro -
Category
Technology
-
view
48 -
download
2
Transcript of Gab2015 aurelien regat-barrel_des applicationsclientesportablesgraceaucppmoderne
#GlobalAzure #ViseoSpirit
Des applications clientes portables grâce au C++
moderne !
Aurélien Regat-Barrel
Microsoft Azure #GlobalAzure #ViseoSpirit
GAB 2015 LYON ORAGANIZER
LOCAL SPONSORS
THANK YOU ALL !!
WORLDWIDE SPONSORS
…
#GlobalAzure #ViseoSpirit
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 :
Microsoft Azure #GlobalAzure #ViseoSpirit
C++ !
Quel est leur point commun ?
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 ?
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
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
Microsoft Azure #GlobalAzure #ViseoSpirit
http://stackoverflow.com/research/developer-survey-2015
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.
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
Microsoft Azure #GlobalAzure #ViseoSpirit
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...)
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);
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";}
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
Microsoft Azure #GlobalAzure #ViseoSpirit
https://casablanca.codeplex.com/Microsoft C++ REST SDK
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
Microsoft Azure #GlobalAzure #ViseoSpirit
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
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
Microsoft Azure #GlobalAzure #ViseoSpirit
Démo de QML / Qt Quick
Microsoft Azure #GlobalAzure #ViseoSpirit
GAB 2015 LYON ORAGANIZER
LOCAL SPONSORS
THANK YOU ALL !!
WORLDWIDE SPONSORS
…
#GlobalAzure #ViseoSpirit