Particularités des outils et des compilateurs pour
C++ :
Généralités
Approches alternatives :
Clang
Informations spécifiques à Clang :
g++
Informations spécifique à g++, ou GNU
C++ :
- Comprendre le fonctionnement de GNU
C++ :
http://www.redhat.com/docs/manuals/enterprise/RHEL-4-Manual/gcc/c---misunderstandings.html
- http://gcc.gnu.org/projects/cxx0x.html
- Extensions au langage :
- Écrire des greffons pour gcc :
- Un clin d'oeil : http://i.imgur.com/XBVJ2.jpg
- Historique de gcc : http://www.h-online.com/open/features/GCC-We-make-free-software-affordable-1066831.html?artikelseite=1
- Optimisation :
http://h-deb.clg.qc.ca/Liens/Optimisation--Liens.html#optimisation_gplusplus
- Bogues connus :
- Travailler avec g++ sous
Microsoft
Windows : http://lucasduffey.com/programming/programming-with-gcc-g-on-windows/
- Utiliser g++ pour générer
des diagnostics de bonne ou de mauvaise utilisation de conteneurs :
http://gcc.gnu.org/onlinedocs/libstdc++/manual/bk01pt03ch19s07.html
- Notez que gcc a célébré son
25e anniversaire en
2012 :
- Une implémentation de gcc pour
Windows,
par Stephan T.
Lavavej (qui travaille pour Microsoft mais fait un travail
remarquable ici pour son propre plaisir) : http://nuwen.net/mingw.html
- Il est maintenant possible de compiler gcc
avec un compilateur
C++ (plutôt que C, comme
c'était le cas auparavant) : http://www.codesynthesis.com/~boris/blog/2012/05/08/gcc-built-with-cxx-compiler/
- Une introduction aux intrinsèques de traitement vectoriel sur
gcc, par George Koharchik et Kathy Jones en
2012 : http://www.linuxjournal.com/content/introduction-gcc-compiler-intrinsics-vector-processing
- Outil en ligne pour voir le code assembleur
généré par gcc pour un
programme
C++ donné: http://assembly.ynh.io/
- De la difficulté de faire évoluer g++,
texte de Michael Larabel en 2013 :
http://www.phoronix.com/scan.php?page=news_item&px=MTI4NDU
- Depuis la version 4.8, gcc est écrit en
C++ plutôt qu'en C :
- Le #pragma poison, par lequel il est
possible d'informer le
compilateur que nous jugeons certaines fonctions
dangereuses :
http://blog.leafsr.com/2013/12/02/gcc-poison/
- En 2014,
Linus
Torvalds fait une critique sévère de certaines pratiques de génération
de code de gcc 4.9 :
https://lkml.org/lkml/2014/7/24/584
- Contribuer à l'implémentation de gcc, un
texte de 2014 :
http://developerblog.redhat.com/2014/09/16/improving-gccs-internals/
- Installer gcc pour
Windows,
par Jeff Preshing en 2014 :
http://preshing.com/20141108/how-to-install-the-latest-gcc-on-windows/
- Faire de gcc un Cross-Compiler,
par Jeff Preshing en 2014 :
http://preshing.com/20141119/how-to-build-a-gcc-cross-compiler/
- Yexte de 2014 par Dodji Seketeli qui explique le
fonctionnement du Address Sanitizer et du Thread Sanitizer livrés avec g++ depuis la version 4.8 :
http://developerblog.redhat.com/2014/12/02/address-and-thread-sanitizers-gcc/
- Forcer du code à être Out of Line avec g++, par Matt Godbolt en 2012 :
http://xania.org/201209/forcing-code-out-of-line-in-gcc
- gcc 5 et son ABI
pour C++ 11 :
- Utiliser g++ comme
compilateur
JIT, texte de 2015 :
http://developerblog.redhat.com/2015/04/07/jit-compilation-using-gcc-5-2/
- À propos de gcc 6 :
- Au début de 2017,
g++ offrait déjà un support complet de
C++ 17 :
https://gcc.gnu.org/projects/cxx-status.html#cxx1z
MSVC (Visual Studio)
Informations spécifiques à MSVC :
- Comment bien utiliser les Precompiled Headers (fichiers
.PCH) : http://blogs.msdn.com/b/vcblog/archive/2010/01/26/precompiled-header-files-in-visual-studio-2010.aspx
- Pourquoi IntelliSense est parfois lent, et comment améliorer
la situation : http://blogs.msdn.com/b/vcblog/archive/2011/03/29/10146895.aspx
- Utiliser le RunTime de C : http://support.microsoft.com/default.aspx?scid=http://support.microsoft.com:80/support/kb/articles/Q94/2/48.ASP&NoWebContent=1
- Comment le
compilateur de Microsoft implémente le Name Mangling :
http://mearie.org/documents/mscmangle/
- Intégration de C++ 11 :
http://blogs.msdn.com/b/vcblog/archive/2007/06/04/update-on-the-c-0x-language-standard.aspx
- Foire aux questions (du Code Project) :
http://www.codeproject.com/KB/cpp/45dayseries_5.aspx
- Petit historique : http://blogs.msdn.com/b/ricom/archive/tags/history+of+visual+studio/default.aspx
- Bogues :
- Intégrer un module d'analyse statique à l'environnement
de développement (article du Code
Project) : http://www.codeproject.com/KB/cpp/codeanalysis.aspx
- Comportement impoli face au respect du standard (critique sévère
de Danny Kalev, en 2005, avec laquelle je
suis bien d'accord) :
- Tirer profit de l'éditeur de liens, texte d'Ankit Asthana en
2013 :
http://blogs.msdn.com/b/vcblog/archive/2013/10/30/the-visual-c-linker-best-practices-developer-iteration.aspx
- Repérer des objets sur la pile :
http://blogs.msdn.com/b/vcblog/archive/2014/01/23/examining-stack-traces-of-objects-using-visual-studio-2013.aspx
- Des options de compilation méconnues et sous-estimées, rapportées par
l'équipe de développement de cet outil en 2014 :
http://www.drdobbs.com/cpp/the-most-underused-compiler-switches-in/240166599
- Compiler en parallèle, un texte de Bruce Dawson en
2014 :
http://randomascii.wordpress.com/2014/03/22/make-vc-compiles-fast-through-parallel-compilation/
- Support des processeurs AVX2, par Jim Hogg
en 2014 :
http://blogs.msdn.com/b/vcblog/archive/2014/02/28/avx2-support-in-visual-studio-c-compiler.aspx
- Comment compacter les fichiers .PDB, un
texte d'Ankit Asthana en 2014 :
http://blogs.msdn.com/b/vcblog/archive/2014/03/05/shrink-my-program-database-pdb-file.aspx
- À propos de la grande refactorisation du code source de Visual Studio,
texte de James McNellis en 2014 :
http://blogs.msdn.com/b/vcblog/archive/2014/06/10/the-great-crt-refactoring.aspx
- Depuis 2015, Visual Studio Online est
certifié ISO, comme le rapporte Bradley
Jones :
http://www.codeguru.com/blog/category/technology/visual-studio-online-is-now-iso-certified.html
- La technologie NuGet, pour automatiser le téléchargement et la
configuration d'outils tiers (incluant Boost) :
http://blogs.msdn.com/b/vcblog/archive/2015/02/13/find-your-favorite-library-for-c-in-nuget.aspx
- La version multiplateforme nommée Visual Studio Code :
- Depuis 2015, Visual Studio permet de compiler certains programmes
avec... Clang! Texte de Raman Sharma en 2015 :
http://blogs.msdn.com/b/vcblog/archive/2015/05/01/bringing-clang-to-windows.aspx
- Comment fonctionne <stdafx.h>, et comment
en tirer profit, texte d'Andrey Karpov en 2015 :
https://software.intel.com/en-us/blogs/2015/04/17/stdafxh
- Comment MSVC réalisait son Name Mangling, du moins en
2012. Notez que rien ne garantit le maintien de cette approche à
long terme, même si changer d'approche aurait des conséquences sur le plan
de la compatibilité entre les applications :
http://stellar.cct.lsu.edu/pubs/lasane_poster_2012.pdf
- Générer des .pdb correctement, selon John
Robbins en 2014 :
http://www.wintellect.com/devcenter/jrobbins/correctly-creating-native-c-release-build-pdbs
- Faire évoluer le code source d'un outil de cette envergure... qui
contient encore des commentaires du début des années
'80, ce n'est pas simple. Article de Jim Radigan en
2015 :
http://blogs.msdn.com/b/vcblog/archive/2015/09/25/rejuvenating-the-microsoft-c-c-compiler.aspx
- À propos de l'évolution du support de SFINAE
dans Visual Studio, et des difficultés rencontrées en chemin, par Andrew
Pardoe en 2016 :
https://blogs.msdn.microsoft.com/vcblog/2016/06/07/expression-sfinae-improvements-in-vs-2015-update-3/
- Texte de
Gabriel Dos Reis, Ulzii Luvsanbat et Andrew Pardoe, portant sur les options de compilation permettant de
contrôler la version du langage en fonction de laquelle la compilation
aura lieu :
https://blogs.msdn.microsoft.com/vcblog/2016/06/07/standards-version-switches-in-the-compiler/
- Programmer en
C++ pour Linux
avec Visual Studio, par Jeff Martin en 2016 :
https://www.infoq.com/news/2016/06/linux-cpp-vs2015
- Un nouvel optimiseur est inclus avec Visual Studio depuis
2016, comme l'explique Gratian Lup :
https://blogs.msdn.microsoft.com/vcblog/2016/05/04/new-code-optimizer/
- Utiliser Visual Studio pour réaliser des
tests unitaires, un texte de
Juan AG dans le Code
Project en 2016 :
http://www.codeproject.com/Tips/1085171/How-to-do-unit-testing-with-Cplusplus-in-Visual-St
- Pas à pas de développement pour Android avec Visual Studio, par Ian
Huff en 2016 :
https://blogs.msdn.microsoft.com/vcblog/2016/07/12/cocos2d-x-visual-studio-android-project/
- Critique de l'interface de Visual Studio, offerte par Jack Mott en
2016 :
https://jackmott.github.io/programming/tools/editor/ide/visual/studio/2016/07/11/decruft-visual-studio.html
- En 2016, Scott Hanselman propose quelques
trucs de productivité pour programmeuses et pour programeurs dans Visual
Studio :
http://www.hanselman.com/blog/VisualStudiosMostUsefulAndUnderusedTips.aspx
XCode
Spécifique à XCode :
Autres
- Autres compilateurs :
- Plateformes :
- Divers :
Comparatifs :
Boost
Un projet collectif pour pousser le langage à ses limites...
Blitz++
Bibliothèque axée sur les calculs à très haute
performance, de
Todd
Veldhuizen.
cereal
Une bibliothèque de sérialisation.
Cheerp
Un compilateur
C++ générant du code pour le
Web (autrefois Duetto)
cpp-netlib
Une bibliothèque C++ 11
par Dean Michael Berris (entre autres) pour réaliser des opérations
« réseau », sur Internet en particulier :
Duetto
Un compilateur
C++ générant du code pour le
Web (maintenant Cheerp)
Emscripten
Projet particulièrement intéressant, par lequel le code
C++
est compilé vers un sous-ensemble particulier de
JavaScript (asm.js),
puis déployé sur le Web.
Pour quelques exemples concrets :
FLTK
Une bibliothèque de fenêtrage graphique.
Folly
Une bibliothèque à code ouvert proposée par Facebook et
se voulant un complément à Boost.
JSONxx
Interfacer
C++ et
JSON :
JUCE
La bibliothèque Jules' Utility Class Extensions, qui m'a été
recommandée par Guillaume Drapeau, étudiant au
Collège
Lionel-Groulx à l'automne 2012.
Loki
À l'origine, l'oeuvre du très connu
Andrei Alexandrescu.
Modern C++
La bibliothèque Modern C++,
adaptée aux usages de C++ 11,
par Kenny Kerr :
Mordor
Une bibliothèque d'entrées/ sorties.
Polycode
Une bibliothèque
C++ gratuite et à code ouvert, enrichie d'une
interface Lua pour simplifier certaines opérations,
avec pour objectif de faciliter la génération d'effets visuels :
Qt
Bibliothèque
C++
très utilisée pour réaliser des applications graphiques portables.
Une bibliothèque par Niklas Gustafsson (entre autres), autrefois nommée
Casablanca, pour offrir et consommer des services de type
REST avec
C++ :
SFML
Une bibliothèque multimédia.
XSMELL
Bibliothèque pour faciliter l'interaction avec le format XML.
Wt
Une bibliothèque permettant de développer pour le Web.