Add new comment

"Test drive" FreePascal / Lazarus

Après avoir développé plusieurs projets depuis Delphi 2 et jusqu'au Delphi 2009, il m'est manquée la portabilité du code (surtout Win32/64) pendant les dernières années. Alors j'ai fait le test rapide afin d'estimer l'environnement FreePascal/Lazarus.

L'application de test a 3 composants : un exécutable console (EXE) et 2 bibliothèques à liaison dynamiques (DLL) implémentés comme "plug-in". L'application fait le traitement assez simple d'un fichier XML unicode (utf-8).

Concernant les applications "classiques desktop" ayant l'IHM riche l'architecture "monolite" et connectées aux bases de données l’environnement FPC/Lazarus semble correcte. Par contre, cette environnement me semble moins convenable pour le autres cas de développement suite aux difficultés gênantes rencontrés. Par exemple :

  • il n'y a pas de débogage des DLLs dans le package "stable". Certaines utilisateurs ont mis à jour le GDB et ont réussi de rentrer dans le code pour les DLL lié explicitement (lorsque l'application démarre). Pour les DLL lié dynamiquement ce n'est pas encore possible.

    Quant à moi, je n'ai pas réussi de déboguer mes DLL qu'avec la dernière version "snapshot" et après avoir mis à jour GDB à la version 7.1 + libexpat-1.dll (voir : repository minGW)
  • dans la dernière version stable 0.9.28 il n'y a pas de gestion de configurations des builds. Cela vient d’introduire en 0.9.29 qui n'est disponible qu'en forme du "snapshot" de développement.
  • il n'y a pas de gestion d'une solution ou d'une groupe des projets. Dans mon cas j'ai besoin d'avoir 3 fenêtres "Package NNN" ouvertes pour intervenir en 3 composants.
  • "aide en ligne" locale est absent...
  • les strings unicode ne sont pas encore implémentés "par défaut", donc cela ramène d'utiliser WideString en mode "ancien" ou UnicodeString introduits récemment dont la gestion de mémoire est basée sur le compteur de références.

Solution "conservative" à contourner les problèmes pour les projets de ce type :

  1. On utilise Delphi comme l'EDI principale
  2. On ajoute dans le code la compilation conditionnelle {$IFDEF FPC}, {$MODE DELPHI} etc.
  3. On utilise les strings unicode en mode "ancien" valable jusqu'à la version Delphi 2007
  4. On fait la construction régulière avec Lazarus pour contrôler la compatibilité

P.S. 2 ans sont passés depuis. La version définitive Lazarus 1.x semble plus solide, on commence l'utiliser en production.