Le C++ a bientôt la quarantaine et pourtant très actif en ce moment avec la finalisation de la prochaine version C++17. Profitons‐en pour faire le point avec une série d’articles sur le C++. Cette première dépêche nous dévoile la face cachée du C++, et donc peut intéresser tous les lecteurs LinuxFr.org. :-)
Sommaire
- Dépêches C++
- Partage
- Naissance d’un nouveau langage
- Création du comité de normalisation C++
- La puissance du C++
- Les membres du comité de normalisation
- Le standard ne peut être reproduit
- Le standard est payant
- Les anciens standards supprimés
- Ouf, les brouillons du comité
- Documentations C++ de référence
- Un standard ouvert
- Les versions C++
- Technical Specification (TS)
- Numérotation des documents
- Defect Report (DR)
- Un langage compliqué qui se simplifie
- Un processus de normalisation qui s’ouvre davantage
- Cycle de publication triannuel
- Implémentation de référence
- La suite…
- Droit d’auteur, remerciements et licences
Dépêches C++
Chère lectrice, cher lecteur de LinuxFr.org. Tes collègues sont en vacances et tu cherches à t’occuper ? Ou alors, tu es en vacances et l’actualité informatique te manque déjà ? Eh bien, voici une première dépêche d’une longue série sur le C++. Ainsi, tu seras en avance technologique dès la rentrée.
Résumé des dépêches :
Cette première dépêche, Les coulisses du C++, présente la naissance du langage, puis du standard, sa spécification non libre, payant, ouvert, délaissé au profit de son brouillon (draft), peu lu par les développeurs C++, évoluant lentement mais sûrement…
La deuxième dépêche, Genèse du C++17, reviendra sur les dernières réunions du comité de normalisation.
La troisième dépêche, Nouveautés C++17 du langage, présentera des changements du langage très intéressants : déduction des arguments
template
std::array a{1,2,3};
, décomposition du retour de fonctionauto [x, y] = f();
,namespace aa::bb{}
équivalent ànamespace aa{ namespace bb{}}
,if constexpr
sélectionne du code à la compilation, lambdaconstexpr
, lambda capture*this
,if(init;condition)
commefor(init;cond;inc)
, variablesinline
… Mais il faudra encore attendre pour l’intégration des Concepts, Modules, Syntaxe d’appel uniforme et Réflexion.La quatrième dépêche, Nouveautés C++17 de la bibliothèque standard, présentera les changements au niveau de la bibliothèque standard qui pourraient bousculer notre petite vie de développeur : algorithmes parallélisés,
std::string_view
,std::filesystem
,std::variant
,std::any
,std::optional
, les fonctions spéciales mathématiques… Mais, les intervalles (ranges), le réseau (networking) seront intégrés pour une version ultérieure.Bilan C++17 et attentes pour C++20. Version mineure ou majeure ? D’un côté, les améliorations sont nombreuses et appréciables. Mais de l’autre, aucune fonctionnalité majeure n’est intégrée, exceptées celles qui sont déjà disponibles dans Boost (donc déjà supportées par un large panel d’anciens compilateurs). Conséquences sur le processus de normalisation ? Qu’attendre de C++20 ? Intérêt du C++ aujourd’hui ? Et les langages alternatifs ? Comment s’impliquer ?
… d’autres dépêches à venir. :-)
Partage
Chère lectrice, cher lecteur LinuxFr.org. Tu souhaites donner un coup de main pour les dépêches suivantes ? Rejoins‐nous dans l’espace de rédaction collaborative sur LinuxFr.org. Un compte est nécessaire pour y accéder.
Après publication, les dépêches sont figées sur LinuxFr.org. Alors, pour continuer à améliorer ce contenu libre (fôtes, oublis, franglais, maladresses…), n’hésite à pas à aller sur le dépôt Git C++FRUG. C’est là aussi que tu trouveras les versions de ces dépêches les plus à jour :
- Les coulisses du standard C++ ;
- Genèse d’une version mineure ;
- Nouveautés du langage ;
- Nouveautés de la bibliothèque standard ;
- Bilan et attentes pour C++20.
Avec toutes nos contributions réunies, nous profiterons davantage de nos découvertes individuelles et nous offrirons un contenu CC BY-SA de qualité pour créer, par exemple, un article Wikipédia C++17 en français. :-)
Naissance d’un nouveau langage
À la fin des années 70, dans la cadre de sa thèse en Angleterre, le Danois Bjarne Stroustrup étudiait le paradigme de la programmation objet (avec le langage Simula). En 1979, aux Laboratoires Bell (États‐Unis), Bjarne propose de rajouter ce paradigme objet au langage C qu’il appela « C with Classes ».
Durant les années 80, les nouvelles fonctionnalités qui sont progressivement intégrées au tout nouveau C++ provoque un schisme entre les fans du C classique et les enthousiastes du C++.
Création du comité de normalisation C++
Dans la seconde moitié des années 80, le usenet comp.lang.c++ bouillonne, les premiers compilateurs C++ commencent à diverger, les développeurs ont du mal à écrire du C++ portable et dix ans après la création du C with Classes, des événements majeurs se produisent :
- avril 1989, le groupe de travail WG14 (comité du C) souhaite une normalisation du C++ ;
- mai 1989, à la demande du WG14, Andrew Koenig et Bjarne Stroustrup rédigent C++: as close as possible to C — but no closer, pour expliquer les divergences (incompatibilités) du C++ par rapport au C (ce qui est valide en C et qui ne l’est pas en C++) ;
- juillet 1989, Dmitry Lenkov explique la création d’un groupe de travail C++ officiel et d’y inclure d’office Bjarne Stroustrup ;
- février 1990, première réunion du comité ANSI C++ ;
- juin 1991, la réunion du comité ANSI C++ réunit de très nombreux participants non états‐uniens et la décision est prise de travailler conjointement avec le groupe de travail WG21 international.
Sigle | Définition |
---|---|
ISO | Organisation internationale de normalisation |
IEC | Commission électrotechnique internationale |
JTC 001 | Joint Technical Committee 001 |
SC 22 | Subcommittee 22 (sous‐comité 22) dédié aux langages de programmation, leur environnement et les interfaces avec les logiciels système |
WG 14 | Working Group 14 (groupe de travail 14) dédié au langage C (WG 14 sur le site de l’ISO) |
WG 21 | Working Group 21 dédié au C++ (WG 21 sur le site de l’ISO) |
La puissance du C++
En 1991, un nouveau paradigme, la programmation générique (template
) est ajouté, ainsi que les exceptions.
Le C++ devient alors un formidable langage alliant un découplage puissant et la performance du code exécutable optimisé par les compilateurs C adaptés (cette flexibilité est très bien illustrée dans l’excellent journal Expressions template pour les nuls de serge_sanspaille_). Mais cette compatibilité avec le langage C contraint à utiliser une grammaire pas toujours simple et un temps de compilation souvent long.
En 1994, Erwin Unruh présente au comité C++ un code source qui permet de calculer les nombres premiers à la compilation. Pour une partie des membres du comité, c’était une curiosité. Tandis que les autres membres se grattaient la tête et prirent conscience que l’on venait de découvrir, par hasard, que les templates du C++ permettaient le paradigme de la métaprogrammation !
Cette découverte ouvre la voie à d’extraordinaires optimisations en permettant au compilateur de réaliser des calculs à la compilation (à ne pas confondre avec la réalisation de calculs à l’initialisation ou durant l’exécution). Ces techniques atteignent des sommets avec boost::mpl
(2002), boost::proto
(2008) et le futur boost::simd
.
Au détriment d’une grammaire difficile, des erreurs faciles, d’une compilation lente et d’un débogage laborieux. Mais c’est un des rares langages qui offre au développeur autant d’abstraction et de performance en même temps. La passion de ce langage l’emporte. Avec le temps, les pièges sont connus, les techniques maîtrisés, et le C++ devient un vrai bonheur. :-)
De plus, ce langage bien vivant continue d’évoluer dans le bon sens. Les très nombreux outils qui orbitent autour de ce formidable langage continuent aussi d’apporter plein de nouvelles fonctionnalités. :-D
Les membres du comité de normalisation
En 1998, les membres finalisent le premier standard C++ : C++98. Soit une vingtaine d’années après la création du langage, et une dizaine d’années après l’initiative de normaliser celui‐ci.
Pour devenir membre du comité international de normalisation du C++, appelé officiellement ISO/IEC JTC 001/SC 22/WG 14/WG 21, il faut être membre d’une représentation ISO de son pays. Une dizaine de pays est représentée :
- États‐Unis (Task Group PL22.16 de l’ANSI) ;
- France (Comité de Normalisation Cpp de l’AFNOR) ;
- Allemagne (DIN) ;
- Royaume‐Uni (BSI) ;
- Canada (SCC) ;
- Finlande SFS ;
- Pays-Bas (NEN) ;
- Espagne (AENOR) ;
- Suisse (SNV) ;
- Italie (UNI).
C’était IBM qui payait les frais de représentation du Comité de Normalisation Cpp de l’AFNOR. Mais, au départ à la retraite des employés IBM membres C++, plus personne ne payait les frais de représentation et la France n’était plus officiellement représentée. Depuis peu, les choses sont rentrés dans l’ordre.
Une centaine de membres actifs se rencontrent quelque fois par an dans le cadre de la normalisation du C++ (essentiellement pour voter). Le plus gros du travail se fait à distance. Les membres C++ et les autres passionnés du C++ se rencontrent également lors des grandes rencontres du C++ : CppCon, C++Now, Meeting C++…
Dans l’intérêt des utilisateurs du C++, les membres du comité accordent au comité et à l’ISO une licence mondiale, non exclusive, irrévocable, permettant l’octroi d’une sous‐licence transférable pour l’affichage du contenu, la reproduction, l’adaptation, la distribution, la création de travaux dérivés à des fins commerciales ou non commerciales. En 2012, cette règle a notamment été rappelée à IBM, Intel et Oracle (voir N3423 §2.4).
Le standard ne peut être reproduit
Comme la plupart des documents publiés par l’ISO, la mention de droit d’auteur indique que la reproduction n’est pas autorisée :
© ISO/IEC 2014 — All rights reserved
COPYRIGHT PROTECTED DOCUMENT
All rights reserved. Unless otherwise specified, no part of this publication may be reproduced or utilized otherwise in any form or by any means, electronic or mechanical, including photocopying, or posting on the internet or an intranet, without prior written permission.
Permission can be requested from either ISO at the address below or ISO’s member body in the country of the requester.
Cette position est la même pour les autres langages gérés par l’ISO (Fortran, C…). Mais aussi pour Java, C# et de nombreux autres.
Dans la pratique, cela ne gène pas les développeurs de ces langages. Ce type de mention empêche juridiquement la reproduction du standard (même un paragraphe ou un code d’exemple). Des sites qui respectent à la lettre le droit d’auteur, comme Wikipédia, refusent de contenir la reproduction même partielle d’un tel document. D’autres sites, comme stackoverflow, sont plus pragmatiques.
Notons que d’autres langages de programmation ont des spécifications libres :
- les documentations officielles de Rust sont sous licence Apache 2.0 ou licence MIT ;
- la spécification de Go est sous licence CC-BY 3.0 ;
- celle de Python… c’est un peu plus compliqué, simplifions en mentionnant juste la licence PSF (Python Software Foundation).
Le standard est payant
De plus, obtenir le standard C++ coûte cher. Même la version PDF téléchargée :
- 182 € sur le site de l’ISO (198 francs suisses) ;
- 238 € sur le site de l’ANSI (265 US$).
(voir aussi d’autres sites vendant le standard)
Les anciens standards supprimés
Encore plus incroyable : chaque nouvelle publication du standard révoque ou supprime (withdraw) la version précédente :
- C++98 ISO/IEC 14882:1998 supprimé ;
- C++03 ISO/IEC 14882:2003 supprimé ;
- C++11 ISO/IEC 14882:2011 supprimé.
L’embêtant est que la plupart des projets C++ actuellement utilisés sont codés en C++03. Et la plupart des entreprises utilisent encore aujourd’hui des versions de compilateurs qui ne supportent pas (ou partiellement) le standard C++11.
Alors, comment s’informer du standard C++ utilisé par le bon vieux compilateur que l’on est obligé d’utiliser ? Aller les consulter à l’INRIA ? Par exemple, cet utilisateur a besoin d’acheter le standard C++03 qui n’est plus à la vente.
Ouf, les brouillons du comité
Les documents en cours de rédaction (draft) du comité de normalisation sont gratuitement accessibles :
Quand le comité de normalisation C++ valide un brouillon (nouvelle version C++), ce brouillon bénéficie de dernières corrections. Puis, le comité le fournit à l’ISO qui change la mise en forme pour en faire une version officielle.
Documentations C++ de référence
Les standards C++ (officiels ou brouillons) ne sont pas simples à lire. Ces documents utilisent une terminologie très spécifique pour une spécification très rigoureuse. En fait, ces documents sont surtout utiles aux développeurs des compilateurs et à ceux qui implémentent des bibliothèques standards (std::
).
Les utilisateurs du C++ (langage et bibliothèque standard) utilisent historiquement des livres (souvent ceux écrits par Bjarne Stroustrup et Scott Meyers) et plus récemment des sites Web :
- fr.cppreference.com en français sous double licence CC BY-SA 3.0 et GFDL (disponible en différentes langues, la version en anglais est la plus à jour) ;
- cplusplus.com seulement en anglais et n’autorisant pas la reproduction (pas de licence libre) ;
-
… liste à compléter dans les commentaires.
Un standard ouvert
Note des auteurs de cette dépêche : Nous avons un profil plutôt technique (développeurs) et non pas juriste. Ce chapitre contient peut‐être des erreurs importantes, mais nous avons tenté de rédiger ce qui nous semble correct… Nous n’avons pas pris le risque de nous aventurer à comparer C++ avec Java, C#… Celles et ceux qui connaissent bien le sujet, merci de nous éclairer dans les commentaires. :-)
Le C++ est bien un standard ouvert, sans brevet logiciel, sans propriété intellectuelle. C’est‐à‐dire que le langage et sa bibliothèque standard (API) peuvent être implémentés librement.
De même, le nom C++ n’est pas une marque, ni aucun type de propriété intellectuelle. À la différence de la marque JavaScript® déposée par Oracle, ou des marques non déposées Rust™, Go™ (et une autre Go™).
Et, même si C++ n’est pas encore aussi ouvert que peut l’être Rust™, de nombreux membres du comité améliorent constamment la façon de travailler pour plus de transparence et plus de proximité avec les utilisateurs C++, comme l’utilisation d’un compte GitHub.
Les versions C++
Même si le langage naît à la fin des années 1970, il n’est normalisé que vingt ans plus tard, afin d’arrêter la profusion de versions C++ incompatibles.
Le tableau suivant liste les différentes versions C++ normalisées, ainsi que le brouillon C++17 en cours de consolidation. Nous pouvons remarquer le saut considérable du nombre de pages entre C++03 et C++11.
Version | Pages |
---|---|
C++98 ISO/IEC 14882:1998 1998-09-01 | 776 pages |
C++03 ISO/IEC 14882:2003 2003-10-15 | 786 pages (+ 1 %) |
C++11 ISO/IEC 14882:2011 2011-09-01 | 1356 pages (+ 73 %) |
C++11 Draft N3376 2012-02-28 | 1 324 pages |
C++14 Draft N4296 2014-11-19 | 1 368 pages (+ 3 %) |
C++17 Draft N4606 2016-07-12 | 1 586 pages (+ 16 %) |
Attention, ce dernier lien est celui du brouillon C++17 le plus récent lors de la rédaction de cette dépêche. Cette version sera certainement obsolète quelques mois après la publication de cette dépêche.
Ceux qui ont l’œil aiguisé remarqueront que le brouillon N3376 représentant la version C++11 a été publiée (28/02/2012) après la norme officielle 14882:2011 (1/09/2011). Ce N3376 correspond en fait à des corrections éditoriales mineures apportées au brouillon N3291 fourni à l’ISO. C’est le premier brouillon de post‐publication, le first post‐publication draft en anglais.
Technical Specification (TS)
Les spécifications techniques, notées TS pour Technical Specification, sont les documents de travail les plus importants du comité de normalisation. Ces documents sont la base de discussion des évolutions du standard.
Généralement, les spécifications techniques sont composées de deux parties :
- la première partie donne les motivation du changement (l’avantage d’avoir telle fonctionnalité dans le C++ avec des exemples de code) ;
- la seconde partie liste toutes les modifications à appliquer au standard C++ en cours de rédaction (au draft).
Numérotation des documents
À partir de 1990, le comité numérote ses documents officiels sur quatre chiffres en commençant par le n°0000
. Ce numéro est incrémenté pour chaque nouveau document ou nouvelle révision d’un document.
En 1991, le préfixe N est adoptée, et le premier document à en profiter est le N0007
. N comme Number (numéro).
Ces numéros xxxx
peuvent paraître obscurs, mais sont très importants, car ils sont utilisés comme références rigoureuses aux fonctionnalités C++ :
- dans les échanges entre membres du comité ;
- par de nombreux sites Web.
Pour faire le lien entre les principales spécifications techniques (TS) et leur numéro xxxx
de révision la plus récente, une astuce est d’utiliser la page experimental sur cppreference.com.
Voici, en exemple, l’historique des TS à propos des Modules :
Année | Numéro | Titre | Révision |
---|---|---|---|
2004 | N1736 |
Modules in C++ | 1 |
2005 | N1778 |
Modules in C++ | 2 |
2006 | N1964 |
Modules in C++ | 3 |
2006 | N2073 |
Modules in C++ | 4 |
2007 | N2316 |
Modules in C++ | 5 |
2012 | N3347 |
Modules in C++ | 6 |
2014 | N4047 |
A Module System for C++ | 1 |
2014 | N4214 |
A Module System for C++ | 2 |
2015 | N4465 |
A Module System for C++ | 3 |
2016 | P0142R0 |
A Module System for C++ | 4 |
Remarquons le changement de nommage pour la révision de 2016. Le nouveau nommage PxxxxRx
a été mis en place en septembre 2015 avec un P comme Proposal (Proposition). Progressivement, les PxxxxRx
doivent remplacer les Nxxxx
. L’avantage est de conserver le même numéro xxxx
pour toutes les révisions du document.
Comme en C++, on commence par compter la première Révision à partir de R0
. L’exemple ci‐dessus est un cas particulier : R0
est bien la première révision du nouveau format, mais la quatrième révision des documents A Module System for C++.
Defect Report (DR)
Même après moult relectures par les meilleurs experts C++ au monde, avec toutes les précautions prises par les institutions officielles, les publications des standards C++ contenaient 5 000 anomalies ayant fait l’objet, chacune, d’un rapport d’anomalie (Defect Report) !
- 2 200 rapports d’anomalie au niveau du langage ;
- 2 750 rapports d’anomalie au niveau de la bibliothèque standard.
Lors de ses réunions, le comité discute des rapports d’anomalie et devrait publier régulièrement des rectificatifs techniques (Technical Corrigendum). Mais le comité n’a jamais publié aucun rectificatif technique à ce jour !
Par exemple, le comité avait approuvé un rectificatif technique en 2003. Et, finalement, le comité publie comme étant une nouvelle version du standard, le C++03 :
A technical corrigendum was approved in 2003, and the standard was published again as the ISO/IEC 14882:2003 edition, published 2003-10-16.
Bon, c’est vrai, à la décharge du comité, ce rectificatif technique de 2003 contenait une nouvelle fonctionnalité : Value initialization. C’était la dernière fois, que le comité avait travaillé sur un rectificatif technique.
Néanmoins, même si le comité ne publie aucun rectificatif technique, les rapports d’anomalie approuvés doivent être pris en compte par les compilateurs. Des sites comme cppreference.com listent les changements induits par ces rapports d’anomalie :
- quatre rapports d’anomalie pour l’opérateur ternaire
cond ? a : b
; - trois rapports d’anomalie pour les variables membres ;
- trois rapports d’anomalie pour
return
; - deux rapports d’anomalie pour
throw
…
Les versions officielles du C++ deviennent donc vite obsolètes après leur publication, car ces documents sont figés et ne bénéficient pas des corrections apportées par les rapports d’anomalie. Par conséquence, celui qui achète une version officielle du standard C++, devrait aussi suivre tous les rapports d’anomalie approuvés par le comité…
Pour terminer, notons aussi que des rapports d’anomalie approuvés lors d’une réunion du comité se retrouvent ne plus être approuvés lors de la réunion suivante.
Alors, chère lectrice, cher lecteur de LinuxFr.org, es‐tu étonné(e) par ce fonctionnement. Connais‐tu d’autres façons de maintenir un tel document ? Comment cela se passe‐t‐il dans d’autres langages de programmation ? As‐tu des idées d’amélioration ?
Un langage compliqué qui se simplifie
Par rapport à tous les langages utilisés en production, avouons que le C++ est peut‐être le langage le plus complexe que l’humanité ait pu inventer ! Les développeurs C++ en ont bien conscience. C’est peut‐être la raison pour laquelle les participants aux meetups se montrent souvent bienveillants à l’égard des autres langages. Les développeurs C++ aimeraient un langage plus simple, à condition de « ne pas sacrifier la sacro‐sainte performance ».
Le C++ est tellement vaste et semé de subtilités, que les développeurs C++ n’en connaissent bien souvent qu’une petite portion. Ainsi, lors d’un entretien de Bjarne Stroustrup (un des experts C++ les plus actifs du comité), celui‐ci avait indiqué qu’il connaissait seulement 60 % du standard. Ceux qui maîtrisent vraiment le C++ sur le bout des doigts sont appelés des juristes du C++, ou plus généralement « language lawyers » en anglais (ils ne sont pas forcément de bons développeurs).
Pour inverser la tendance, certains membres du comité de normalisation, comme Bjarne Stroustrup (le créateur du C++) souhaitent accélérer l’évolution du langage vers un C++ plus intuitif, plus sûr, et toujours plus performant.
Un processus de normalisation qui s’ouvre davantage
C’est dans ce cadre que l’initiative C++ Core Guidelines (Recommandations C++) a été lancée. A la fois pour proposer un sous‐ensemble du C++ plus sûr, plus simple et sans sacrifier les performances. Mais aussi pour faire pression sur les membres du comité pour adopter les idées de la Guidelines Support Library (Bibliothèque de support des recommandations) activement implémentée sur le dépôt Git de Microsoft, mais aussi sur le dépôt Git de Martin Moene qui est compatible avec beaucoup plus de compilateurs.
Pour faciliter les contributions au standard, le comité a aussi migré sur GitHub. Le standard en cours de rédaction/maintenance est sur le dépôt Git draft (brouillon). L’intégration d’une fonctionnalité au brouillon (standard en cours de rédaction) est souvent formalisée par une fusion (merge) d’une branche Nxxxx vers la branche master.
Cycle de publication triannuel
Après la version majeure C++98 (et son correctif C++03), un nouveau standard C++ devait être publié dans les années suivantes. Comme sa date de publication n’était pas fixée, cette version a été nommée temporairement C++0x.
Mais, avec le manque de maturité de certaines fonctionnalités et les requêtes continuelles d’ajout de nouvelles fonctionnalités, le comité de normalisation n’arrivait pas à stabiliser le standard. Et, finalement, C++0x a été publié en 2011 ! Ne perdons pas la face, 0x = 11
est correct mathématiquement avec x = B
en hexadécimal :-)
Afin d’éviter tout nouveau glissement, le comité a alors décidé de publier un nouveau standard C++ tous les trois ans, en figeant les fonctionnalités l’année n - 1. Avec un cycle d’une version majeure (C++11) suivie d’une version mineure (C++14).
Malgré des dates de publication figées, les appellations C++1y (pour C++14) et C++1z (pour C++17) perdurent. Par exemple, l’option de compilation -std=c++1z
ou l’étiquette c++1z sur stackoverflow.
Les membres du comité de normalisation utilisent le terme C++17 (et non pas C++1z). Soyons confiants, C++1z verra bien le jour en 2017 (et non pas en 2018, ni après).
Implémentation de référence
Le comité ne fournit pas plus d’implémentation de référence ou de preuve de concept. Mais les membres du comité travaillent en étroite collaboration avec les éditeurs de compilateurs (notamment GCC et LLVM/Clang).
Néanmoins, en 1999, des membres du comité ont quand même créé le projet Boost.org afin de proposer et valider des implémentations de fonctionnalités candidates de la bibliothèque standard. Ainsi, dès 2005, la publication du brouillon C++ TR1 est en lien direct avec les développements fournis par le projet Boost.org.
D’ailleurs, c’est devenu le parcours classique pour les nouveaux composants de la bibliothèque standard. C’est, par exemple, le cheminement de std::filesystem
. Et plus récemment, quand le Français Joël Falcou a proposé la fonctionnalité SIMD, les membres du comité l’ont invité à intégrer Boost dans un premier temps. Cela permet également de vérifier la popularité d’un composant.
La suite…
La prochaine dépêche va nous permettre d’entrer enfin dans le vif du sujet C++17.
Merci de nous donner un coup de main à la rédaction des prochaines dépêches C++17. Pour participer ou lire en avance les prochaines dépêches :
- se rendre sur l’espace de rédaction LinuxFr.org (recommandé pour la rédaction) ;
- directement sur le dépôt Git materials du C++FRUG (Groupe des utilisateurs C++ francophones).
Droit d’auteur, remerciements et licences
Le texte de cette dépêche est protégé par le droit d’auteur la gauche d’auteur et réutilisable sous licence CC BY-SA 4.0. Merci aux nombreux auteurs sur le dépôt Git et sur LinuxFr.org : olibre, duckie, rom1v, Oliver H, cracky, Lucas, palm123, Adrien Dorsaz, Martin Peres, RyDroid, M5oul, Anthony Jaguenaud et Benoît Sibaud. Merci aussi à Klaim, Édouard A, rewind, David Demelier, gasche, freem et ®om pour leurs commentaires pertinents.
Aussi un immense merci à mes collègues développeurs qui, à défaut de m’aider à la rédaction, ont illustré cette dépêche (et les dépêches suivantes) avec des dessins humoristiques sous licence libre : Ziyue, AKP, Florent B, et Jae-Zun. Merci aussi à Dominic Alves pour son dessin C++ sous licence libre. Merci à Theppitak Karoonboonyanan pour maintenir la police de caractères Purisa.
- L’évolution du langage C++ est inspirée d’une œuvre dont les droits de réutilisation n’ont pas été identifiés. La réalisation sous licence CC BY-SA 3.0 est de Florent B (d’après une première ébauche de Jae-Zun) et utilise la police de caractères Purisa maintenue par Theppitak Karoonboonyanan sous licence GPL v2 ;
- Le logo C++ Francophonie (disponible sur commons.wikimedia.org) est dans le domaine public (même si ce n’est théoriquement pas possible en droit d’auteur français) ;
- Le dessin du C++ vissé sur de l’électronique est de Dominic Alves sous licence CC BY-SA 2.0 (2007).
Merci d’avance de l’aide apportée sur les prochaines dépêches C++17 en cours de préparation : Micka pour ses exemples utiles et AMB007 pour les bogues trouvés dans les codes C++ d’exemple.
Aller plus loin
- Contenu Markdown de cette dépêche sur le dépôt Git du C++FRUG (402 clics)
- Contenu Markdown de la deuxième dépêche : C++17 — Genèse d’une version mineure (340 clics)
- Contenu Markdown de la troisième dépêche : C++17 — Nouveautés au niveau du langage (535 clics)
- Contenu Markdown de la quatrième dépêche : C++17 — Nouveautés au niveau de la bibliothèque standard (305 clics)
- Contenu Markdown de la cinquième dépêche : Bilan C++17 et attentes C++20 (345 clics)
- Article Wikipédia C++ (221 clics)
- Site officiel du comité de normalisation du C++ — Page expliquant le fonctionnement du comité (128 clics)
- Dépôt Git officiel du standard C++ en cours de rédaction (133 clics)
- CppReference, wiki libre (CC-BY SA 3.0 et GFDL) pour la documentation C et C++ (153 clics)
- Dépêche 2012 par nazcafan : Codeurs, traducteurs, CppReference a besoin de vous (113 clics)
- Journal 2016 par serge_sans_paille : [C++14 ] Expressions template pour les nuls (210 clics)
# Dépêche actuelle et la suite
Posté par Oliver (site web personnel) . Évalué à 10. Dernière modification le 21 août 2016 à 00:30.
Cette dépêche est figée (sauf gentillesse des modérateurs pour de grosses erreurs).
Alors merci de corriger les oublis, imperfections, fôtes, franglais, mensonges, maladresses, irritations… sur le dépôt Git :
https://github.com/cpp-frug/materials/blob/gh-pages/news/2016_n1_Coulisses-du-standard.md
(même des années après la publication).
Donc, c'est aussi là qu'il faut aller pour lire la version la plus à jour de cette dépêche ;-)
La rédaction de la dépêche suivante "C++17, Genèse d'une version mineure" se passe sur LinuxFr.org :
https://linuxfr.org/redaction/news/c-17-genese-d-une-version-mineure
(un compte LinuxFr.org est nécessaire pour accéder à l'espace de rédaction collaborative)
C'était la dépêche originelle qui a été tronçonnée en plusieurs articles, du coup elle en est déjà à 1241 éditions !
(j'avais commencé la rédaction fin juin 2016)
Un immense merci à tous ceux qui m'ont aidé à la rédaction de cette dépêche. Tout le monde n’apparaît pas parmi les auteurs en entête de dépêche car leurs contributions ont été apportées sur la dépêche originelle avant le tronçonnage ou proviennent du dépôt Git. Voici la liste complète des auteurs, même pour des changements mineurs :
J'ai beaucoup apprécié les modérateurs LinuxFr.org qui ont patiemment corrigé mes tournures de phrases. Pour anecdote, à deux fois au mois de juillet, j'avais cru avoir terminé la rédaction de la dépêche originelle (avant le tronçonnage) et j'avais donc posté un message pour une ultime relecture avant soumission : Benoît Sibaud avait tout relu, tout corrigé… et finalement ce n'était pas encore prêt ! Merci aussi aux nombreuses aides, notamment à Klaim et Édouard A du C++FRUG pour m'avoir donné de nombreux conseils par e-mail ;-)
Les illustrations francophones réalisées spécialement pour l'occasion sont sympas, non ?
Elles proviennent de mes collègues développeurs C++ dont Ziyue, Florent B et AKP :-D
https://github.com/cpp-frug/materials/blob/gh-pages/images/README.md
Tout est sous licence libre et je peux fournir les fichiers XCF si besoin…
Merci de partager vos dessins si vous vous avez des idées ;-)
Commentaire sous licence Creative Commons Zero CC0 1.0 Universal (Public Domain Dedication)
[^] # Re: Dépêche actuelle et la suite
Posté par n0wic . Évalué à -10.
Ca fait un peu bricolage/remplissage ou panneau publicitaire c'est pas beau.
[^] # Re: Dépêche actuelle et la suite
Posté par n0wic . Évalué à -10.
Les livres par exemple ne peuvent pas être disposé sur une seul ligne plutot qu'en colonne ?
[^] # Re: Dépêche actuelle et la suite
Posté par Oliver (site web personnel) . Évalué à 4.
Pour illustrer cette série de dépêches C++, mes collègues m'ont dessiné des images.
C'est ce que j'appelle les illustrations francophones réalisées spécialement pour l'occasion.
Elles sont toutes disponible sur le dépôt Git :
https://github.com/cpp-frug/materials/blob/gh-pages/images/README.md
(mais je n'ose pas y déposer les fichiers XCF volumineux, vous pouvez me les réclammer)
Pour info, les illustrations des livres C++ n'ont font pas partie.
Le moteur de rendu de LinuxFr.org pourrait les afficher sur la même ligne :
![livre _The C++ Programming Language_](https://isocpp.org/files/img/tcpl4e.png) ![livre _A Tour of C++_](https://isocpp.org/files/img/tour.jpg) ![livre _The C++ Programming Language (Special 3rd Edition)_](http://www.pdfdrive.net/assets/thumbs/069/069cb03b9970368939ef71f49534cc4b-s.jpg)
Mais LinuxFr.org insère un retour chariot entre chaque images :
GitHub les affiche bien sur la même ligne :
https://github.com/cpp-frug/materials/blob/gh-pages/news/2016_n1_Coulisses-du-standard.md#documentations-c-de-r%C3%A9f%C3%A9rence-
Mais ce dernier alignes toutes les images sur la gauche, ce qui n'est pas toujours joli.
Commentaire sous licence Creative Commons Zero CC0 1.0 Universal (Public Domain Dedication)
[^] # Re: Dépêche actuelle et la suite
Posté par n0wic . Évalué à -3. Dernière modification le 21 août 2016 à 23:50.
Je tiens à m'excuser je veux éviter toute confusion les illustrations sont très bien je parlais simplement des livres et de leur alignement.
De plus j'aurai pu mentionner que j'ai apprécié la lecture qui donne envit de lire du C++ à des gens qui ne lisent pas le C++.
En parcourant rapidement rien que cette histoire de template est allucinante pour moi qui fait du ladder, et la photo du dévelopeur est plutot cool, qui est ce ?
[^] # Re: Dépêche actuelle et la suite
Posté par Benoît Sibaud (site web personnel) . Évalué à 9.
Hmm on peut mais bon niveau Markdown c'est tordu (tableau avec des en-têtes vides).
[^] # Re: Dépêche actuelle et la suite
Posté par Oliver (site web personnel) . Évalué à 2.
Merci Benoît pour l'astuce. Veux-tu bien apporter cette correction à la dépêche ?
Il faudrait faire de même avec les images CppCon - C++Now, et tout en bas avec GCC - LLVM.
Merci :-)
Commentaire sous licence Creative Commons Zero CC0 1.0 Universal (Public Domain Dedication)
[^] # Re: Dépêche actuelle et la suite
Posté par Benoît Sibaud (site web personnel) . Évalué à 7.
Fait. Au passage tu peux récupérer le code Markdown si tu veux détecter les modifications post-modération (j'en ai fait plusieurs pour enlever la majuscule sur les langues et sur d'autres aspects orthographiques mineurs).
[^] # Re: Dépêche actuelle et la suite
Posté par Oliver (site web personnel) . Évalué à 5.
C'est super sympa, merci Benoît pour tes contributions :-)
Le contenu Markdown de la dépêche LinuxFr.org est régulièrement synchronisé avec la version sur le dépôt Git ;-)
En ce moment, je suis en vacances avec la connexion de mon mobile.
Et c'était plus facile de contribuer sur le dépôt Git local que sur l'espace de rédaction LinuxFr.org.
Alors je me demandais si chaque dépêche LinuxFr.org ne pouvait pas être un dépôt Git.
En mode rédaction :
Commentaire sous licence Creative Commons Zero CC0 1.0 Universal (Public Domain Dedication)
[^] # Re: Dépêche actuelle et la suite
Posté par barmic . Évalué à 10.
20 ans d'évolution du HTML/CSS pour ressortir une mise en page en tableau… C'est dommage.
Tous les contenus que j'écris ici sont sous licence CC0 (j'abandonne autant que possible mes droits d'auteur sur mes écrits)
[^] # Re: Dépêche actuelle et la suite
Posté par Benoît Sibaud (site web personnel) . Évalué à 6.
Le Markdown n'a que 12 ans, c'est pour ça :). (enfin 2 ans seulement pour CommonMark et quelques mois pour les dernières RFC).
[^] # Re: Dépêche actuelle et la suite
Posté par kantien . Évalué à 6.
En partant d'un commentaire sur un autre journal, je suis tombé sur cette présentation du protocole HTTP2. Le code se trouve sur github et est au format markdown. Au chapitre 2, par exemple, on peut voir des illustrations flottantes autour de certains paragraphes. Je me suis alors demandé comment il faisait cela, et en fait pour les images ils permettent le code
html
avec des propriétés CSS :(source)
Ne pourriez-vous pas faire de même ? Au moins au niveau de l'équipe de modération avant publication, tant il est vrai que la mise en page à base tableau c'est un peu old-school. :-P
Sapere aude ! Aie le courage de te servir de ton propre entendement. Voilà la devise des Lumières.
[^] # Re: Dépêche actuelle et la suite
Posté par Kangs . Évalué à 4.
Vraiment rigolo :)
Continuez….
[^] # Re: Dépêche actuelle et la suite
Posté par barmic . Évalué à 7.
Elles sont très sympas :)
Par contre quel est l'intérêt d'écrire (ici)
plutôt que
Je comprends bien le mot clef
auto
et le pseudo constructeur à base de{}
, mais je vois pas ce que ça apport ici dans une boucle.Tous les contenus que j'écris ici sont sous licence CC0 (j'abandonne autant que possible mes droits d'auteur sur mes écrits)
[^] # Re: Dépêche actuelle et la suite
Posté par Renaud Casenave-Péré . Évalué à 1.
De la même manière,
"\n"
ou<< std::endl
?[^] # Re: Dépêche actuelle et la suite
Posté par whity . Évalué à 8.
std::endl
force le flush du flux, ce qui n’est pas le cas de\n
. Donc dans le cas présent, il y a une réelle différence.Mes commentaires sont en wtfpl. Une licence sur les commentaires, sérieux ? o_0
[^] # Re: Dépêche actuelle et la suite
Posté par n0wic . Évalué à -10.
Tu préfères le vert ou tu préfères le gris ?
[^] # Re: Dépêche actuelle et la suite
Posté par barmic . Évalué à 5.
Euh… Je préfère un type explicite surtout quand la version inférée est plus longue. Question de lisibilité.
Là la seule chose que je vois pour cette solution, c'est de montrer qu'on fait du C++11 ou supérieur.
Tous les contenus que j'écris ici sont sous licence CC0 (j'abandonne autant que possible mes droits d'auteur sur mes écrits)
[^] # Re: Dépêche actuelle et la suite
Posté par whity . Évalué à 0.
C’est dans l’idée du AAA (« Almost Always Auto »). par exemple.
Le seul bénéfice que j’y vois dans le cas présent (la boucle for), c’est de s’habituer à utiliser auto.
Mes commentaires sont en wtfpl. Une licence sur les commentaires, sérieux ? o_0
[^] # Re: Dépêche actuelle et la suite
Posté par Oliver (site web personnel) . Évalué à 4.
auto i{0}
C'est barmic qui a la meilleure intuition pour la raison du
auto i{0}
à la place deint i=0
:C'est une nouveauté de C++17 introduite par la Technical Specification N3922 "New Rules for auto deduction from braced-init-list" (http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2014/n3922.html). Cette image doit illustrer cette nouveauté (et donc l'exemple fonctionne avec C++17 seulement). Mais n'en parlons pas trop tôt, gardons cette discussion pour la dépêche n°3…
Promis, je vais générer une autre image avec :
std::endl
Et c'est whity qui a trouvé une des raisons du
"\n"
à la place de<< std::endl
. Mais la raison principale est l'espace utilisé sur le tableau. Je voulais le code le plus simple, le moins large, avec le moins d’accolades…Qui préfère l'écriture ci-dessous ?
Ou encore, cette autre alternative ?
L'objectif étant de trouver un bon compromis entre élégance du C++ et la rapidité de compréhension du code.
Promis aussi, je vais mettre ce gros fichier XCF (178 Mo) quelque part pour que vous puissiez facilement personnaliser le texte du tableau ;-)
Commentaire sous licence Creative Commons Zero CC0 1.0 Universal (Public Domain Dedication)
[^] # Re: Dépêche actuelle et la suite
Posté par barmic . Évalué à 4.
Ne te fais pas cette peine. C'était vraiment pour savoir s'il y avait autre chose qui m’échappait.
Tous les contenus que j'écris ici sont sous licence CC0 (j'abandonne autant que possible mes droits d'auteur sur mes écrits)
[^] # Re: Dépêche actuelle et la suite
Posté par Oliver (site web personnel) . Évalué à 3.
Comme promis, voici le fichier source XCF (104 Mo) :
https://commons.wikimedia.org/wiki/File:Cpp-ecole-primaire_copyright-Ziyue-OliverH-2016_CC-BY-SA-3.xcf
Et les six images générées = deux format (JPEG et WebP) et trois codes C++ écrits sur le tableau :
int i=0
(C++98) ;auto i{0}
(C++17) ;std::fill_n()
(idée de devnewton).Tout cela est aussi indiqué dans le fichier README.md du dépôt Git
Commentaire sous licence Creative Commons Zero CC0 1.0 Universal (Public Domain Dedication)
[^] # Re: Dépêche actuelle et la suite
Posté par n0wic . Évalué à -10. Dernière modification le 23 août 2016 à 22:38.
«Je vais te dire non !» Si tu as fait le choix de cette syntaxe c'est que tu n'as rien compris à le C++.
Si tu enseignes le C++ tu ne peu pas commencer par simplifier une structure standardisée par celle là qui introduit un faux ami : auto.
Tu ne peu pas faire cette impasse. Cela montre que tu n'as pas de recul sur ton texte et lorsque tu vas faire une implémentation en septembre ca ne sera pas bon.
Il faut initialiser la variable telle que i = 0 dans ta fonction main().
Si tu ne fais pas cela tu fais une impasse importante sur le vrai enjeu du comment du pourquoi tu crée ta boucle for avec C++.
Je développement un programme pour automatiser une procédure, je choisi une syntaxe lisible et simple à comprendre, je ne tombe pas dans le piège grossier qui est tendu devant mes pieds. Pourquoi apprendre l'obfusquation de code au moment où développement des concepts fondamentaux est de mise ?
Parfois on dit que pour expliquer un concept il faut faire l'abstraction de choses importantes, là tu ne peux pas ne pas l'expliquer ou tu crée une zone d'ombre dans l'esprit de ton interlocuteur qui est trop importante pour la suite.
[^] # Re: Dépêche actuelle et la suite
Posté par G.bleu (site web personnel) . Évalué à 5.
Tu devrais surtout bosser ta syntaxe sur tes posts…
[^] # Re: Dépêche actuelle et la suite
Posté par n0wic . Évalué à -9.
Si j'avais utilisé HTTPS correctement je n'aurai aucun doute sur le fait c'est bien moi qui ai pu écrire une telle phrase…
«Si je développe un programme pour automatiser une procédure, je choisis une syntaxe lisible et simple à comprendre»
[^] # Re: Dépêche actuelle et la suite
Posté par devnewton 🍺 (site web personnel) . Évalué à 7.
Il y a plus simple:
std::fill_n(std::ostream_iterator<string>(std::cout), 100, "Je ne dois pas jeter d'avion en papier en classe");
Le post ci-dessus est une grosse connerie, ne le lisez pas sérieusement.
[^] # Re: Dépêche actuelle et la suite
Posté par barmic . Évalué à 10.
Qu'est-ce que c'est ignoble…
Quand on sait qu'en ruby c'est :
Tous les contenus que j'écris ici sont sous licence CC0 (j'abandonne autant que possible mes droits d'auteur sur mes écrits)
[^] # Re: Dépêche actuelle et la suite
Posté par kantien . Évalué à 1.
Faire de l'adverbe un attribut de son complément, voilà une chose bien étrange. Et après on s'étonne d'un tel état de fait : « Au détriment d’une grammaire difficile, des erreurs faciles, d’une compilation lente et d’un débogage laborieux », lorsque l'on cherche à mettre en place des structures grammaticales un peu évoluées dans le paradigme de la POO.
Ils sont bien étranges ces créateurs de grammaires ex nihilo, au lieu de se contenter de la découvrir en remontant à la source. :-P
Sapere aude ! Aie le courage de te servir de ton propre entendement. Voilà la devise des Lumières.
[^] # Re: Dépêche actuelle et la suite
Posté par xcomcmdr . Évalué à 2.
C'est pourtant très lisible et très élégant.
(Ruby lover inside)
"Quand certains râlent contre systemd, d'autres s'attaquent aux vrais problèmes." (merci Sinma !)
[^] # Re: Dépêche actuelle et la suite
Posté par kantien . Évalué à 1. Dernière modification le 24 août 2016 à 17:23.
Arf, j'ai mal vendu mon lien ! :-/
C'était une boutade, visiblement ratée, pour inciter à visionner une conférence de Philip Wadler dont le thème central est la question Qu'est-ce qu'un type ?. Ce qui revient à se poser la question : qu'est-ce que la grammaire ?
La conf est dans la lignée de ce commentaire que j'avais fait en réponse à une énième critique de Riendf sur la grammaire, et auquel tu avais répondu à l'époque, je te cite in extenso :
La vidéo est très instructive, et la conclusion… je la laisse découvrir à ceux qui voudront bien prendre le temps de la regarder (c'est en anglais, et elle dure une cinquantaine de minutes).
Philip Wadler enseigne l'informatique théorique à l'université d'Edimbourg, est spécialisé dans la conception des langages de programmation et a à son actif, entre autre, le langage Haskell et l'implémentation des génériques en Java.
Sapere aude ! Aie le courage de te servir de ton propre entendement. Voilà la devise des Lumières.
[^] # Re: Dépêche actuelle et la suite
Posté par kantien . Évalué à 2. Dernière modification le 24 août 2016 à 17:33.
Je ne peux plus éditer mon message, mais pour résumer : ce que tu trouves beau et élégant dans l'exemple c'est sa syntaxe concrète, ce que je lui reproche c'est sa grammaire. ;-)
Sapere aude ! Aie le courage de te servir de ton propre entendement. Voilà la devise des Lumières.
[^] # Re: Dépêche actuelle et la suite
Posté par Oliver (site web personnel) . Évalué à 1.
Salut kantien,
Je ne comprends pas bien où tu veux en venir. Suggères-tu une amélioration de la structure grammaticale de la dépêche ? Ou peut-être je n'ai pas compris ton humour… Merci d'apporter un peu plus d'explications :-)
Commentaire sous licence Creative Commons Zero CC0 1.0 Universal (Public Domain Dedication)
[^] # Re: Dépêche actuelle et la suite
Posté par kantien . Évalué à 1.
C'était une boutade ratée. Voir la réponse à xcomcmdr. ;-)
Sapere aude ! Aie le courage de te servir de ton propre entendement. Voilà la devise des Lumières.
[^] # Re: Dépêche actuelle et la suite
Posté par devnewton 🍺 (site web personnel) . Évalué à 10.
Besoin d'un times à la Ruby? C++ sait faire!
Le post ci-dessus est une grosse connerie, ne le lisez pas sérieusement.
[^] # Re: Dépêche actuelle et la suite
Posté par Anthony Jaguenaud . Évalué à 2.
Et est-ce qu’on peut faire :
[^] # Re: Dépêche actuelle et la suite
Posté par devnewton 🍺 (site web personnel) . Évalué à 4.
Plutôt un:
times_looper(n, []() { std::cout << "L'overingénieurie saimal" << std::endl; })
Ou alors en redefinissant un opérateur | sur un objet times, on peut arriver à un élégant:
n | times([]() { std::cout << "Les pipes c'est cool" << std::endl; })
Le post ci-dessus est une grosse connerie, ne le lisez pas sérieusement.
[^] # Re: Dépêche actuelle et la suite
Posté par Gof (site web personnel) . Évalué à 7.
En surchargent l'operator*:
[^] # Re: Dépêche actuelle et la suite
Posté par devnewton 🍺 (site web personnel) . Évalué à 3.
Pour continuer le jeu: https://github.com/cpp-frug/materials/issues/10
Le post ci-dessus est une grosse connerie, ne le lisez pas sérieusement.
[^] # Re: Dépêche actuelle et la suite
Posté par Gof (site web personnel) . Évalué à 5.
Et on peut faire
Comme ça on peut écrire
[^] # .
Posté par Gof (site web personnel) . Évalué à 1. Dernière modification le 25 août 2016 à 18:18.
Commentaire supprimé
[^] # Re: Dépêche actuelle et la suite
Posté par kantien . Évalué à 1.
Effectivement, c'est tout de suite beaucoup plus clair. :-O
La punition infligée à l'élève pourrait s'énoncer : « copier 100 fois "je ne dois pas jeter d'avion en papier en classe" ». Le verbe de l'énconcé étant bien sûr « copier », son COD le texte « je ne dois pas jeter d'avion en papier en classe », et les mots « 100 fois » une expression adverbiale. Le noyau du groupe adverbiale est le mot « fois », le nombre 100 en étant son complément afin de préciser sa signification (sémantique), mais dans la langue française (tout comme en anglais) il pourrait être autre chose qu'un nombre comme dans « quelque fois », « à chaque fois ». L'énoncé ne comporte pas de complément circonstanciel de lieu, mais dans le dessin cela semble être le tableau, et dans le code c'est la sortie standard.
Voilà comme on peut également analyser tout cela dans un langage de programmation :
En espérant avoir été plus clair sur ce que je voulais dire. :-)
Sapere aude ! Aie le courage de te servir de ton propre entendement. Voilà la devise des Lumières.
[^] # Re: Dépêche actuelle et la suite
Posté par benja . Évalué à 2. Dernière modification le 27 août 2016 à 22:26.
En évitant la définition d'un opérateur ad-hoc qui rend, amha, la compréhension de la sémantique plus ardue. C'est un peu l'éternel débat des macros, quelles soient basiques comme en C ou puissante comme en LISP, ce qu'on gagne en lisibilité avec le sucre syntaxique, on le perd en compréhension de la sémantique…
Donc bref, voici ma solution simple et lisible :p
Voire encore:
[^] # Re: Dépêche actuelle et la suite
Posté par kantien . Évalué à 3. Dernière modification le 29 août 2016 à 16:40.
Étrangement, c'est la partie en prose de ton commentaire que je ne comprends pas trop. :-P
Ce que je voulais signaler, au départ, c'est l'identité de méthode qu'il y entre le typage d'un langage de programmation et l'analyse grammaticale des langues dites naturelles; comme peut le montrer, par exemple, l'isomoprhisme qu'il y a entre un arbre d'analyse syntagmatique comme celui en bas de la page 2 de ce document et un arbre de syntaxe abstrait avec des annotations de typage sur les nœuds. Ce qui, dans le cas de Ruby, me faisait analyser le noyau du groupe adverbial comme un attribut de son complément (ce qui n'est pas du tout la façon dont on se représente la chose en français comme en anglais).
Cela étant, ton code m'a donné une idée et une représentation plus proche des structures grammaticales du français et de l'anglais.
Sapere aude ! Aie le courage de te servir de ton propre entendement. Voilà la devise des Lumières.
[^] # Re: Dépêche actuelle et la suite
Posté par benja . Évalué à 1. Dernière modification le 29 août 2016 à 22:31.
Ce que je voulais dire, c'est qu'utiliser des artifices syntaxiques pour "transformer" la grammaire au lieu d'utiliser la grammaire de base rend la compréhension plus compliquée pour quelqu'un de familié avec le langage. Dans certains cas, c'est justifié, par exemple si cela serait trop verbeux, ou que la nouvelle syntaxe est communément utilisée (par exemple, la notation "do" pour un monad). J'ai aussi l'impression que l'on peut constater ce même mouvement vers une syntaxe "standardisé" avec la dépréciation de camp4 au profis de la nouvelle façon.
Si je reprends tes exemple, je n'aimes pas que le verbe soit paramètré par un adverbe, Je préfèrerais que l'adverse soit paramètré par le verbe et retourne un nouveau verbe, dans la plus simple tradition de la composition de fonctions, lambda power ;-). Cela renverse aussi la syntaxe usuelle lambda pour l'application de fonction, qui est (fonction arguments…). Sans utiliser d'opérateur customisé, il y a moyen de le faire, au prix d'une lisibilité légèrement diminuée. Après, cela reste une question de goût et une préférence pour le kiss :-)
PS: avec mon exemple, on peut aussi écrire
(print_endline >| (5 |> fois)) "xxx"
, sans devoir réécrire quoi que ce soit. Par contre on ne peut pas s'affranchir des parenthèses… mais bon, je trouve ça un avantage, c'est justement l'argument que j'essaye de développer,PS2: je me dis parfois qu'un opérateur '$' à la haskell serait agréable à utiliser…
[^] # Re: Dépêche actuelle et la suite
Posté par kantien . Évalué à 1.
C'est exactement ce que j'ai fait, c'est d'ailleurs pour cela que j'ai rajouté un nouvel alias de type pour illustrer la nature fonctionnelle d'un adverbe :
Le code de ma fonction
fois
est identique au tien, j'ai simplement rajouté des annotations de types et changer le nom des arguments pour souligner l'analogie avec la grammaire française. Ensuite j'ai défini deux fonctions — que j'ai certes improprement qualifier de verbes — pour illustrer deux morphologies possible de la langue française, que l'on retrouve également en anglais par exemple. Sinon, on peut tout à fait écrire le même code que toi à l'usage, en respectant la syntaxe d'application des fonctions du lambda-calcul ou en ayant recours à l'opérateur infixe|>
pour inverser le nom de la fonction et de son argument (à la manière du pipe du shell) :Il existe en OCaml, c'est le double arobase
@@
:Sapere aude ! Aie le courage de te servir de ton propre entendement. Voilà la devise des Lumières.
[^] # Re: Dépêche actuelle et la suite
Posté par benja . Évalué à 1. Dernière modification le 30 août 2016 à 21:47.
Effectivement j'avais mal interprété.
Ah ça c'est cool, merci !
[^] # Re: Dépêche actuelle et la suite
Posté par Antoine . Évalué à 6. Dernière modification le 22 août 2016 à 12:52.
Je ne sais pas si elles sont sympas (les goûts et les couleurs…), mais beaucoup d'illustrations de cette dépêche sont vides de contenu : elles prennent beaucoup de place et n'apportent rien à l'article.
# ECMA
Posté par pulkomandy (site web personnel, Mastodon) . Évalué à 4.
Pourquoi le C++ n'est-il pas un standard publié (aussi) par l'ECMA?
Ils ont la bonne idée de proposer le téléchargement gratuit des PDF de leurs standards, par exemple dans la catégorie "langages de programmation" pour C#, EcmaScript, Eiffel, et Dart. Mais aussi plein d'autres choses comme le système de fichier "ISO9660" pour les CDROM, le JSON, les codes de contrôles "ANSI" (ECMA-48), le format physique des disquettes 3.5", et plein d'autres trucs.
[^] # Re: ECMA
Posté par Sytoka Modon (site web personnel) . Évalué à 6.
Peut être que si c'est ISO, les droits appartiennent à l'ISO et ne peuvent être publié ailleurs sans payer ?
Malheureusement, les normes sont rarement gratuites (et sont parfois/souvent un moyen de faire du protectionnisme/élimination de la concurrence).
[^] # Re: ECMA
Posté par SChauveau . Évalué à 5.
J'ai pas mal travaillé avec la norme Fortan qui fonctionne de la même façon: Elle est payante mais les 'working drafts' sont gratuits.
Je disposais des deux versions et en pratique je n'ai jamais noté la moindre différence (à l'exception de la 1ère page) ; identiques à la virgule près. Je suppose que c'est pareil avec le C++.
Pour les particuliers, le 'working draft' gratuit est de-facto la norme.
Les versions payantes ne sont utiles que pour les entreprises et les professionnels qui veulent un document officiel.
[^] # Re: ECMA
Posté par grim7reaper . Évalué à 3.
Je ne pense pas, en tout cas ça n'a pas l'air d'être le cas pour Ada qui est un standard ISO (http://www.iso.org/iso/home/store/catalogue_ics/catalogue_detail_ics.htm?csnumber=61507) mais qui est aussi disponible en ligne (http://www.adaic.org/ada-resources/standards/ada12/).
[^] # Re: ECMA
Posté par barmic . Évalué à 3.
Et je présume que c'est le cas pour le système de fichier "ISO9660" :)
Tous les contenus que j'écris ici sont sous licence CC0 (j'abandonne autant que possible mes droits d'auteur sur mes écrits)
# Très instructif
Posté par azmeuk (site web personnel) . Évalué à 10.
C'est très intéressant. J'ai hâte de voir les prochaines dépêches !
Je salue la démarche de publier in fine sur wikipedia. Le meilleur moyen d'y trouver des articles de qualité, c'est quand même quand des gens qui connaissent un peu leur domaine participent. J'aimerais bien que des pointures en physique, en mathématiques ou en cosmologie contribuent aussi conséquemment :)
[^] # Re: Très instructif
Posté par tipic . Évalué à 1. Dernière modification le 21 août 2016 à 16:54.
Je "plussoie"…lorsque je vois wikipedia pris d'assaut par des idéologues, dans d'autres domaines même ceux qui ne les concernent pas, …certe!
[^] # Re: Très instructif
Posté par Eiffel . Évalué à 1.
L'article est en effet très intéressant et je félicite les auteurs pour leur travail !
Toutefois j'aimerai en savoir plus sur le fait que le standard ne puisse être reproduit.
Dans l'article il est dit que stackoverflow est plus pragmatique mais dans ce cas là ne peut-on pas dire que c'est une citation plutôt qu'une copie ?
[^] # Re: Très instructif
Posté par Oliver (site web personnel) . Évalué à 3. Dernière modification le 21 août 2016 à 23:56.
C'est un aspect qu'un relecteur m'avait conseillé d'éclaircir : Klaim m'avait parlé du "Fair use" (jurisprudence des États-Unis) :
https://fr.wikipedia.org/wiki/Fair_use#Port.C3.A9e_du_copyright
Ne connaissant pas suffisamment bien le sujet, j'avais posté un e-mail dans la liste de diffusion Juridique de l'APRIL. Mais, j'ai du louper mon abonnement à cette liste car je ne reçois pas les e-mail :-(. Si un expert sur ces aspects de propriété intellectuelle passait dans le coin, merci de nous expliquer :
Dans quelle mesure est-il légal de reproduire des extraits de la norme C++ sur stackoverflow ?
http://stackoverflow.com/questions/2693199
Commentaire sous licence Creative Commons Zero CC0 1.0 Universal (Public Domain Dedication)
[^] # Re: Très instructif
Posté par meumeul . Évalué à 1.
La wikipedia anglaise est très très complète en sciences (au moins physiques) : c'est notre langue de travail. Il est vrai que la version française laisse un peu à désirer cependant…
# coquille
Posté par PolePosition . Évalué à 2. Dernière modification le 21 août 2016 à 21:40.
Un processus de normalisation qui s’ouvre d’avantage
=> Un processus de normalisation qui s’ouvre davantage
"Cela permet également de vérifier de la popularité d’un composant"
Y'a pas un "de" en trop ?
[^] # Re: coquille
Posté par Benoît Sibaud (site web personnel) . Évalué à 4.
Corrigé, merci.
# Java ou JS ?
Posté par elf32 . Évalué à 2.
J'ai peut-être raté un épisode, mais ce n'est pas plutôt la marque Java qui est déposée par Oracle ?
[^] # Re: Java ou JS ?
Posté par CrEv (site web personnel) . Évalué à 8.
A priori c'est bien javascript : http://tsdr.uspto.gov/#caseNumber=75026640&caseType=SERIAL_NO&searchType=statusSearch
[^] # Re: Java ou JS ?
Posté par elf32 . Évalué à 3.
Hé bien j'aurais appris quelque chose ! J'étais loin de m'en douter.
[^] # Re: Java ou JS ?
Posté par Oliver (site web personnel) . Évalué à 8.
De mémoire : Cela s'est produit, à l'époque de Netscape et Sun. Le navigateur de Netscape gérait la première version de son langage de script appelé au début LiveScrit. De l'autre côté, Sun souhaitait que Java soit utilisé pour les sites web, marché en pleine expansion à l'époque. Du coup, Netscape et Sun se sont mis d'accord pour créer de l’ambiguïté entre les noms de leur deux langages qui n'ont rien à voir : Java et JavaScript. Ainsi, chaque entreprise profitait mutuellement du matraquage médiatique faite par l'autre entreprise sans se concurrencer. Les décideurs "non-techos" n'y voyait que du feu !
À confirmer avec des références…
Commentaire sous licence Creative Commons Zero CC0 1.0 Universal (Public Domain Dedication)
# Excellent
Posté par spart . Évalué à 4. Dernière modification le 22 août 2016 à 18:49.
hahahaha merci à toute l'équipe pour cette excellente vanne, you made my day :'-) :'-)
-Spart, programmeur C++ expatrié en Hongrie depuis un an,
toujours au stade csecsemő après 18h de hongrois par semaine
[^] # Re: Excellent
Posté par Lutin . Évalué à 4.
À part les trucs un peu exotique à la Malbolge ou Brainfuck, tu vois quoi comme langage plus complexe qui est réellement utilisé ?
[^] # Re: Excellent
Posté par barmic . Évalué à 10.
Le hongrois apparemment.
Tous les contenus que j'écris ici sont sous licence CC0 (j'abandonne autant que possible mes droits d'auteur sur mes écrits)
[^] # Re: Excellent
Posté par DerekSagan . Évalué à 7.
Je dirais même plus: le c++ en notation hongroise avec des commentaires en hongrois. ;-)
[^] # Re: Excellent
Posté par devnewton 🍺 (site web personnel) . Évalué à 5.
PHP?
Le post ci-dessus est une grosse connerie, ne le lisez pas sérieusement.
[^] # Re: Excellent
Posté par dyno partouzeur du centre . Évalué à 4.
l'APL
https://fr.wikipedia.org/wiki/APL_(langage)
[^] # Re: Excellent
Posté par lasher . Évalué à 2.
D’après mon papa hongrois, "Franchement le français est une langue bien plus difficile que le hongrois. Au moins le hongrois est logique." Evidemment, le fait qu'il parle couramment plusieurs langues couramment, et soit relativement avance dans d'autres langues invalide peut-être son jugement (dans le sens ou il a déjà une grande experience pour l'apprentissage des langues).
# Excellent
Posté par frogoscar . Évalué à 3.
J'adore cette série.
Suivre le flux des commentaires
Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.