Journal Retour sur une année d'apprentissage d'Ada par un dev C++

Posté par  (site web personnel, Mastodon) . Licence CC By‑SA.
Étiquettes :
16
31
mar.
2022

Cette année, AdaCore organisait un nouveau concours, Ada Crate of the year.

Les habitués de Rust auront reconnu le terme crate qui correspond, grosso modo, à une bibliothèque ou une application que l'on construit via un package manager Cargo.

En Ada, le projet Alire vise le même but et le fonctionnement est similaire. Un projet Alire est, tout comme en Rust, recompilé, dépendances comprises et linké en un exécutable.

Venons-en maintenant au sujet du journal.

Paul Jarrett est le premier gagnant de ce concours avec son application, Septum.
Cette application, dont j'ai déjà parlé dans la rubrique liens, permet la recherche dans un corpus important de fichiers texte. Elle se présente sous la forme d'un interpréteur permettant de cumuler des conditions de filtrage et de recherche. Un super grep en somme :)
Bon, il faut bien regarder la vidéo de Paul et utiliser l'outil pour bien comprendre :)

D'un point de vue code, Paul a utilisé une bonne partie des fonctionnalités du langage comme le typage bien sûr mais aussi les tâches (multithreading donc) de façon à parcourir les fichiers le plus rapidement possible.

Après avoir développé son application à l'ancienne, Paul a porté celle-ci, et ses dépendances, sous Alire ce qui lui a valu le premier prix.

Paul avait déjà fait une présentation lors du dernier FOSDEM et, en tant que gagnant du concours, il a donc été invité par AdaCore à écrire un article de blog.

Dans cette article, il explique donc l'origine du projet, pourquoi il a voulu utiliser Ada, les améliorations faites dans le cadre du concours, le passage sous Alire.
La conclusion passe par l'évaluation d'Ada et d'Alire.

Si ça intéresse des gens, je ferai un petit journal sur Alire, le multitâche…, il suffit de demander :)

  • # Pas un journal

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

    Une dépêche pour Alire je pense.

    D'abord ça donnera plus de visibilité à l'information, ensuite comme ça Ada aura une section.

    Merci pour ce journal.

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

  • # Ma courte expérience en Ada

    Posté par  . Évalué à 5.

    Bonjour,

    Suite à un journal précédent, je me suis mis un peu à Ada. Je ne suis pas programmeur, mais j'aime bien découvrir des langages : pourquoi il a été conçu, pour répondre à quel besoin, qu'est-ce qu'il apporte par rapport à d'autres…

    J'aime beaucoup la syntaxe claire et lisible de Ada (avec un opérateur pipe %>% comme avec le langage R, cela aurait été top) et j'ai voulu reprendre un ancien projet que j'avais commencé en python il y a quelques années (sans jamais le terminer) pour tester. C'est une interface pour commander par MIDI un pédalier d'effets. Et malheureusement, c'est un peu la misère avec Ada :

    • Pour un GUI un peu complet (et esthétique ?), à part du GTK3, il n'y a pas grand chose. Et commencer un nouveau projet avec GTK3 en 2022, comment dire… En plus, il est assez incomplet (pas de GIO par exemple nécessaire pour GSettings). J'ai demandé aux développeurs de GTKAda s'il y avait des projets de binding GTK4, mais rien n'est prévu à ce jour.

    • Pour le MIDI, j'utilisais RTMidi. Évidemment pas de binding Ada.

    Je me dis « pas de problème », il suffit d'utiliser l'option -fdump-ada-spec de gcc (ou g++ pour du C++) pour générer un binding minimal. Mais non, la plupart du temps le binding généré ne compile pas et il faut s'amuser à debugger les ads générés. Peut-être des fois plus simple de les écrire à la main directement lorsque l'on n'utilise qu'une partie réduite de l'API ?

    Bref, j'ai un peu abandonné Ada (et repris mon projet en python), mais c'est dommage car le voyage était sympa.

    Note : après avoir connu un certain regain d'intérêt au début des années 2010, le langage semble avoir beaucoup perdu de dynamique ces 3-4 dernières années. C'est dommage, Ada est tellement plus lisible que Rust. Je ne sais pas vous, mais le livre GUI development with Rust and GTK 4 m'a fait plutôt fuir.

    • [^] # Re: Ma courte expérience en Ada

      Posté par  . Évalué à 6.

      Comme pour tous les projets, le choix du langage est une illusion.
      On a toujours un ensemble de critères à prendre en compte, et souvent ces critères vont, hélas, exclure des solutions comme Ada.
      À l'arrache, comme ça, je donnerais les critères suivants…

      1) connaissance du langage vs volonté d'apprendre des nouvelles choses

      Si un critère financier est présent, peut-on financer l'apprentissage d'un langage pas tous les participants ? Et compliquer de futurs recrutements ?

      2) temps de développement intrinsèque au langage

      Certains langages permettent tout de même de développer plus vite que d'autres. Les langages de script sont tout de même réputés pour la vitesse que l'on peut atteindre en développement, certains langages sont mieux outillés pour des cycles de développement rapides (l'édition en live du code du programme alors qu'il fonctionne peut permettre de faire une coquille vide puis itérer très vite)…

      3) outillage

      A-t-on des outils de développement corrects ? Coloration syntaxique, complétion de code, documentation navigable et claire…

      4) disponibilité des bibliothèques

      A-t-on le temps de réinventer toutes les roues dont on va avoir besoin ? Ou le temps de coder des bindings pour utiliser des bibliothèques d'autres langages de programmation ?

      Sur le dernier projet que j'ai commencé, je voulais utiliser d'autres solutions techniques, d'autres frameworks ou langages. Je me suis finalement rabattu sur Python/Django, pour un critère simple, très personnel et temporaire : j'ai une épaule fraîchement opérée (coiffe des rotateurs), donc il me faut une solution où l'on écrive le code le plus concis possible vu que je n'ai qu'une seule main…

      • [^] # Re: Ma courte expérience en Ada

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

        donc il me faut une solution où l'on écrive le code le plus concis possible vu que je n'ai qu'une seule main…

        Le langage se satisfait en effet de seulement huit instructions.

        Chacune ne faisant qu'un caractère, tu doit pouvoir remapper tout ce qu'il faut juste sur le pavé numérique. Problem solved.

Suivre le flux des commentaires

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