Journal Compter en C++, de 98 jusqu'à 11

Posté par  (site web personnel) . Licence CC By‑SA.
Étiquettes :
37
2
juin
2021

Sommaire

Salut 'nal,

Non, ça ne fonctionne pas.

Bonjour 'nal,

Ah c'est mieux !

Il y a quelques temps, un collègue m'a proposé de faire une présentation au sein de la boîte pour faire le tour des modifications qui ont été apportées au langage C++ depuis la version de 2011. J'ai commencé à faire quelques slides en me concentrant sur les parties qui me semblent essentielles mais, assez rapidement, il m'est paru clair qu'il faudrait plus d'une présentation si je voulais être un minimum exhaustif.

Finalement la présentation n'a pas eu lieu :( Néanmoins, j'avais quand même quelques morceaux de prêts, et l'idée de faire un petit bilan des dix dernières années du langage me plaisait bien. J'ai donc opté pour un changement de format : au revoir \documentclass{beamer}, bonjour \documentclass{book}.

Et ouais, si tu lis le LaTeX tu as bien compris : j'écris un livre. Je n'avais plus rien à lire et je n'ai trouvé que ça pour y remédier.

Enfin quand je dis que j'écris un livre, c'est surtout que j'essaye d'écrire un livre. C'est très loin d'être terminé. Parce que mine de rien, rédiger de longs textes cohérents, c'est pas hyper simple. Je ne suis pas développeur sur GIMP moi :)

À l'heure où j'écris ces lignes, seul C++11 est abordé, et encore, c'est à peine relu et il en manque (coucou <chrono>). Laisse-moi quand même te parler un peu du projet.

Le but

L'objectif est d'avoir au final quelque chose d'intermédiaire entre la frugalité du standard et les subtilités que l'on trouve dans les détails du langage (par exemple, je n'irai probablement pas y parler de l'empty base optimization). J'aimerais que quelqu'un qui a peu ou pas suivi les évolutions du langage puisse y trouver l'intention des différents ajouts afin de les utiliser le jour où cela semblera utile.

Rien que comme cela, en se limitant à de courtes sections qui montrent l'avant et l'après de l'introduction d'une fonctionnalité, avec quelques exemples de code, le nombre de pages monte très vite. Je voudrais néanmoins que le volume d'information ne soit pas rédhibitoire.

Où le trouver

Tu peux trouver les sources du document sur GitHub, et même récupérer un pdf à lire tout de suite.

Avec quoi c'est écrit

Le document est rédigé en LaTeX, un langage réputé pour faire de beaux documents par défaut et permettant de se concentrer sur le contenu, en le séparant de la forme. C'est évidemment pourquoi je passe des heures à chercher comment faire des trucs comme barrer un mot, afficher une icône dans la marge, ou encore mettre une police digne de ce nom, qui gère le gras et l'italique, pour les extraits de code.

Cela fait une petite quinzaine d'années que je n'avais pas rédigé sérieusement en LaTeX, et pas mal de choses bien sympathiques à son sujet sont arrivées entre temps. Déjà, j'ai trouvé un module UseLATEX pour CMake, qui permet de séparer proprement les sources et la construction du document. C'est fini les fichiers .aux, .toc, et autres, qui polluent le dépôt ! En plus cela gère très bien les enchaînements de compilation. Là où auparavant il fallait compiler les sources, puis la bibliographie, puis à nouveau des sources pour enfin avoir les références dans le document ; maintenant ça se fait tout seul.

À l'usage c'est très simple, il suffit de faire un CMakeLists.txt qui ressemble à ça :

include(UseLATEX)

add_latex_document(
  # Fichier principal
  counting-in-c++.tex

  BIBFILES
  bibliography.bib

  # Ici on peut faire une passe de la commande configure_file() de
  # CMake sur certains fichiers. Je m'en sers pour injecter le numéro
  # de version.
  CONFIGURE
  counting-in-c++.tex

  IMAGE_DIRS
  assets

  # Et là on met tous les autres fichiers référencés depuis le fichier
  # principal, hors bibliographie et images qui sont gérés avec les
  # directives ci-dessus.
  INPUTS
  examples/extern-template/some_template-11.hpp
  examples/extern-template/some_template-98.hpp
  parts/11.tex

  # …
  )

Autre truc sympa qui n'existait pas il y a quinze ans : https://tex.stackexchange.com/. Avec l'explosion des sites StackExchange, il était naturel d'avoir des questions-réponses au sujet de TeX et LaTeX. Chose étonnante, la plupart des questions que je me posait ont des réponses vers 2011. Après ça c'est plutôt mort. Pareil pour les packages conseillés, nombreux n'ont pas été mis à jour depuis des années. Par exemple, cancel a été mis à jour en 2013. LaTeX est-il complet ou bien est-il en train de mourir ?

Il y a des trucs que je n'arrive toujours pas à bien faire, notamment mettre en évidence une ou plusieurs lignes d'un extrait de code. Pour l'instant j'ai juste une solution bricolée avec l'aide d'Internet, où le listing est coupé en plusieurs blocs selon la région à faire ressortir, et seule celle-ci a une couleur d'arrière plan. C'est pas fou.

L'anglais

La présentation initiale était prévue pour un public international, du coup elle était rédigée en langage technique, qui s'avère être très proche de l'anglais. Le livre a gardé ça, il est aussi écrit en anglais.

Alors je sais ce que tu vas me dire : « ouiiiii, je trouve ça triiiiiste de ne pas écrire ça en beeeeelge », et c'est pas faux. Mais bon, j'avais déjà un gros morceau en anglais et la force de la flemme est très convaincante.

Le contrat

J'hésite un peu à annoncer cela ici… pfiou ! allez, courage… Le livre est dispo en CC-BY-SA.

patapé

Tu te demandes sûrement pourquoi je n'ai pas mis cette Œuvre™ d'Art® sous les termes d'un NC ou ND, aussi connus comme des contrats « semi libre », « presque libre », « à 99% libre », ou encore « non mais au taux d'aujourd'hui ça ferait 13,67% libre » ? Si ça se trouve quelqu'un va récupérer mon travail et le vendre pour faire de l'argent. Tu te rends compte ? de l'argent !

Alors en vrai, oui, j'aurais un peu les boules si quelqu'un tirait profit de mon travail sans m'en reverser une part. S'il perd de l'argent, ça ne me dérange pas qu'on ne partage pas, mais s'il en gagne j'aimerais bien en recevoir.

Mais c'est un peu le jeu du partage, il faut savoir donner pour recevoir. J'ai moi même beaucoup reçu de personnes qui partageaient leurs connaissances, ça me semble normal de donner en retour. Et je préfère de loin un livre libre qui pourra vivre sa vie quand bien même je l'abandonnerais, plutôt qu'un projet fermé qui ne servira à rien et ne pourra s’épanouir à moins que je ne le pousse au bout et que j'arrive, plus ou moins seul, à le publier.

Note que j'ai bien mis « livre libre », car à mon sens le libre, que se soit logiciel ou art, est avant tout le fait de libérer le produit de son auteur. Ensuite seulement cela donne des libertés aux utilisateurs, mais pour moi l'essentiel est vraiment que n'importe qui peut prendre le produit, le détacher de celui qui l'a créé, pour ensuite le transformer ou le travailler. Et c'est là que j'aime le SA : celui qui prend ne peut s'approprier le logiciel ou l'œuvre. Ce dernier reste détaché de celui qui le fait.

Quant au BY, et bien… Bon, ça ne sert à rien, mais je tiens à porter la responsabilité de ce que je fais, surtout s'il s'avère que c'est bien. Par contre si c'est de la crotte, pas de souci, je ne t'en voudrai pas d'omettre mon nom quand tu en parleras :)

Contribuer

Comment contribuer à un livre contenant plein d'opinions personnels de l'auteur original ? C'est pas simple.

Grosso modo, je me dis que n'importe quelle retouche sur l'existant est bienvenue (corrections de fautes, reformulations). Ensuite pour les nouvelles sections c'est plus délicat mais c'est faisable. Je souhaite surtout que les sujets abordés soient traités en expliquant pourquoi c'est utile. Par exemple, dire que « auto c'est bien parce que ça permet de ne pas préciser le type de la variable », c'est nul. Par contre, dire que « auto permet de déclarer une variable à laquelle on affecte une lambda, dont le type est par définition inaccessible au programmeur », c'est acceptable. Dans tous les cas, il faut que ça reste concis et simple. Pas besoin de détailler tous les cas d'utilisation.

Enfin, si les contributions contiennent des opinions, je doute que ça passe. Après tout il y a mon nom sur la couv', alors si je ne suis pas en phase avec les opinions du contenu, ça m'embête.

Dernière chose, je ne demande pas le transfert de propriété pour les contributions, donc le meilleur moyen de garder ce livre libre est de contribuer. Si suffisamment de personnes font des modifications je ne pourrai pas changer de licence sans leur accord :)

  • # CC BY-CA

    Posté par  . Évalué à 8. Dernière modification le 02 juin 2021 à 08:50.

    J'hésite un peu à annoncer cela ici… pfiou ! allez, courrage… Le livre est dispo en CC-BY-SA.

    patapé

    Ah bah si, tu t'en doutes bien. C'est horrible… d'écrire « courage » comme ça ! :-P
    Bon, plus sérieusement, la CC-BY-CA, je la vois comme la GNU GPL du contenu artistique, avec des droits équivalent, et des obligations équivalentes, en particulier le copyleft. Je ne vois pas en quoi on te taperait dessus ici pour ça.

    Et surtout, merci pour la réflexion sur le sujet et félicitations pour l'écriture de ce livre et l'invitation à contribuer :-)

    • [^] # Re: CC BY-CA

      Posté par  (site web personnel) . Évalué à 3.

      Ah bah si, tu t'en doutes bien. C'est horrible… d'écrire « courage » comme ça ! :-P

      Comme tu vois, l'écriture et la relecture ce n'est pas trop mon truc :D

      Merci pour les retours.

      • [^] # Re: CC BY-CA

        Posté par  . Évalué à 3.

        À croire que moi non plus, avec mon absence d'accord sur « équivalent » ;-P

    • [^] # Re: CC BY-CA

      Posté par  (site web personnel) . Évalué à 4.

      Corrigé, merci.

    • [^] # Re: CC BY-CA

      Posté par  (site web personnel, Mastodon) . Évalué à 2.

      je la vois comme la GNU GPL du contenu artistique,

      Tiens, dans un contexte TeX'er est-ce que la dite « licence artistique » serait pertinente ?

      “It is seldom that liberty of any kind is lost all at once.” ― David Hume

  • # :)

    Posté par  (Mastodon) . Évalué à 10.

    Allez, tu as pris les devants dans ton journal mais je vais quand même le dire. C'est dommage que ce soit en anglais. Il existe déjà pas mal de documentation en anglais sur C++, tu ne pourras pas rivaliser en tant que locuteur non-natif de ce dialecte. Alors que la documentation en français sur C++ est quasi-inexistante. Je vais même aller plus loin, j'aurais bien contribué si ça avait été en français, parce que je me dis qu'un tel document aurait sans doute été très utile à mes étudiants. Bref, c'est ton choix, ce n'est pas très grave, ça fera toujours quelque chose en plus à se mettre sous la dent.

    J'ai commencé à parcourir, ça a l'air plutôt bien rédigé. J'ai juste quelques remarques pour l'instant.

    Dans la section 2.4.1, tu fais une classe avec des attributs const. C'est une très mauvaise idée parce qu'une telle classe sera difficilement utilisable en pratique parce que tu ne pourras plus utiliser le déplacement (move) du fait du const. Avec des types simples, ça ne se verra pas, mais dès que tu vas utiliser std::string par exemple, ton déplacement va se transformer en copie et donc, va potentiellement envoyer une exception et donc tout va te coûter plus cher parce qu'il y a tout un tas d'optimisations liées au fait qu'un déplacement ne peut pas envoyer d'exception (noexcept), comme dans std::vector par exemple. Du coup, pour illustrer ton chapitre, je prendrais plutôt une référence comme attribut, parce que déjà tu ne peux plus faire de init comme tu le fais là, et que du coup, les constructeurs délégués prennent tout leur sens.

    Dans la section 2.4.5, tu utilises des identifiants avec deux underscores consécutifs. Normalement, tu n'as pas le droit, tous les identifiants avec deux underscores consécutifs sont réservés.

    Dans la section 2.5.9, je pense que std::bind a plus ou moins été supplanté par les lambdas. Dans plein de cas, tu peux créer une lambda qui fera exactement pareil et qui sera sans doute plus simple une fois compilée que tout l'attirail derrière std::bind dont tu donnes un aperçu dans la section précédente.

    Dans la section 2.6.5, il y a une typo, il manque un underscore devant g dans la définition.

    • [^] # Re: :)

      Posté par  (site web personnel) . Évalué à -7.

      j'aurais bien contribué si ça avait été en français, parce que je me dis qu'un tel document aurait sans doute été très utile à mes étudiants.

      Si tes étudiants ne sont pas capables de lire de l'anglais technique sans être plus fatigué qu'en français, c'est très grave pour leur futur emploi (qu'ils n'auront pas ou perdront assez rapidement), et il faut les envoyer en urgence dans des cours d'anglais (technique, ça suffit pour commencer, mais après il vaut mieux continuer sur de l'anglais de conversation basique), plus urgent que d'apprendre à coder (pitié pas de code avec des noms de variable en anglais, sauf si le langage est WinDev).

      Alors que la documentation en français sur C++ est quasi-inexistante.

      Peut-être parce que ce n'est pas utile, voire contre-productif.
      Il faut arrêter avec ce centrisme francophone, le monde évolue et le français n'est plus la langue dominante (et ne l'a jamais été en informatique), on a une langue commune de facto, et c'est très bien ainsi (on peut communiquer avec plus de monde) même si ce n'est pas la notre.

      En fait, c'est si tu présentes à tes étudiants un livre en français qu'ils souffriront à terme : les termes qu'ils apprendront ne seront pas ceux utilisés par leurs futurs collègues.
      Perso je m'y perd avec certaines traductions pas traduits pareil suivant les idées des gens.

      C'est dommage que ce soit en anglais.

      Au contraire :).

      tu ne pourras pas rivaliser en tant que locuteur non-natif de ce dialecte

      Pour référence, Piketti a eu beaucoup d'écho même (et surtout) aux USA avec son livre Le Capital au XXIe siècle.
      Plus proche de LinuxFr, un certains Linus T. communique en anglais et est largement accepté et on débat beaucoup de ses coups de gueule.
      les locuteurs natifs anglais sont assez tolérants envers les locuteurs non-natif, du moment où tu as un truc intéressant à dire.

      • [^] # Re: :)

        Posté par  . Évalué à 10. Dernière modification le 02 juin 2021 à 11:08.

        C’est vrai que le rôle d’un enseignant, c’est de multiplier les barrières pour s’assurer que tous les élèves doivent apprendre et mettre en pratique toutes les notions et concepts d’un coup. D’ailleurs, comme la meilleure littérature scientifique en maths et en physique est en anglais, les cours devraient être en anglais dès la sixième. Et tant pis, si seuls s’en sortent les enfants de cadres supérieures qui prennent des cours particuliers, c’est de toute façon ceux là qu’on veut recruter à la fin en sortie d’étude, donc autant faire la sélection au plus tôt. Des élèves en M2 (voire docteurs) faibles en anglais et qui complètent leur formation par un expérience à l‘étranger après leur diplôme, n’ont pas leur place sur les bancs de nos facs puisque « qu'ils n'auront pas ou perdront assez rapidement » leur emploi si les malheureux venaient à en trouver un à l’issue du diplôme.

        Ironie mise à part, quand je vois le niveau d‘anglais des employeurs en France, je ne m’inquiète pas trop pour les élèves en fait.

      • [^] # Re: :)

        Posté par  (site web personnel) . Évalué à 10.

        Si tes étudiants ne sont pas capables de lire de l'anglais technique sans être plus fatigué qu'en français, c'est très grave pour leur futur emploi

        Même avec de l'expérience et une aisance pour lire un document en anglais, lire en anglais reste plus difficile que de lire du français. Cela me demande plus de concentration et d'énergie, même si j'y arrive.

        Puis déjà qu'un document en français tu peux te méprendre sur le sens de certaines phrases ou mots, dans une langue étrangère c'est encore plus fréquent.

        Il faut arrêter avec ce centrisme francophone, le monde évolue et le français n'est plus la langue dominante (et ne l'a jamais été en informatique), on a une langue commune de facto, et c'est très bien ainsi (on peut communiquer avec plus de monde) même si ce n'est pas la notre.

        Donc les cours de musique en italien, les cours de physique et de maths en allemand, etc. Combien de langues avant d'apprendre autre choses que des langues ?

        Faudrait-il fermer linuxfr du coup ? Qu'on ferme les associations francophones liées à l'informatique ?

        À ce sujet, je pense que tu mélanges pas mal de choses. Oui, en informatique l'anglais c'est important, tu peux difficilement être un programmeur expérimenté sans savoir lire une doc en anglais. C'est vrai.

        Mais est-ce que pour autant toute ressource liée à l'informatique doit être en anglais ? Non. Déjà car certains préfèrent lire une ressource en français quand elle existe (comme moi), et d'autres parce que notamment ils sont jeunes ou débutent auraient une double barrière à l'entrée, pourquoi l'informatique qui a l'avantage d'être un domaine assez accessible financièrement et matériellement devrait ajouter un prérequis non technique à son apprentissage ? Mystère.

        Par exemple j'ai débuté en C à 16 ans. À cette époque, mon niveau d'anglais était proche du néant. 14 ans plus tard, je suis développeur expérimenté et capable de gérer l'anglais au boulot et en dehors. Et pourquoi je suis devenu suffisamment bon en anglais ? Grâce à l'informatique. Car comme c'était devenu ma passion et que c'était obligatoire pour en faire mon métier, cela m'a donné une motivation pour apprendre la langue. Et de fait j'ai bossé à l'école, à la maison et pratiqué au boulot pour y parvenir.

        Mais l'histoire aurait été différente si l'anglais avait été une barrière dès le début. Je n'aurais probablement jamais débuté la programmation et jamais eu une motivation pour régler mon différent avec l'anglais. Donc oui, je remercie les sites web et livres techniques (et pas que pour débutants) d'avoir existé en français. De même qu'on ait des sites ou magazines francophones dans le domaine. Sans cela ma vie aurait été radicalement différente. J'ai pu découvrir le domaine et progresser tranquillement, réglant la contrainte de la langue plus tard car apprendre une langue cela demande beaucoup de temps et d'énergie.

    • [^] # Re: :)

      Posté par  (site web personnel) . Évalué à 5.

      Merci pour ces intéressants retours, j'intégrerai les corrections à tête reposée.

      Concernant l'anglais, je te rejoins tout à fait sur l'utilité de créer des ressources accessibles pour les plus jeunes. En plus ça aurait l'avantage de les modeler à ma sauce former d'une manière plus en phase avec ma propre façon de faire :) C'est aussi utile pour ceux qui ont plus ou moins de mal à lire l'anglais. Même si cela vaut le coup, effectivement, d'investir sur l'anglais quand on fait de l'informatique ; tout le monde n'a pas la même affinité avec la langue.

      Comme indiqué dans le journal, à la base le public était franco-étranger. Dans cette situation c'est l'anglais qui fait l'union, il n'y a pas trop le choix. Après je vois ça aussi comme un moyen de pratiquer moi-même et de m'améliorer.

      Je vais même aller plus loin, j'aurais bien contribué si ça avait été en français, parce que je me dis qu'un tel document aurait sans doute été très utile à mes étudiants.

      Mais ne t'arrête pas malheureux ! Lance une traduction en français, ça serait top :) Si tu veux je te prépare même un dossier fr dans le dépôt.

      • [^] # Re: :)

        Posté par  (site web personnel, Mastodon) . Évalué à 5. Dernière modification le 02 juin 2021 à 14:47.

        Je peux l'aider à traduire au besoins de façon à rendre ça vraiment en français :-). C'est-à-dire faire un peu comme le travail de traduction fait par Proust et sa mère : elle, angliciste, traduisait littéralement, lui, pas angliciste, mettant ça en français. Sauf que je lis et écris l'anglais.

        « Tak ne veut pas quʼon pense à lui, il veut quʼon pense », Terry Pratchett, Déraillé.

  • # Zut alors

    Posté par  (site web personnel) . Évalué à 10.

    à mon sens le libre, que se soit logiciel ou art, est avant tout le fait de libérer le produit de son auteur.

    Quelqu'un qui a compris que le libre n'est pas autour de sa personne mais bien le contraire, zut alors je fais comment pour troller moi? Tu me mets au chômage technique, je ne te remercie pas! :)

    • [^] # Re: Zut alors

      Posté par  (site web personnel) . Évalué à 7.

      Décidément, LinuxFr se meurt ! Heureusement qu'il reste la discussion sur l'anglais :)

    • [^] # Re: Zut alors

      Posté par  (site web personnel) . Évalué à 3.

      Pourtant c'est facile de troller :

      Ah zut, moi je pensais que le libre, que ce soit logiciel ou art, est avant tout le fait de libérer l'utilisateur du fournisseur :)

      Matthieu Gautier|irc:starmad

    • [^] # Re: Zut alors

      Posté par  (site web personnel) . Évalué à 3.

      Il n'y a rien de plus drôle au monde que l'auto-dérision!

  • # Range-based loops?

    Posté par  . Évalué à 4.

    Le premier exemple du texte, à cheval sur les pages 5 et 6, contient une coquille : je pense qu'il faut "vi *= c;" plutôt que "*it *= c;".

  • # Présentation rigolote de LaTeX

    Posté par  (site web personnel) . Évalué à 4. Dernière modification le 02 juin 2021 à 13:20.

    Le document est rédigé en LaTeX, un langage réputé pour faire de beaux documents par défaut et permettant de se concentrer sur le contenu, en le séparant de la forme. C'est évidemment pourquoi je passe des heures à chercher comment faire des trucs comme barrer un mot, afficher une icône dans la marge, ou encore mettre une police digne de ce nom, qui gère le gras et l'italique, pour les extraits de code.

    C'est une présentation assez rigolote de LaTeX je trouve… ce que donne vraiment LaTeX c'est 1/un bon algorithme de césure (casser les paragraphes en lignes) et 2/un bon algorithme pour préparer des formules. Les modèles de document de base sont assez moches et sont plutôt à regarder comme des exemples ou des outils pour démarrer mais n'ont certainement pas vocation a être des exemples de mise en page.

    Séparer le fond de la forme ne marche pas quand on va dans les détails (ça ne marche pas non plus avec HTML). À un niveau général on peut bien-sûr définir des styles de texte et des styles de paragraphe et les utiliser avec succès pour des documents assez simples. Mais dès qu'on sort du texte proprement dit et qu'on s'intéresse aux inserts, qu'il s'agisse de tableaux, code, ou équations et bien il faut se frotter à la réalité du support pour lequel on met en page, se préoccuper des saut de page et mille autre détails qu'on ne peut pas abstraire ou déléguer à un système automatique parceque personne n'a su préparer un système qui s'occupe vraiment bien de ça sans qu'on ne l'aide beaucoup.

    Il y a des trucs que je n'arrive toujours pas à bien faire, notamment mettre en évidence une ou plusieurs lignes d'un extrait de code. Pour l'instant j'ai juste une solution bricolée avec l'aide d'Internet, où le listing est coupé en plusieurs blocs selon la région à faire ressortir, et seule celle-ci a une couleur d'arrière plan. C'est pas fou.

    J'ai regardé ce que tu as fait, c'est pas mal (pour la publication électronique). Tu as pensé à mettre juste un appel dans la marge (genre étoile, main pointé ou numéro entouré, comme dans les Zapf Dingbats?) C'est pas très glamour mais ça marche.

    Chose étonnante, la plupart des questions que je me posait ont des réponses vers 2011. Après ça c'est plutôt mort.

    Je pense à TeX/LaTeX comme à Lisp: ce sont des très vieux systèmes qui sont bien ancrés dans des pratiques professionnelles et industrielles qui s'inscrivent dans le temps long. On parle de dizaines d'années ce qui quand on compare au rythme de développement (et de dépréciation) d'autres systèmes à la mode peut laisser penser que ces communautés sont moribondes. Ce n'est pas la réalité, même si l'énergie se concentre sur un petit nombre de problèmes. Pour LaTeX c'est LaTeX3 et LuaTeX il me semble.

    PS. Un grand bravo pour ton livre!

    • [^] # Re: Présentation rigolote de LaTeX

      Posté par  . Évalué à 5.

      C'est une présentation assez rigolote de LaTeX je trouve… ce que donne vraiment LaTeX c'est 1/un bon algorithme de césure (casser les paragraphes en lignes) et 2/un bon algorithme pour préparer des formules. Les modèles de document de base sont assez moches et sont plutôt à regarder comme des exemples ou des outils pour démarrer mais n'ont certainement pas vocation a être des exemples de mise en page.

      Ça ce sont les atouts de TeX. Par dessus LaTeX (et son environnement) apporte quand même beaucoup de choses, dont une incitation forte à suivre les bonnes pratiques de rédaction (numérotation et positionnement des figures, références dans le texte, bibliographie). Par exemple, si on laisse le choix de l’outil à des étudiants (de niveau master), les rapports écrits par des étudiants avec LaTeX sont souvent plus laids et brouillons dans leur mise en page que ceux faits avec une suite bureautique, mais ils sont aussi mieux rédigés, avec une meilleure articulation du texte avec les figures et une bibliographie mieux référencée et mieux citée. J’apprécie LaTeX comme outil pédagogique encore plus que comme outil pour rédiger mes propres documents. À titre personnel, j’utilise LaTeX moins parce-qu’il me plaît que parce-que je n’ai simplement pas trouvé mieux.

      • [^] # Re: Présentation rigolote de LaTeX

        Posté par  (site web personnel, Mastodon) . Évalué à 3.

        Ah ? Qu'entends-tu par « les rapports écrits avec LaTeX sont souvent plus laids et brouillons dans leur mise en page que ceux faits avec une suite bureautique » ? Genre ce sont les copies draft et non final ? Ou que ce n'est pas avec les bons paquetages et options ? (par exemple ne pas prendre la peine d'utiliser les règles de césures françaises ?)
        Quand je vois les gens demander de l'aide sur la toile pour finaliser des rapports/thèses/livres, les usagers de *TeX semblent les plus à chipoter pour les pouillièmes d'espacement ci et là quand les usagers de traitement de texte sont en train de se battre pour la consistance des titres par exemple.

        “It is seldom that liberty of any kind is lost all at once.” ― David Hume

        • [^] # Re: Présentation rigolote de LaTeX

          Posté par  . Évalué à 3.

          pour finaliser des rapports/thèses/livres, les usagers de *TeX semblent les plus à chipoter

          C’est vrai pour des thèses et des livres, mais des rapports d’élèves ne bénéficient pas d’autant de soin (je ne parle même pas de rapport de stage master mais de rapports rédigés pendant leur scolarité). En général, les tableaux sont affreux, les figures débordent dans les marges, les espaces insécables sont mal utilisées donc les retours à la ligne mal maîtrisés, de plus le style de base des documents LaTeX a un air daté et les tentatives de le modifier sont au mieux infructueuses. Alors que ces même élèves maîtrisent en général assez bien les outils bureautiques pour faire de jolies choses avec (jolies hein, je n’irais pas vérifier qu’ils ont fait usage des styles ou que leur document ait la moindre information sémantique correcte).

          • [^] # Re: Présentation rigolote de LaTeX

            Posté par  (site web personnel, Mastodon) . Évalué à 2.

            Ah d'accord, je comprends mieux. Pour les retours à la ligne, j'ai observé son mauvais usage dans les outils bureautiques (les gens se retrouvent à changer le corps de police partout, ce qui fait que les documents conséquents mettent du temps à être finalisé et rester cohérent : le fait est qu'effectivement peu font usage de styles, et peu comprennent la notion de paragraphe et la différence d'avec un simple saut de ligne qui devrait être rare) Les insécables aussi, j'ai l'impression que peu de gens savent les faire mais bénéficient des traitements automatiques (et les mêmes personnes se retrouvent larguées avec une installation configurée un peu différemment) dont certains existent sous LaTeX (qui remplacera par exemple les espaces simples par l'insécable autour de certains caractères, mais là aussi il faut avoir indiqué les options qui vont bien car s'il ne sait pas que le document est en français par exemple le traitement des deux points se fera comme en anglais)

            C'est dommage que certaines options ne soient pas plus utilisées et/ou que les usagers de base ne sachent pas quoi rajouter dans leurs préambules selon les besoins (on a mêmes des styles qui permettent de changer de thème —jeu de polices et couleurs et quelques autres fioritures— comme les suites bureautiques —je ne parle pas des modèles de document mais bien de thème/habillage comme j'ai vu O365 proposer.) Et comme TeX est lui-même un langage, on ne se lève pas un matin pour commencer à bidouiller les macros sans comprendre. Par contre, il y a l'avantage de pouvoir rester concentré sur la structure et l'articulation du texte comme tu l'avais dit. On retrouve le même souci pour la rédaction ici : difficile de dévier de l'apparence attendue sans s'arracher les cheveux, mais on fait assez facilement des contenus bien structurés et avec une présentation homogénéisée.

            “It is seldom that liberty of any kind is lost all at once.” ― David Hume

            • [^] # Re: Présentation rigolote de LaTeX

              Posté par  (site web personnel) . Évalué à 1.

              Pour le coup, s’il y a bien un langage qui ne sépare pas le fond de la forme, c’est LaTeX. Dès que tu veux changer la forme, tu te retrouves à modifier ton document…

              • [^] # Re: Présentation rigolote de LaTeX

                Posté par  . Évalué à 4.

                C'est comme pour beaucoup de ces outils ça dépend de comment tu crée ton document. Les styles de LibO sont on parle beaucoup ici sont des commandes en TeX. Modifier le comportement d'une commande ne demande pas de modifier le fond de ton document.

                https://linuxfr.org/users/barmic/journaux/y-en-a-marre-de-ce-gros-troll

    • [^] # Re: Présentation rigolote de LaTeX

      Posté par  (site web personnel, Mastodon) . Évalué à 4.

      On le voit où le bouquin sous une forme lisible ? J'ai rien compris au dépôt github !

      « Tak ne veut pas quʼon pense à lui, il veut quʼon pense », Terry Pratchett, Déraillé.

      • [^] # Re: Présentation rigolote de LaTeX

        Posté par  . Évalué à 4.

        Il y a le lien dans le journal https://linuxfr.org/users/julien_jorge/journaux/compter-en-c-de-98-jusqu-a-11#toc-o%C3%B9-le-trouver

        « Rappelez-vous toujours que si la Gestapo avait les moyens de vous faire parler, les politiciens ont, eux, les moyens de vous faire taire. » Coluche

        • [^] # Re: Présentation rigolote de LaTeX

          Posté par  (site web personnel, Mastodon) . Évalué à -3.

          Ah oui merci.

          (on pourrait faire ça facilement avec un traitement de texte).

          « Tak ne veut pas quʼon pense à lui, il veut quʼon pense », Terry Pratchett, Déraillé.

          • [^] # Re: Présentation rigolote de LaTeX

            Posté par  . Évalué à 6.

            (on pourrait faire ça facilement avec un traitement de texte).

            Comment on fait pour mettre en place facilement un système pour que n'importe qui puisse proposer des corrections ou modification facilement et directement dans le fichier final avec un traitement de texte ?

            « Rappelez-vous toujours que si la Gestapo avait les moyens de vous faire parler, les politiciens ont, eux, les moyens de vous faire taire. » Coluche

            • [^] # Re: Présentation rigolote de LaTeX

              Posté par  (site web personnel, Mastodon) . Évalué à 1.

              Ben tu utilises un truc genre Collabora online avec un compte Tracim par exemple. C'est que je fais avec certaines personnes. C'est très facile à faire.

              Si tu as des problèmes de connexion, chacun peut travailler dans son coin (ou à tour de rôle) et il y a une (vieille) fonctionnalité de gestion des modifications (on voit, on accepte ou refuse) et une autre (vieille aussi) de comparaison et fusion des documents. L'intérêt c'est qu'on ne perd pas visuellement la mise en forme (tout en ayant toujours la structure et le fonds séparé de la forme évidemment). Pour moi c'est super important.

              « Tak ne veut pas quʼon pense à lui, il veut quʼon pense », Terry Pratchett, Déraillé.

              • [^] # Re: Présentation rigolote de LaTeX

                Posté par  . Évalué à 7.

                Donc, pas moyen d'avoir les fichiers d'exemple à part pour pouvoir les compiler/tester directement, pas moyen d'ouvrir aux proposition de modification à tout le monde sans connaître leur compte à l'avance. Et pas moyen de travailler avec git qui est quand même plus courant comme outil pour quelqu'un qui fait du C++.

                « Rappelez-vous toujours que si la Gestapo avait les moyens de vous faire parler, les politiciens ont, eux, les moyens de vous faire taire. » Coluche

                • [^] # Re: Présentation rigolote de LaTeX

                  Posté par  (site web personnel, Mastodon) . Évalué à 2.

                  Ouais c'est une autre façon de travailler. Mais bon. Chacun son truc hein.

                  Je ne comprends pas d'ailleurs comment git fonctionne soit dit en passant. Et je n'ai pas réussi à mettre la main sur un truc qui explique bien tout ça en détails (et en français) sans présupposer que je sais déjà comment ça fonctionne.

                  « Tak ne veut pas quʼon pense à lui, il veut quʼon pense », Terry Pratchett, Déraillé.

                  • [^] # Re: Présentation rigolote de LaTeX

                    Posté par  . Évalué à 3.

                    Un texte de qualité sur les DVCS :

                    https://hginit.github.io/ (EN)

                    Pour les grandes lignes tu peux remplacer hg par git :P

                  • [^] # Re: Présentation rigolote de LaTeX

                    Posté par  . Évalué à 4.

                    Tu vas me dire que ça présuppose de savoir déjà comment ça fonctionne mais bon : http://git-scm.com/book/fr/v2

                  • [^] # Re: Présentation rigolote de LaTeX

                    Posté par  (site web personnel) . Évalué à 4.

                    En passant par la source par exemple :

                    https://git-scm.com/book/fr/v2

                    Jérôme.

                  • [^] # Re: Présentation rigolote de LaTeX

                    Posté par  (site web personnel) . Évalué à 3.

                    La plupart des gens qui utilisent git ne savent pas non plus comment ils fonctionnent, ni ne savent s'en servir au delà d'un petit chemin bien étroit qu'ils suivent.

                    Git est assez compliqué d'une part à cause de la complexité conceptuelle qu'apporte ce genre d'outils (VCS) et d'autre part à cause de la grande souplesse de git – c'est plus facile d'utiliser des outils qui ont fait des choix pour nous, ce n'est pas le cas de git.

                    Ton utilisation de systèmes collaboratifs t'a certainement donné de quoi surmonter la complexité conceptuelle des VCs rapidement. Un aspect que je trouve fascinant est que le même outil résolve deux problèmes apparemment complètement différents: 1/garder une historique des états importants d'un groupe de fichiers et 2/faciliter la collaboration de plusieurs personnes sur un groupe de fichiers. Cette différence n'est qu'apparente: si on enregistre deux modifications du fichier a des moments différents, le fait qu'elles proviennent de la même personne est peut-être intéressant à documenter mais ne change rien aux problèmes qu'il faut résoudre pour que “tout se passe bien”.

                    En ce qui concerne la grande souplesse de git, si on s'en tient à l'utilisation la plus simple de git on fait du trunk-based deployment – c'est à dire qu'on ne fait pas de branches (univers parallèles) et en gros tout ce qu'il faut savoir utiliser c'est:

                    • git pull -> je tire la dernière version des fichiers
                    • emacs … -> je travaille :-)
                    • git add ; git commit -> j'enregistre mes modifications
                    • git push -> je publie mes modificiations

                    On peut utiliser des logiciels graphiques qui donnent un peu d'assistance et d'intelligibilité à ces interactions. En dépit de sa simplicité – on n'utilise que les fonctions les plus basiques de git cette approche est un standard industriel (pas le seul :-) ) et beaucoup de projets s'en tiennent à cela.

                    J'espère que ces commentaires te donneront un peu de cœur à l'ouvrage et compenseront un des gros défauts des livres et tutoriels: la tendance à l'exhaustivité! Bon courage :-)

                    • [^] # Re: Présentation rigolote de LaTeX

                      Posté par  (site web personnel, Mastodon) . Évalué à 4.

                      Merci.

                      Ces derniers temps, j'ai eu à me plonger dans Fossil, qui fait plein de trucs comme git, mais j'ai trouvé ça nettement plus évident pour ce que je devais faire, alimenter un wiki. Et pourtant, au début je n'aimais pas trop et c'est assez, disons austère. Mais en fait c'est pas super compliqué à comprendre pour des gens comme moi.

                      « Tak ne veut pas quʼon pense à lui, il veut quʼon pense », Terry Pratchett, Déraillé.

                      • [^] # Re: Présentation rigolote de LaTeX

                        Posté par  (site web personnel, Mastodon) . Évalué à 3.

                        Fossil est effectivement pensé dans dans ce sens : refaire un truc plus simple et plus cohérent que Git (Mercurial est plus cohérent aussi, et Darcs je ne sais pas ; mais ils ne sont pas forcément très simples, bien qu'un chouia plus pour hg je trouve.)
                        Outre la simplicité du système de versionnage (bon c'est pas RCS non plus hein, mais ça s'apprend aussi vite que du Subversion), c'est aussi une forge simple (et un peu austère oui) avec une fonctionnalité de wiki sympatoche.

                        “It is seldom that liberty of any kind is lost all at once.” ― David Hume

                      • [^] # Re: Présentation rigolote de LaTeX

                        Posté par  (site web personnel) . Évalué à 4.

                        Ah mais c'est très bien Fossil! :-)

                        Je sais pas trop comment sont “les gens comme toi“ mais manifestement pas du genre à s'arrêter à la première difficulté :-)

    • [^] # Re: Présentation rigolote de LaTeX

      Posté par  (site web personnel, Mastodon) . Évalué à 2.

      Les modèles de document de base sont assez moches et sont plutôt à regarder comme des exemples ou des outils pour démarrer mais n'ont certainement pas vocation a être des exemples de mise en page.

      C'est étrange, moi je les trouve bien faits et n'utilise que ça (sauf s'il y a un modèle qui est fourni par l'éditeur.) Mais bon, des goûts et des couleurs…?

      Il y a des trucs que je n'arrive toujours pas à bien faire, notamment mettre en évidence une ou plusieurs lignes d'un extrait de code. Pour l'instant j'ai juste une solution bricolée avec l'aide d'Internet, où le listing est coupé en plusieurs blocs selon la région à faire ressortir, et seule celle-ci a une couleur d'arrière plan. C'est pas fou.

      J'ai regardé ce que tu as fait, c'est pas mal (pour la publication électronique). Tu as pensé à mettre juste un appel dans la marge (genre étoile, main pointé ou numéro entouré, comme dans les Zapf Dingbats?) C'est pas très glamour mais ça marche.

      Faut croire que le besoin n'est pas si courant :-/ Je n'en ai jamais eu besoin personnellement, mais j'aurais pensé que listings le faisant (je n'ai rien trouvé de tel en parcourant vite fait la doc, sauf à jouer avec la numérotation ou des styles de commentaires différents, mais diverses alternatives sont mentionnées.) Par contre minted semble avoir cet atout (je vois des options intéressantes à explorer : escapeinside qui existe aussi pour l'autre, firstline et lastline, highlightcolor et highlightlines.) Pour bricoler, on recommande souvent fancyvrb

      Sinon pour compléter par rapport aux appels en marge, s'il s'agit de faire certains types de blocs en exergue

      qu'on s'intéresse aux inserts,

      il y a awesomebox qui est sympa.

      “It is seldom that liberty of any kind is lost all at once.” ― David Hume

  • # Hibou (chouette)

    Posté par  (site web personnel) . Évalué à 4.

    C'est un chouette projet ! J'ai parcouru des bouts et j'aime bien l'approche avant/après pour motiver le passage à C++11.

    Je remarque que tu as extrait certains code source dans des fichiers séparés, ça pourrait être bien d'essayer de les compiler pour garantir qu'ils sont « propres ». Par exemple je vois plusieurs fonctions main renvoyant int mais sans return. Ça ne change rien au discours de fond, mais fournir des exemples sans warning ajoute un côté classou à l'ensemble à mon avis.

    • [^] # Re: Hibou (chouette)

      Posté par  (site web personnel) . Évalué à 7.

      Merci pour le retour :) Les fichiers d'exemples extraits sont en effet compilés, via la fonction add_example() du CMakeLists.txt.

      La fonction int main() sans return, c'est standard ! C'est la seule fonction qui retourne implicitement 0 si on ne met rien (cf [basic.start.main]). Néanmoins ça fait quand même bizarre, je vais mettre des return pour éviter les surprises.

      • [^] # Re: Hibou (chouette)

        Posté par  (site web personnel) . Évalué à 5.

        Ou alors tu en profites pour mettre une note qui explique cette particularité.

      • [^] # Re: Hibou (chouette)

        Posté par  (site web personnel) . Évalué à 4.

        Super tip! Merci o/

      • [^] # Re: Hibou (chouette)

        Posté par  (Mastodon) . Évalué à 6.

        Même si c'est standard, j'en mets toujours un. Et je fais même pire.

        #include <cstdlib>
        
        int main() {
          return EXIT_SUCCESS; // or EXIT_FAILURE
        }
        • [^] # Re: Hibou (chouette)

          Posté par  (site web personnel, Mastodon) . Évalué à 2. Dernière modification le 03 juin 2021 à 19:21.

          Dans mes bras (j'ai aussi ce travers.)
          Par contre, suis plutôt du style de mise en forme GNU (utilisé aussi par GNOME), à la rigueur Whitesmiths/Allman, plutôt que KR (dont les noyaux BSD et Linux utilisent leur petite variante.) Certainement mon héritage algolique.

          “It is seldom that liberty of any kind is lost all at once.” ― David Hume

      • [^] # Re: Hibou (chouette)

        Posté par  . Évalué à 3.

        a fonction int main() sans return, c'est standard ! C'est la seule fonction qui retourne implicitement 0 si on ne met rien

        Ça je ne savais pas, moi je mets toujours un return 0;

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.