3. 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 :
5. 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 ?
6. 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
7. 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
9. 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.
10. 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
12. 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...)
13. 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);
14. 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";
}
15. 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
17. 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
19. 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
20. 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