Journal En passant par le FOSDEM, avec mes sabots đŸŽ”

Posté par  (site web personnel) . Licence CC By‑SA.
Étiquettes :
25
5
fév.
2024

Sommaire

Demat'iNal,

De retour du FOSDEM, je me permets de partager avec toi quelques notes techniques et découvertes glanées au fil des conférences.

SemVer in Rust [track rust]

Chouette présentation sur le semantic versionning. J'ai apprécié le temps passé à décrire les « différences d'appréciation » entre le SemVer strict et celui de Rust. Par exemple SemVer spécifie qu'une version majeur à zéro autorise de casser les APIs, mais la coloration Rust ne le permet pas.

Le but de la présentation était d'introduire semver-checks qui vérifie si un changement de code est correctement reflété dans le numéro de version. Amusant de voir une approche d'analyse du source pour faire ça là ou libabigail se base sur les infos contenues dans le DWARF.

Il y a eu plusieurs exemples de cas subtils qui peuvent casser l'ABI, et c'Ă©tait particuliĂšrement ludique Ă  voir :-)

Writing your own rust linter [track rust]

Encore une rpésentation d'analyse statique, cool. Il y a un blog post associé pour les curieux. J'ai surtout tiqué sur le fait qu'on pouvait s'insérer au niveau AST ou au niveau AST annoté suivant le type d'analyse à faire, et surtout que ces paquets se basaient sur les API internes du compilo rust, qui n'ont pas de garantie de stabilité ce qui demande un effort conséquent aux mainteneurs

The plan for gccrs [track rust]

Le retour de la vengeance du fils ! Fut un temps oĂč clang dĂ©fiait gcc dans on prĂ© carrĂ©, lĂ  GCC vient titiller LLVM sur le terrain Rust. Vu les bĂ©nĂ©fices mutuels qu'en ont retirĂ© les deux communautĂ©s dans le monde C et C++, espĂ©rons que ce sera aussi le cas pour Rust.

Parmi les motivations, outre la pluralité chÚre à l'Open Source, on trouve le support d'architectures uniquement supportées par GCC.

J'ai particuliÚrement aimé les problÚme de bootstrap et les stratégies utilisées pour intégrer le borrow checker de Rust dans gccrs sans avoir à le réécrire.

David Malcolm était dans l'audience, ce qui a conduit à des discussions intéressantes autour de libgccJIT

Proving Performance [track rust]

Pour faire court, ça parle d'un équivalent de timeit pour Rust, divan (excellent jeu de mot ! a comfy bench(mark))

J'ai adorĂ© l'utilisation d'une macro Rust pour spĂ©cifier un benchmark Ă  travers une annotation, ça me donne des idĂ©es


In-Process Isolation for Unsafe Rust [track rust]

Présentation plus académique sur l'isolation d'un fragment de code natif pour éviter qu'il ne « bave » sur le reste de l'application en cas d'erreur.

Là encore le systÚme de macro de Rust apporte une couche de vernis syntaxique agréable, mais le corps du boulot se trouve dans la combinaison d'une analyse statique pour déterminer les zones mémoires à isoler avant un appel de fonction, et des mécanisme d'isolation que je ne connaissais pas mais qui semblent décrits dans un article de la présentatrice dont j'ai parcouru la partie « introduction du contexte » avec plaisir.

The Four Horsemen of Bad Rust Code [track rust]

Indépendamment du contenu technique, le présentateur nous a offert une masterclass niveau qualité des supports et de la présentation. Je n'ai pas trouvé de référence vers les sources, mais voilà de quoi vous faire une idée du style graphique.

Sur le fond, la description de plusieurs approche à problÚme était intéressante, surtout quand on se rend compte que les situations rencontrées se déclinent à volonté sur d'autres langages : ignorance, excessive abstraction, premature optimization et omission.

Oh et l'auteur dit s'ĂȘtre inspirĂ© du One Billion Row challenge que je ne connaissais pas mais dont l'Ă©noncĂ© est amusant :-)

foire fouille [track gdb et gcc]

N'ayant plus de batteries à ce moment, j'ai été moins consciencieux dans ma prise de notes, j'ai donc juste noté des références qui m'ont interpellées. Toutes mes excuses aux présentateurs auxquels je fais donc une piÚtre hommage dans ces lignes.

  • GCC a une config gdb pour positionner facilement des breakpoint Ă  chaque fois qu'un warning est Ă©mis, pratique pour les devs de compilo.

  • Je n'utilise pas trop les watchpoints de gdb, je devrais, surtout qu'il y a un support hardware

  • gdb permet d'afficher Ă©lĂ©gamment le contenu de certains types si les bon prettyprinter ont Ă©tĂ© Ă©cris, et c'est le cas pour les structures internes de gcc, faudrait que je regarde si on a ça pour les types de base de LLVM. Et l'option /r permet de passer outre si besoin.

  • Jeremy Bennett avait une magnifique cravate reprĂ©sentant un circuit imprimĂ©.

  • L'implĂ©mentation du reverse debugging dans gdb est super amusante Ă  dĂ©faut d'ĂȘtre complĂšte. Et

  • Il existe une norme Unicode sur les identifiants l'UAX#31

  • Le punycode permet de reprĂ©senter toute chaĂźne Unicode en ASCII

  • Il y a bien plus de monde bossant sur compiler explorer que je le pensait, dont un joyeux français qui moule lui aussi sur DLFP.

  • Il y a un mode diff dans compiler explorer.

  • Les stats de compiler explorer sont publiques

  • Les tiny urls de compiler explorer sont voulues persistantes dans le temps, c'est donc a priori OK de les utiliser dans des rapports de bugs etc

Et une mention spéciale pour le camarade Lancelot Six qui a fait sa premiÚre présentation officielle au FOSDEM sur un sujet particuliÚrement technique !

  • # watchpoints hardware sur x86_64

    Posté par  . Évalué à 2.

    Je n'utilise pas trop les watchpoints de gdb, je devrais, surtout qu'il y a un support hardware

    Yep, de vieille mémoire il y a 4 registres dédiés à ça sur x86_64, donc on peut surveiller jusqu'à 4 variables en hardware. Au delà, c'est affreusement lent par contre.

    • [^] # Re: watchpoints hardware sur x86_64

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

      Avec la pile d'appel ?

      Souvent un bug provient d'un mauvais usage d'une fonction parfaitement fonctionnelle.

      "La premiÚre sécurité est la liberté"

      • [^] # Re: watchpoints hardware sur x86_64

        Posté par  . Évalué à 4. DerniĂšre modification le 05 fĂ©vrier 2024 Ă  16:20.

        Oui, tu as la pile d'appel. Elle est stockée dans la stack, à laquelle le débogueur a accÚs.

        Un (hardware) watchpoint devrait se comporter exactement comme un breakpoint, l'exécution du programme est stoppée par une interruption, à ceci prÚs qu'aucune instruction n'est remplacée par un truc du genre int 3, le processeur prévient l'OS qu'un accÚs en lecture ou en écriture a eu lieu sur la case mémoire demandée. Et l'OS prévient le débogueur.

  • # Sympa, merci !

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

    Super sympa de nous restituer tout ça ! Merci.

    🩀🩀🩀🩀🩀🩀

    🩀🐍 http://github.com/buxx đŸ–„ https://algoo.fr 📋 https://tracim.fr

  • # compiler explorer

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

    David Malcolm était dans l'audience, ce qui a conduit à des discussions intéressantes autour de libgccJIT

    A noter que libgccjit n'est pas impliqué dans gccrs. Dans gccrs, nous (enfin, surtout eux) réécrivons le frontend, en C++, à partir de rien (ou presque, comme tu as pu l'entendre pendant la présentation).
    libgccjit est utilisé pour le projet copain rustc_codegen_gcc qui ajoute un backend gcc au compilateur rustc en utilisant la libgccjit qui ne fait pas vraiment du JIT du tout en fait :)

    Il y a bien plus de monde bossant sur compiler explorer que je le pensait, dont un joyeux français qui moule lui aussi sur DLFP.

    ça se saurait


    Il y a un mode diff dans compiler explorer.

    Oui, mais il est trĂšs limitĂ© hĂ©las. Et puis il semble surtout cassĂ© Ă  l'heure oĂč j'Ă©cris ce message. La bonne nouvelle Ă©tant qu'un fix est dĂ©jĂ  en train d'ĂȘtre dĂ©ployĂ© (pas de moi).

    Les stats de compiler explorer sont publiques

    Oui, depuis cette année.

    Les tiny urls de compiler explorer sont voulues persistantes dans le temps, c'est donc a > priori OK de les utiliser dans des rapports de bugs etc

    Nous ne supprimons jamais de compilateurs, leurs identifiants ne changent jamais, dans le but de prĂ©server les liens partagĂ©s "Ă  vie". Il n'y a aucun moyen mis en place pour supprimer/expirer/Ă©diter un lien partagĂ©. Il existe 2 types de liens: short et full. Le full est une simple sĂ©rialisation de la config de l'interface (position fenĂȘtres, position curseurs, taille police, etc) et biensĂ»r du code d'entrĂ©e. Nous ne sauvegardons rien concernant un lien "full". Un lien short, c'est simplement un full dont le rĂ©sultat de la sĂ©rialisation est sauvĂ© chez nous et auquel on accĂšde via un lien "minifiĂ©".

    • [^] # Re: compiler explorer

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

      Trop facile, le fix pour le diff est déjà presque deployé partout. Voilà un exemple: https://c.godbolt.org/z/cYKcsMG6z

    • [^] # Re: compiler explorer

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

      Alors déjà merci pour ce bel outil qu'est Compiler Explorer, c'est un véritable changeur de jeu pour moi. Tu pourras remercier pour moi ce Matt
 heu
 son nom m'échappe
 Matt C. Explorer?

      Que ce soit pour vérifier des optimisations, comprendre ce que fait le compilateur, ou échanger avec les collÚgues sur ces sujets, ça m'a grandement simplifié la vie. En plus tout est libre, c'est une bien belle contribution pour la communauté :)

      Reste plus qu'Ă  avoir une interface lisible sur mobile. Malheureusement si j'ai bien compris c'est dĂ©pendant d'un plug-in tiers pour lequel l'Ă©diteur n'a lĂ©gitimement que peut d'intĂ©rĂȘt Ă  gĂ©rer le mobile.

      • [^] # Re: compiler explorer

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

        Je transmet ça à Matt :)

        Oui, le fait que ça marche mal sur mobile revient réguliÚrement, et tu as raison aussi sur la raison qui fait que ça ne bouge pas. Le site repose sur monaco (https://microsoft.github.io/monaco-editor/) et son super mobile, ben voilà quoi :)

        Un contournement qui est parfois acceptable est d'utiliser la version /noscript. C'est relativement moche, mais ça a le mérite de fonctionner pour les trucs simples. AprÚs, j'irais pas essayer d'ouvrir le opt-viewer de clang ou un cfg-viewer *<:o)

  • # Punycode

    Posté par  . Évalué à 8. DerniĂšre modification le 06 fĂ©vrier 2024 Ă  01:12.

    Le punycode permet de représenter toute chaßne Unicode en ASCII

    Et c’est recommandĂ© de l’utiliser dans son brouteur pour lutter contre les tentatives de phishing. Cela a dĂ» ĂȘtre dit au FOSDEM, mais comme tous les visiteurs n’ont pas Ă©tĂ© Ă  cette manifestation je me permets de faire mon intĂ©ressant rĂ©pandre la bonne parole.

    Parce que, par exemple, le a minuscule et le a minuscule cyrillique, je ne crois pas que quelqu’un⋅e sache exactement quelle est la diffĂ©rence. Ils ont pourtant un codepoint Unicode chacun (ce qui en soit n’est pas dĂ©connant), et aujourd’hui les noms de domaine peuvent utiliser Unicode
 Donc voir du Punycode dans sa barre d’adresse permet d’avertir que le site n’est pas celui qu’on visait

    Dans Firefox c’est l’option (accessible via la page spĂ©ciale about:config) qui se nomme : “network.IDN_show_punycode”, Ă  mettre Ă  "true".

    Pour Chrome/Chromium je sais pas mais ça doit bien exister.

Suivre le flux des commentaires

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