Sortie de gtk-fortran 19.04

Posté par  (site web personnel) . Édité par ZeroHeure, Benoît Sibaud, Davy Defaud, Nils Ratusznik, Ysabeau 🧶 🧦 et palm123. Modéré par ZeroHeure. Licence CC By‑SA.
Étiquettes :
23
26
avr.
2019
Technologie

Lancée début 2011, la bibliothèque gtk-fortran permet de créer des interfaces graphiques GTK dans des programmes en Fortran. Elle est multi‐plate‐forme (GNU/Linux, Windows via MSYS2, BSD et macOS) et le projet est publié sous licence GNU GPL v3. Environ 10 000 fonctions sont accessibles (GTK, GDK, GdkPixbuf, Cairo, Pango, ATK, GLib, GObject, GIO). En plus de l’aspect interface graphique, gtk-fortran permet également :

  • d’accéder aux fonctions de la GLib ;
  • d’accéder aux fonctionnalités de la bibliothèque de tracé scientifique PLplot.

La version 19.04 vient de sortir. Une présentation technique de gtk-fortran et les nouveautés de cette version suivent en deuxième partie. Profitez‐en, avec cette dépêche, c’est l’auteur de la bibliothèque qui régale !

Quelques aspects techniques

Techniquement, gtk-fortran utilise le module ISO_C_BINDING introduit dans la norme Fortran 2003 afin de faciliter et de normaliser l’interfaçage entre les programmes Fortran et C, en assurant au mieux l’interopérabilité des types de données, des pointeurs, des appels de fonctions, etc.

Un programme Python se charge de parcourir les fichiers .h des bibliothèques GTK afin d’essayer d’en extraire la substantifique moelle à l’aide d’expressions régulières et de générer les interfaces Fortran permettant d’accéder aux fonctions C.

Par exemple, pour ce prototype C situé dans /usr/include/gtk-3.0/gtk/gtkwindow.h :

    void gtk_window_set_title (GtkWindow *window, const gchar *title);

On obtient l’interface Fortran suivante :

    subroutine gtk_window_set_title(window, title) bind(c)
      use iso_c_binding, only: c_ptr, c_char
      type(c_ptr), value :: window
      character(kind=c_char), dimension(*) :: title
    end subroutine

La plupart des énumérations sont également traduites. Par exemple :

    typedef enum
    {
      G_DATE_DAY   = 0,
      G_DATE_MONTH = 1,
      G_DATE_YEAR  = 2
    } GDateDMY;

Ce qui devient en Fortran :

    enum, bind(c)    !GDateDMY
      enumerator :: G_DATE_DAY = 0
      enumerator :: G_DATE_MONTH = 1
      enumerator :: G_DATE_YEAR = 2
    end enum

Nouveautés dans gtk-fortran 19.04

La version 19.04 (la numérotation correspond à la version d’Ubuntu utilisée pour générer la bibliothèque) est basée sur GTK 3.24.8, GLib 2.60.0 et GTK 2.24.32. Elle se caractérise également par l’ajout d’outils permettant de repérer les fonctions GTK obsolètes (deprecated), la parallélisation de la compilation (make -j) dans la branche GTK 3, un effort particulier sur la qualité de la documentation, des corrections de bogues dans les exemples…

Futurs développements

Concernant l’avenir, le projet se prépare lentement à l’arrivée de GTK 4. Avec également une réflexion sur l’opportunité de passer de CMake à Meson, outil désormais utilisé par le projet GTK.

Les bonnes volontés sont bien sûr les bienvenues, d’autant plus que nous ne sommes pas légion !

Aller plus loin

  • # gobject introspection

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

    Un programme Python se charge de parcourir les fichiers .h des bibliothèques GTK afin d’essayer d’en extraire la substantifique moelle à l’aide d’expressions régulières et de générer les interfaces Fortran permettant d’accéder aux fonctions C.

    La force de gtk ce n'est pas justement de fournir des outils d'introspection permettant de générer des bindings facilement et sans passer par des expressions régulières peu robustes ?

    • [^] # Re: gobject introspection

      Posté par  (site web personnel) . Évalué à 4. Dernière modification le 26 avril 2019 à 20:03.

      À noter que Perl6 / Raku a ré-inventé les expressions rationnelles et qu'elles peuvent être couplées à la notion de Grammar et là on est tout à fait robuste : https://docs.perl6.org/language/grammar_tutorial.

      Cela dit, dans pleins de cas, les expressions rationnelles classiques du Perl5 (PRCE) sont suffisantes et ont, bien que je suis loin de toutes les comprendre, fait le charme d'une informatique souvent un peu trop impérative et parfois même laborieuse ;-)

      • [^] # Re: gobject introspection

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

        Par robuste, j'entendais le fait que en parsant des fichier .h, si le format des fichiers .h change pour une raison absurde (nouvelle norme de C par example), le parseur sera à revoir.

        Alors que, de ce que j'ai compris, l'introspection de gobject s'occupe de fournir les scanners et le format de sortie normalisé.

        Ma question était plutôt sur l’intérêt de réinventer la roue sachant que la force de GTK (à mon avis) c'est ce coté hyper "bindable" grâce à son architecture d'introspection.

        • [^] # Re: gobject introspection

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

          C'est sûr que que ce serait plus rigoureux et robuste d'utiliser l'introspection. Je m'y étais intéressé dans la première année du projet :
          https://github.com/vmagnin/gtk-fortran/issues/27

          Apparemment, à l'époque dans les choses qui m'avaient bloquées, il y avait un manque de documentation et le fait qu'il n'y avait pas de fichier gir pour la librairie Cairo qui était importante pour le graphisme dans le projet (ou peut-être que je ne l'avait pas trouvé).

          Les choses se sont probablement améliorées depuis :
          https://gi.readthedocs.io/en/latest/

          Sur le long terme, ça pourrait être une option de se ré-intéresser à ce sujet. Pour l'instant le parser est très satisfaisant, mais c'est effectivement chatouilleux. Le problème des expressions régulières n'est pas tant de les écrire pour récupérer quelque chose de précis, mais de gérer les petites variations de conventions de codage d'un fichier à l'autre (on parse 757 fichiers dans GTK 3.24.8).

      • [^] # Re: gobject introspection

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

        Merci pour le lien sur les Grammar. Je jetterai un oeil à ce concept !

        Les expressions régulières/rationnelles sont effectivement une des plus belles choses que j'ai découvertes en informatique depuis une douzaine d'années, avec les mécanismes des shells Unix. Je me suis longtemps contenté des wildcards du DOS…

    • [^] # Re: gobject introspection

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

      Pour moi, une des forces de GTK est aussi d'être une bibliothèque objet à héritage simple. Je ne sais pas si cela aurait été compliqué mais à première vu, je n'ai pas l'impression que le système objet du Fortran (oui Fortran est un langage objet normalisé depuis 2003) soit ici utilisé.

      • [^] # Re: gobject introspection

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

        Effectivement, gtk-fortran n'utilise pas du tout la programmation objet du Fortran moderne. Je ne sais pas ce qu'il serait possible de faire avec GTK et je ne sais pas quel est le niveau de complexité que ça impliquerait.

        • [^] # Re: gobject introspection

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

          Je ne sais pas si cela sera facile à faire mais cela pourrait éviter l'import (use) de 10000 fonctions et d'imposer la restriction sur celles-ci (only).

          Bref, cela serait super "clean" et dans l'esprit… Peut être est-il possible de s'inspirer des bindings comme par exemple celui de Vala (qui est juste une surcouche objet à héritage simple du C) ?

  • # Raspberry Pi

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

    gtk-fortran 19.04 fonctionne également sur Raspberry Pi (testé sur un Raspberry Pi 3) :
    https://github.com/vmagnin/gtk-fortran/issues/127#issuecomment-489329743

Suivre le flux des commentaires

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