URL: https://linuxfr.org/news/lazarus-n-est-pas-mort-o Title: Lazarus n’est pas mort \o/ Authors: Joris Dedieu Davy Defaud, Amine "nh2" Brikci-Nigassa, baud123, Nÿco, Professeur Méphisto, claudex, olivierweb et maboiteaspam Date: 2012年09月14日T16:04:48+02:00 License: CC By-SA Tags: pascal, lazarus, freepascal, lcl, objective-c, fortran et niklaus_wirth Score: 39 Ce n’est sans doute pas [Niklaus Wirth](http://www.inf.ethz.ch/personal/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](http://www.lazarus.freepascal.org/index.php/topic,18538.html)). Lazarus est un [environnement de développement intégré](http://fr.wikipedia.org/wiki/environnement de développement intégré "Définition Wikipédia") permettant de programmer en [Pascal objet](http://fr.wikipedia.org/wiki/Pascal Objet "Définition Wikipédia") en utilisant le compilateur [Free Pascal](http://fr.wikipedia.org/wiki/Free Pascal "Définition Wikipédia") et une bibliothèque de composants la LCL _(Lazarus Component Library)_. Autrement dit, un clone libre de [Delphi](http://fr.wikipedia.org/wiki/Embarcadero_Delphi "Définition Wikipédia").  **NdM :** _merci à olivierweb, baud123, Amine « nh2 » Brikci‐Nigassa, Professeur Méphisto, maboiteaspam et Nÿco pour avoir contribué à cette dépêche._ ---- [L’annonce officielle](http://www.lazarus.freepascal.org/index.php/topic,18019.html) [Site du projet](http://www.lazarus.freepascal.org/) [Site du compilateur Free Pascal](http://www.freepascal.org/) [Page du projet sur SourceForge](http://sourceforge.net/projects/lazarus/) [Notes de version](http://wiki.lazarus.freepascal.org/Lazarus_1.0_release_notes) ---- # 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](http://www.fh-jena.de/~kleine/history/languages/iso-iec-7185-1990-Pascal.pdf) et [ISO 10206](http://www.fh-jena.de/~kleine/history/languages/iso-iec-10206-1990-ExtendedPascal.pdf). ## 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](http://fr.wikipedia.org/wiki/%C3%89cole_polytechnique_f%C3%A9d%C3%A9rale_de_Zurich "École polytechnique fédérale de Zurich") produit un tout premier compilateur pour les [CDC 6000](http://en.wikipedia.org/wiki/CDC_6000_series). Il y eut d’autres implémentations, mais c’est le compilateur [Pascal-P](http://www.moorecad.com/standardpascal/PascalP.html) (é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](http://fr.wikipedia.org/wiki/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](http://en.wikipedia.org/wiki/UCSD_Pascal) 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](http://en.wikipedia.org/wiki/Apple Pascal "Définition Wikipédia") distribué avec les [Apple II](http://fr.wikipedia.org/wiki/Apple II "Définition Wikipédia") 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](http://fr.wikipedia.org/wiki/Turbo Pascal "Définition Wikipédia"). 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](http://fr.wikipedia.org/wiki/Environnement_de_d%C3%A9veloppement_int%C3%A9gr%C3%A9 "Environnement de développement intégré"). En 1989, la version 5.5 ajoute le support de la Programmation Orientée Objet. À la sortie de sa 8^(e) 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](http://fr.wikipedia.org/wiki/VCL "Définition Wikipédia"). 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](http://fr.wikipedia.org/wiki/Kylix "Définition Wikipédia")) basé sur Qt, il restera axé sur le développement pour Windows. ## Compilateurs libres ## Il existe au moins deux compilateurs Pascal libres. [GNU Pascal](http://www.gnu-pascal.de), é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]( http://freepascal.org/) 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]( http://www.freepascal.org/news.var) 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](http://fr.wikipedia.org/wiki/moteur d\'exécution "Définition Wikipédia") _— runtime —_ et les paquetages sont sous licence LGPL modifiée. # De 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](http://wiki.lazarus.freepascal.org/Delphi_unit_status_list) 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](http://fr.wikipedia.org/wiki/Carbon "Définition Wikipédia"). 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]( http://wiki.lazarus.freepascal.org/Roadmap) 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). ```pascal 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](http://wiki.lazarus.freepascal.org/Custom_Drawn_Interface). 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](http://fr.wikipedia.org/wiki/Cocoa "Définition Wikipédia")). La prise en charge des iPhone est prévue. ```pascal 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]( http://fr.wikipedia.org/wiki/D%C3%A9veloppement_rapide_d%27applications "Définition Wikipédia"), 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](http://fr.wikipedia.org/wiki/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](http://wiki.lazarus.freepascal.org/Custom_Drawn_Interface). La version 1.2 qui est dans les tuyaux apportera également son lot de corrections de [bogues](http://bugs.freepascal.org/roadmap_page.php) et toutes les nouveautés liées aux évolutions du [compilateur](http://wiki.freepascal.org/FPC_New_Features_Trunk). 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](http://www.lazarus.freepascal.org/index.php?action=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.