Lazarus n’est pas mort \o/

39
27
oct.
2012
Technologie

Ce n’est sans doute pas Niklaus Wirth, le père du Pascal, qui se retournera dans sa tombe. Le 28 août, Lazarus est passé en version 1 (puis 1.02).

Lazarus est un environnement de développement intégré permettant de programmer en Pascal objet en utilisant le compilateur Free Pascal et une bibliothèque de composants la LCL (Lazarus Component Library). Autrement dit, un clone libre de Delphi.

Lazarus

NdM : merci à olivierweb, baud123, Amine « nh2 » Brikci‐Nigassa, Professeur Méphisto, maboiteaspam et Nÿco pour avoir contribué à cette dépêche.

Sommaire

Du Pascal

Le Pascal est un langage de programmation impératif, procédural, statiquement typé, créé en 1970 pour enseigner la programmation structurée. Il est normalisé par deux standards : ISO 71851:1990 et ISO 10206.

Pascal-P et UCSD Pascal

Si le Pascal a connu un certain succès, c’est avant tout grâce à la disponibilité de compilateurs, peu onéreux et portables. Tout commença en 1969. Niklaus Wirth, en spécifiant le langage, essaya d’implémenter un compilateur en Fortran. Ce à quoi il renonça vite. Finalement, son équipe à l’EPF de Zurich produit un tout premier compilateur pour les CDC 6000. Il y eut d’autres implémentations, mais c’est le compilateur Pascal-P (également implémenté à Zurich) qui, en 1973, fut le premier vrai grand succès. Indépendant de la plate‐forme, il générait du code portable (le P‐code) exécuté par une machine virtuelle. Ce qui le rendit particulièrement facile à porter (6502, 8080, Z80 et DEC PDP-11, entre autres).

À partir du Pascal-P2, l’UCSD a créé une implémentation très populaire. Elle ajoute les unités (unit) permettant de modulariser le code et un type String. La machine virtuelle, P-System prend de l’ampleur et est considérée comme un véritable système d’exploitation. Nous sommes en 1978. C’est notamment l’origine de l’Apple Pascal distribué avec les Apple II comme alternative au couple DOS‐BASIC. Une partie de Mac OS Classic restera écrite en Pascal jusqu’à la version 7 (1991).

Borland

En 1983, Borland commercialise pour un coût modeste le compilateur Turbo Pascal. Générant du code natif, celui‐ci est bien plus rapide que ses prédécesseurs. Il a rapidement raison de l’UCSD, et même Microsoft avec le Quick Pascal n’arrive pas à rivaliser. Au fil des versions, Borland étoffe ses outils. En 4 années et 4 versions, Turbo Pascal devient un véritable EDI. En 1989, la version 5.5 ajoute le support de la Programmation Orientée Objet. À la sortie de sa 8e version, le produit fut renommé Delphi, c’était en 1995.

Delphi apporte un renouveau du modèle objet, ainsi qu’une bibliothèque de composants réutilisables : la VCL. Il est créé dans l’optique de faire du développement rapide d’applications (RAD — Rapid Application Development). Avec Delphi, le Pascal de Borland perd sa portabilité. Malgré une tentative tardive et ratée d’un portage sous GNU/Linux (Kylix) basé sur Qt, il restera axé sur le développement pour Windows.

Compilateurs libres

Il existe au moins deux compilateurs Pascal libres. GNU Pascal, écrit en C, est un frontal pour GCC datant de 1988. Il offre un bonne prise en charge du standard et du Turbo Pascal 7, ainsi que quelques éléments de Delphi. Le projet semble être au point mort depuis quelque temps.

FreePascal est un projet d’une toute autre ampleur. Il a démarré lorsque Borland a annoncé que Turbo Pascal ne prendrait plus en charge MS-DOS. Florian Paul Klämpfl a alors entamé le développement d’un compilateur alternatif directement écrit en Pascal. Celui‐ci prend aujourd’hui en charge de nombreux systèmes (GNU/Linux, FreeBSD, Haiku, Mac OS X/iOS/Darwin, DOS, Win32, Win64, WinCE, OS/2, MorphOS, Nintendo GBA, Nintendo DS, et Nintendo Wii) et les architectures Intel x86, AMD64/x86-64, PowerPC, PowerPC64, SPARC, ARM et tout récemment MIPS, 68000 et ColdFire. Il sait compiler le code Turbo Pascal 7 et la plupart du code Delphi, ainsi que l’Objective-Pascal (pendant de l’Objective-C). FreePascal est sous licence GPL. Le moteur d’exécution — runtime — et les paquetages sont sous licence LGPL modifiée.

De Lazarus

Lazarus
Lazarus est donc un EDI libre (licence GPL) multi‐plate‐forme, au‐dessus de FreePascal, qui poursuit deux objectifs : être un équivalent de Delphi et permettre d’écrire du code portable — Write Once, Compile AnyWhere. Le projet a débuté en 1999. Il lui a donc fallu 13 ans pour atteindre la version 1.

Fonctionnalités

LCL

L’objectif de la bibliothèque est de fournir des composants portables. Un composant peut être un élément visuel (bouton, étiquette…) ou non (connexion vers une base de données, thread, timer…). Chaque élément de celle‐ci possède une implémentation utilisant différentes bibliothèques graphiques. Cela permet de produire du code natif pour la plate‐forme cible.

Actuellement Lazarus prend en charge GTK (obsolète), GTK2, Qt, win32 (32 et 64 bits), WinCE et Carbon. Il est donc possible de compiler votre projet dans toutes les déclinaisons de systèmes, de bibliothèques graphiques et architectures. Par exemple, Mac OS X / QT / amd64, Windows / Natif / i686, GNU/Linux / GTK / PowerPC. Ceci, bien entendu, si votre projet se limite aux composants pleinement pris en charge par toutes les cibles. Une page résume l’état des différents portages vers les différentes bibliothèques graphiques. Cela reste donc très dépendant de la nature du programme à compiler, mais l’effort de développement va dans ce sens. Il est également possible d’utiliser directement la bibliothèque graphique (le code n’est alors plus portable).

var
  GDIObject: PGDIObject;
  Bitmap: TBitmap;
  AImage: PGtkWidget;
begin
  ...

  GDIObject := PgdiObject(Bitmap.Handle);

  AImage := gtk_image_new_from_pixmap(GDIObject^.GDIPixmapObject,
   GDIObject^.GDIBitmapMaskObject);

  gtk_widget_show(AImage);

  gtk_container_add(GTK_CONTAINER(MyForm.Handle), AImage);
end;

La version 1 voit l’introduction de LCL-CustomDrawn. Cette bibliothèque devrait permettre de dessiner les composants graphiques avec un minimum de primitives natives, et donc d’être plus indépendant de la bibliothèque graphique sous‐jacente (mais forcement moins bien intégrée). C’est la première interface à prendre en charge Android. Elle est également disponible pour X11, Windows et Mac OS X (Cocoa). La prise en charge des iPhone est prévue.

uses lazcanvas, lclintf;

var
  MyLazCanvas: TLazCanvas:
begin
  if nctLazCanvas in LCLIntf.GetAvailableNativeCanvasTypes(MyCanvas.Handle) then
  begin
    MyLazCanvas := TLazCanvas(LCLIntf.GetNativeCanvas(MyCanvas.Handle, nctLazCanvas));
    // do something here with TLazCanvas
  end;

L’autre grande nouveauté est que la LCL est désormais considérée comme une bibliothèque quelconque et, à ce titre, est donc recompilée automatiquement au besoin. Cela facilite grandement le portage d’un projet sur des plates‐formes différentes.
Il y a également eu un grand nombre de corrections de bogues et d’améliorations qui sont détaillées dans les notes de version.

EDI

Dans la lignée de Delphi, il s’agit d’un RAD, autrement dit d’un outil permettant le développement d’applications par glisser‐déposer. L’interface est multi‐fenêtre (à la GIMP) et demandera donc un peu de réglage lorsqu’on utilise un gestionnaire de fenêtres pavant.

Elle connaît de nombreuses améliorations : réorganisation de certains menus, boîtes de dialogue plus cohérentes et généralement moins de questions. L’éditeur bénéficie d’un pliage de code — folding — amélioré, d’un enregistreur de macro et affiche le nom de la classe/procédure en train d’être éditée dans sa barre de titre. Le désassembleur peut désormais mettre en corrélation le code binaire et les sources. Il gère par ailleurs les points d’arrêt. Le débogueur subit bien d’autres améliorations : meilleur affichage des registres, meilleure gestion des threads, plus de journalisation des événements, point d’arrêt dans les données, etc.

Avenir

Clairement le prochain enjeu sera le portage des applications sur les plates‐formes mobiles, avec en particulier la prise en charge d’Android et le développement de LCL-CustomDrawn. La version 1.2 qui est dans les tuyaux apportera également son lot de corrections de bogues et toutes les nouveautés liées aux évolutions du compilateur.

Bref, comme depuis 13 ans, Lazarus avance doucement, mais sûrement, avec ses ressources limitées et ses fans. Sa communauté, qui s’organise autour d’un forum, produit du code et de la documentation à son rythme, suivant les bonnes volontés et les envies de chacun. Lazarus ne gagne pas vraiment de parts de marché, et n’en perd pas non plus. Il n’a pas l’ambition de remplacer Delphi demain, mais reste, par sa place dans l’histoire du Pascal, par sa longévité et son évolution constante, un parfait exemple de projet libre réussi.

Aller plus loin

  • # non, Pascal objet...

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

    En fait, que ce projet soit encore actif n'indique pas que Lazarus n'est pas mort mais que : le pascal objet (Objective-Pascal et Delphi) est encore utilisé ; tout comme ce genre de RAD (on s'en doute bien que les plate-forme Visual-truc en toujours le vent en poupe) !

    Merci pour cette belle dépêche.

    “It is seldom that liberty of any kind is lost all at once.” ― David Hume

  • # Merci

    Posté par  . Évalué à 10.

    Merci pour cette belle dépèche.
    Ancien développeur Delphi, j'ai suivi Lazarus depuis presque le début et je suis ravi de voir le chemin parcouru et le professionnalisme du résultat.
    Je ne suis plus du tout dans l'informatique mais je reste accroché à ce langage qui m'a passionné!
    Longue vie à Lazarus et bravo aux développeurs!

  • # Précision

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

    Ce n'est sans doute pas Niklaus Wirth, le père du Pascal, qui se retournera dans sa tombe

    Pour ça, il faudrait déjà qu'il soit décédé… Or, il est toujours bien vivant.

    • [^] # Loi de Wirth

      Posté par  . Évalué à 10.

      À noter la loi de Wirth : (je cite Wikipédia)

      La loi de Wirth est une loi empirique formulée par Niklaus Wirth en 1995, selon laquelle « les programmes deviennent plus vite plus lents que le matériel ne devient plus rapide » — en d'autres termes : le logiciel ralentit plus vite que le matériel n'accélère.

      Comme quoi Microsoft respecte bien la loi.
      Certains logiciels libres aussi, mais pas tous heureusement !

      « Le fascisme c’est la gangrène, à Santiago comme à Paris. » — Renaud, Hexagone

    • [^] # Re: Précision

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

      Lazarus (Lazare) pas mort, pas de résurrection, Wirth vivant, pas mort, pas retourné dans sa tombe…

      GNU's Not Unix / LINUX Is Not Unix Xernel

      • [^] # Re: Précision

        Posté par  . Évalué à 3.

        Wirth vivant, pas mort, pas retourné dans sa tombe…

        … sauf s'il a fait creuser une tombe de son vivant et qu'il y est retourné vérifier le résultat.

        • [^] # Re: Précision

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

          C'est ça avec les langages turing-complet, on a pas la preuve que ça finisse un jour…

          « Il n’y a pas de choix démocratiques contre les Traités européens » - Jean-Claude Junker

  • # Un peu d'histoire

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

    J'ai beaucoup aimé Pascal sous DOS : Ses règles d'exportation de variables et de fonctions ainsi que son typage fort en faisaient un langage un peu verbeux mais qui permettait d'écrire des programmes très sûrs.

    Quand Windows est arrivé, Microsoft n'a pas révélé toutes les API de son système. Ainsi Borland produisait un environnement de développement qui fonctionnait un peu moins bien que celui de Microsoft. Nous n'avons pas eu le choix, nous avons dû prendre celui qui fonctionnait le mieux. D'autres industriels ont aussi dû en faire autant. C'est ainsi que Microsoft a tué Borland et mis un grand coup de frein aux logiciels qui pourraient entrer en concurrence avec ses produits.

    Je connais l'argument de Microsoft : les API non révélées étaient destinées à un usage interne… Mais Microsoft les utilisait dans des programmes en concurrence avec Borland en particulier. Ceux qui ont fait de l'ingénierie inverse pour Wine en savent quelque chose !

    Je pense que Microsoft a sciemment tout fait pour empêcher Borland et Pascal d'avoir le destin qui aurait été le leur sans distorsion de concurrence. L'informatique a perdu une bonne dizaine d'années.

  • # Envie de me remettre au Pascal

    Posté par  . Évalué à 3.

    Bonjour à tous.

    En effet, merci pour cet article.
    Il m'a donné envie de revenir au Pascal (je l'avais abandonné suite à mon passage sous Linux il y a quelque années).

    Je vais de ce pas (enfin demain je pense, vu l'heure) essayer cet IDE.

    • [^] # Re: Envie de me remettre au Pascal

      Posté par  (site web personnel) . Évalué à 5. Dernière modification le 28 octobre 2012 à 09:56.

      (enfin demain je pense, vu l'heure)

      Justement, vu l'heure, tu voulais peut-être dire aujourd'hui, non ?

      Aujourd'hui peut-être, ou alors demain…

      GNU's Not Unix / LINUX Is Not Unix Xernel

      • [^] # Re: Envie de me remettre au Pascal

        Posté par  . Évalué à 2.

        Ah ouais, tien, j'avais pas fait gaffe. A 1 min près…

        Bref, c'est fait depuis ce matin (dimanche 28 octobre).

        Aucune difficulté d'installation sous Debian.

  • # pour les nostalgiques du Pascal

    Posté par  . Évalué à 10.

    et qui n'ont jamais entendu parler du langage Ada,

    ils seraient bien avisés d'y jeter un oeil !

  • # Excellent outil

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

    Pour un développement client spécifique, je dois réaliser une petite appli faisant une acquisition d'une plateforme externe connectée en USB, et (grrrr) uniquement sous windows (driver oblige).

    J'ai utilisé Lazarus pour aller donner les ordres d'acquisitions et manipuler les résultats. Je n'ai eu besoin de que deux lignes pour déclarer les fonctions à utiliser dans la DLL, et ça a marché tout de suite.

    L'outil est facile à prendre en main, et bien que je n'ai pas codé en Pascal depuis 15 ans, j'ai très très vite obtenu des résultats.

    Excellent outil, vraiment, bravo aux bénévoles de ce projet !

    « Il n’y a pas de choix démocratiques contre les Traités européens » - Jean-Claude Junker

Suivre le flux des commentaires

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