Première sortie d’Élixir : embarquez, naviguez !

Posté par  . Édité par Davy Defaud, Benoît Sibaud, palm123 et Nicolas Casanova. Modéré par Nils Ratusznik. Licence CC By‑SA.
34
26
juin
2017
Linux

Ça fait quelques années que Free-Electrons propose de naviguer dans le code source de notre bien‐aimé noyau. Le vénérable Linux Cross Reference (LXR) ayant un peu de mal quand le vent et les grosses vagues se lèvent, ils ont cherché autre chose : OpenGrok, la dernière version 2.2 de LXR… Une petite plongée dans le code plus tard, Mikael Bouillot, secouant sa crinière, a décidé de coder un outil simple et léger, sans bases de données superflues : Elixir — comme le langage, oui, mais c’est codé en Python.

LXR a été créé en 1994 pour naviguer aisément dans le code source du noyau Linux. La sortie est en HTML avec tous les liens qu’il faut. Au début, LXR n’utilisait pas de base de données SQL, ce qui avait l’avantage d’être simple et rapide. Free-Electron a choisi d’utiliser la version LXR 0.3.1 (stable et sans SQL) pendant trèèèès longtemps.

Alors pourquoi créer un nouveau moteur ?

LXR 0.3.1 c’est un peu vieux et limité… Depuis 1999 le Web a changé, le noyau avec ses arbres et son historique de développement sont beaucoup, beaucoup, beaucoup, beaucoup, beaucoup plus gros, Linus a développé Git, etc., et Free-Electrons voulait étendre son service vers d’autres projets tout en l’améliorant (Web adaptatif (responsive design)). Tout ça devant demeurer simple, rapide et léger. L’arlésienne, quoi !

Il y a une autre raison : Free-Electrons voulait vraiment beaucoup améliorer son service ! Il s’agissait de fournir les dernières révisions tout en conservant des références non modifiables (immutable), c’est‐à‐dire que quiconque plaçait un lien vers ces jolis petits bouts de code en C serait assuré de le retrouver quelques siècles plus tard (soyons visionnaires).

Il s’agissait, près de l’herbage
D’un champ de choux verts et pommés
Un champ de rêve en vérité
Qui excitait sa convoitise
Et qu’un vieux berger protégeait.
Les bergers sont d’une bêtise !

(interlude)

Deux grandes idées :

  1. Comme dans LXR 0.3, fuir comme la peste les moteurs de bases de données relationnelles et rester frugal avec un stockage en listes de paires clefs‐valeurs ;
  2. Utiliser le modèle de données de Git pour éviter d’indexer de multiples versions identiques d’un fichier. Indexer les blobs de Git suffit puisqu’ils sont partagés entre les révisions.

Et tout ça reste assez simple, deux petits scripts en Python se répartissent le boulot d’indexer et produire les pages à la demande, Ctags fournissant les identifiants.


L’interlude poétique est extrait d’une fable de Jean‐Pierre Rosnay : La chèvre et le chou.

Aller plus loin

  • # Bravo

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

    J'ai déjà été mis au courant du changement car… j'utilise ce site presque tous les jours.
    En complément de l'usage de Git au boulot pour aller dans les entrailles du noyau ou de U-boot, vraiment très utile et m'a sauvé de nombreuses heures de navigations à travers les sources pour remonter par exemples les appels internes au sein de ces programmes.

    Merci à eux, le nouveau site fonctionne très bien et le progrès est notable. :)

    • [^] # Re: Bravo

      Posté par  . Évalué à 2.

      Je tiens aussi à vous féliciter.
      Je m'étais rendu compte du changement il y a quelques jours en allant sur LXR pour trouver un bout de code du noyau et j'avais vraiment été agréablement surpris.

      Déjà la béta de l'ancien LXR était cool car elle permettait de rechercher des macros mais là l'interface est vraiment cool :)
      À la rigueur une petite feature en plus qui me ferait plaisir serait de choisir la couleur du visionnage du code (j'ai une préférence pour les éditeurs blanc sur fond noir ).

      • [^] # Re: Bravo

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

        À la rigueur une petite feature en plus qui me ferait plaisir serait de choisir la couleur du visionnage du code (j'ai une préférence pour les éditeurs blanc sur fond noir ).

        J'approuve cette requête.

        Quitte à vouloir améliorer l'outil (qui est déjà bien) un lien vers le gitweb du projet officiel pour la version choisie pourrait être utile pour simplifier le workflow pour étudier les commits présents dans cette version ou non.

  • # BDD

    Posté par  . Évalué à 1.

    fuir comme la peste les moteurs de bases de données relationnelles et rester frugal avec un stockage en listes de paires clefs‐valeurs ;

    Ce serait possible de faire un ELI5 pour les noobs en BDD comme moi ?

    • [^] # Re: BDD

      Posté par  . Évalué à 3.

      Autrement dit, on ne s'embarrase pas de tableaux avec des colonnes de données (des champs), mais on enregistre l'information dans des fichiers texte. Les fichiers contiennent des listes associant une clef à une valeur. Comme par exemple:

      Titre = Ordre du Jour
      v1 = Tenir l'âme en état de marche
      v3 = Tenir le contingent à distance
      v4 = Tenir l'âme au-dessus de la mêlée
      v5 = Tenir Dieu pour une idée comme une autre
      v6 = un support, une éventualité,
      v7 = une contrée sauvage de l'univers poétique
      v8 = Tenir les promesses de son enfance
      v9 = Tenir tête à l'adversité
      v10 = Ne pas épargner l'adversaire
      v11 = Tenir parole ouverte
      v12 = Tenir la dragée haute à ses faiblesses
      v13 = Ne pas se laisser emporter par le courant
      v14 = Tenir son rang dans le rang de ceux qui sont décidés
      v15 = à tenir l'homme en position estimable
      v16 = Ne pas se laisser séduire par la facilité
      v18 = sous le prétexte que les pires
      v19 = se haussent commodément au plus haut niveau
      v20 = et que les meilleurs ont peine à tenir la route
      v21 = Etre digne du privilège d'être
      v22 = sous la forme la plus réussie: l'homme.
      v23 = Ou mieux encore, la femme.
      Auteur = Jean-Pierre Rosnay
      Livre = Fragment et Relief
      Année = 1992
      URL = http://www.poesie.net/jpordre.htm

      "La liberté est à l'homme ce que les ailes sont à l'oiseau" Jean-Pierre Rosnay

    • [^] # Re: BDD

      Posté par  . Évalué à 2. Dernière modification le 03 juillet 2017 à 16:22.

      En français : un SGBD n'est pas nécessairement un SGBDR.

      Il est encore fréquent qu'un concepteur de logiciel choisisse une base de données relationnelles pour manipuler ses données alors que l'usage n'est pas adapté : quand les relations entre les données ne sont pas très importantes.

      Or les bases de données relationnelles, comme toutes les formes de stockages, ont leurs inconvénients : peu performante en I/O, peu scalable et une API plutôt lourde (à base de déclaration SQL, curseur, connexion).

      Une image : si ton cas d'usage est de garer ta voiture, est ce que tu vas utiliser un parking où toutes les roues sont stockées d'un côté, toutes les portes d'un autre, etc. et qu'il faut désosser la voiture pour la garer et tout reconstruire pour la récupérer ? Non, tu vas utiliser un parking où tu peux garer ta voiture en entier et la retrouver grâce au numéro de place que tu aura mémorisé.

      En revanche, une base de données relationnelles peut être très adaptée à stocker les données de gestion d'une entreprise (produit, facture, stock, commande, client) qui ont besoin d'une forte intégrité et dont l'unité de l'objet est peu importante.

      Le stockage clé/valeur, choisi ici, est un des plus basique. Il propose peu de fonctionnalités (en gros put/get/delete) mais est très simple à manipuler, scalable et très performant en I/O.

  • # Mon alternative.

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

    J'ai moi même développé une alternative à LXR.
    J'utilise clang pour analyser le code source.
    Cela permet une bien meilleur prise en charge du code en C car clang connait le type de tout et peut ainsi rediriger vers le bon partie.
    Par exemple si le code a quelque chose comme st->state, on sait ce que state est, quelle membre de quelle structure, alors qu'il me semble que LXR va juste donner tout les membre state de toute les structures.

    Le code de Linux est aussi navigable là: https://code.woboq.org

    • [^] # Re: Mon alternative.

      Posté par  . Évalué à 6. Dernière modification le 26 juin 2017 à 14:10.

      Impressionnant ton outil! ça a l'air bien mieux foutu pour la compréhension.
      On est demandeur d'un article de présentation sur linuxfr.org!

      Accessoirement, j'aimerai un outil semblable pour naviguer dans du gros code Perl

      "La liberté est à l'homme ce que les ailes sont à l'oiseau" Jean-Pierre Rosnay

    • [^] # Re: Mon alternative.

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

      La licence de ton outil n'est pas très claire, tu pourrais nous en dire plus ?

  • # vim plugin

    Posté par  . Évalué à 5.

    Comme on peut aussi utiliser cet outils sans l'interface web (et que j'utilise des kernels anciens et pas très vanilla), j'ai commencé un petit vimscript pour faire des recherches directement de mon éditeur.

    Mais mon niveau de vimscripting est (très) bas.
    https://gist.github.com/Nimlar/6492fc53c8dc828771db83f774dcc021

    Ça marchote, mais c'est fortement buggué. (par exemple le répertoire courant est régulièrement changé… et je n'ai pas (encore) trouve pourquoi).

Suivre le flux des commentaires

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