# Delphi (langage)

Delphi est à la fois un langage de programmation orienté objet et un environnement de développement intégré (EDI) pour ce langage.
Delphi est un EDI propriétaire fonctionnant sous Windows créé en 1995 par Borland. À l'époque, créer des programmes graphiques sous Windows se faisait en grande majorité en utilisant soit la chaîne de compilation Visual C++, soit le RAD Visual Basic. Le premier outil étant excessivement complexe et le second assez peu structuré, Delphi apparut alors comme une alternative viable pour beaucoup de développeurs qui souhaitaient créer des programmes pour Windows.
En 2001, Borland édita une version Linux de Delphi appelée Kylix, qui ne connut pas le succès attendu par l'éditeur.
Depuis 2011, Embarcadero a introduit le framework Firemonkey en complément de la Visual Component Library (VCL) (toujours orientée Windows) qui a permis progressivement de compiler les mêmes programmes sur d'autres plateformes.
Selon ses versions Delphi permet de générer des exécutables natifs pour Windows (x86, x86_64), macOS (x86, x86_64, Apple Silicon), iOS (ARM 32 et 64 bits), Android (ARM 32 et 64 bits) et Linux (x86_64) depuis des programmes écrits en Object Pascal sous Windows.
Les plateformes cibles obsolètes sont retirées progressivement mais les licences permettent d'utiliser des versions précédentes de Delphi selon les besoins et ainsi de cibler des systèmes d'exploitation plus disponibles.
Une extension de l'IDE commercialisée avec un ensemble de composants par TMS Software permet de générer des sites web (HTML, CSS, Javascript) ou applications web intégrées depuis des projets Delphi dédiés. Dans ce cas le transpiler Pas2JS est utilisé en remplacement des compilateurs habituels.

## Le Pascal Objet

Delphi embarque une version orientée objet du langage Pascal : le Pascal Objet, renommé Langage de programmation Delphi au fil des modifications apportées par Borland. Le Pascal Objet de Delphi possède plusieurs avantages : typage fort, contrôle strict du compilateur pour éviter les erreurs de mémoire, de débordement, gestion intégrée des chaînes de caractères et des tableaux dynamiques, etc. La compilation ne se fait qu'en une seule passe et il n'y a pas de séparation entre l'implémentation et l'interface comme en C ou en C++ : la génération d'un projet Delphi est donc très rapide, ce qui a accru à sa sortie la popularité de l'outil vite réputé pour ses temps de compilation record.
Bien que le Pascal Objet introduise une multitude de concepts intéressants et novateurs (de nombreux ont été repris avec C#), il souffre de faiblesses connues. Par exemple, il ne permet pas certaines fonctionnalités de POO telles que l'héritage multiple de classes. Certaines fonctionnalités comme la surcharge d'opérateurs et la généricité n'ont été introduits que tard (respectivement avec Delphi 2005 et Delphi 2009). De plus, sa parenté avec le Pascal rebute de nombreux programmeurs plus habitués à des styles de programmation proches de Java ou C. Enfin, il n'est ni standardisé ni géré par un comité indépendant : propriété d'Embarcadero, l'éditeur est le seul à pouvoir décider de l'avenir et de l'ajout de nouvelles fonctionnalités au langage.

## L'interface de développement

L'environnement de développement s'appuie sur un éditeur d'interface graphique associé à un éditeur de code source. Il doit son succès à sa facilité d'utilisation pour développer des applications graphiques et/ou liées aux bases de données. On l'a souvent comparé à Visual Basic de Microsoft pour cette facilité de développement. On peut même dire que par un amusant mouvement de balancier et de personne, le VB influença Delphi qui à son tour influença par la suite le VB (Anders Hejlsberg lors de son passage chez Microsoft).
L'environnement de développement auto-génère du code pour faciliter le travail du programmeur. Il maintient une correspondance automatique entre la vue de conception (la fenêtre que le programmeur bâtit en déposant des composants graphiques) et l'éditeur de code (la vue affichant le code source qui créera ces composants à l'exécution). Les données spécifiques aux composants sont stockées dans des fichiers d'extension .DFM alors que le code source en Pascal Objet est sauvegardé dans des fichiers d'extension .PAS. Alors que d'autres langages (comme C# avec Winforms) génèrent les instructions nécessaires à la création des composants de l'interface et l'injectent dans une section du code source du programme, Delphi sépare les données statiques de description des objets d'interface, à la manière de XAML, et se base sur des routines de la VCL pour relire et présenter l'interface lors de l'exécution.
L'interface de développement permet l'ajout de composants tiers (graphiques ou non) via un système de composants. La modularité est obtenue à la conception mais peut aussi être exploitée à l'exécution via un système de chargement dynamique de paquets d'exécution, Borland ayant étendu le concept de bibliothèques partagées et le format Windows DLL en introduisant un modèle propriétaire permettant d'enregistrer dynamiquement et d'exporter des classes entre modules. Le même système sera repris par Microsoft sous Visual Basic avec le format VBX, puis à l'échelle du système avec les composants COM et ActiveX.

### Exemple de code engendré

Le code suivant montre ce que Delphi génère lors de la création d'une application vide. La fenêtre à l'écran est représentée par une classe (TForm1) qui sera instanciée à l'exécution et dont l'instance sera assignée à la variable Form1. Les autres composants sont aussi définis sous forme de classes dont le code source est stocké dans les fichiers décrits dans la clause uses de l'unité :
Cependant, c'est à peu près tout ce que Delphi engendre (mis à part le code des éléments placés par le biais de l'EDI). Si un programmeur averti veut engendrer des classes de manière efficace pour mieux concevoir et structurer ses données, Borland propose d'autres outils basés sur UML : ModelMaker de ModelMakerTools qui, lui, permet d'engendrer tout le code d'interface d'une classe ainsi que d'appliquer facilement des design patterns, ou bien Together, produit Borland résultant du rachat de TogetherSoft.
Delphi intègre également de nombreux assistants de création de projets ou de fichiers selon ce qu'on veut faire. Il est possible d'ajouter les siens et de les diffuser librement.

### Autres branches issues ou en rapport avec Delphi

Kylix est un produit très proche de Delphi (même principe, même interface) qui fonctionne sous Linux et qui permet de créer des programmes pour ce système. Le même code source peut être compilé sous Linux et Windows (respectivement avec Kylix et Delphi) grâce à l'utilisation de la bibliothèque objet CLX qui s'appuie sur la bibliothèque graphique Qt en suivant les mêmes principes que la bibliothèque VCL. Aujourd'hui Borland a abandonné le développement de Kylix mais la bibliothèque CLX reste présente au sein des nouvelles versions de Delphi.
Lazarus est un projet libre d'EDI pour Free Pascal. Copiant au widget près et aux fonctions près l'outil Delphi (et s'utilisant comme celui-ci), le logiciel, associé à Free Pascal, permet de concevoir des projets sensiblement compatibles avec Delphi. À l'aide de quelques directives de compilation, un même code orienté traitement (n'utilisant pas directement des fonctions d'interface graphique) peut être compilé sous Delphi, Kylix et Free-Pascal.

## Bibliothèque de composants VCL

Delphi bénéficie d'une bibliothèque de composants visuels et non visuels, la Visual Component Library (VCL), dont le concept est similaire aux MFC de Visual Studio. La VCL permet entre autres de dessiner rapidement une application graphique, en masquant les appels aux complexes API Windows. Depuis Delphi 1, la VCL est améliorée par son éditeur à chaque nouvelle version de Delphi en veillant à une compatibilité quasi totale dans l'interface de la bibliothèque, ce qui permet de migrer des projets en limitant la réécriture du code.
C++Builder exploite la même bibliothèque de composants et comporte un « traducteur » de Pascal Objet vers C++, tout du moins un C++ contenant des extensions propres à Borland compréhensible par le frère C++ de Delphi. Ainsi, tout code Delphi peut être exploité avec C++Builder.

## Bibliothèque de composants FMX

Firemonkey a été introduit dans Delphi en 2011 avec la version XE2. C'est une alternative à la VCL pour faire du développement multiplateforme.
Entièrement graphique il permet de gérer de la 2D, de la 3D, des animations, filtres et effets graphiques sur tous les composants d'une interface graphique. Il intègre également les bibliothèques Box2D et Box3D permettant d'ajouter un moteur physique à tout composant visuel d'une fiche, qu'il s'agisse de champs de saisie ou d'images.
Là où la VCL donne accès à toutes les fonctionnalités présentes sous Windows, Firemonkey (abrégé en FMX) permet d'accéder aux API des plateformes cibles sur lesquelles on compile.
En version 10.2 Tokyo, Delphi (et C++ Builder) peuvent ainsi créer des programmes compilés nativement en mode console ou avec une interface graphique pour Windows, OS X, iOS et Android.
Delphi permet de générer des programmes console ou démons pour Linux, comme des interfaces graphiques avec FMX Linux qui est inclus depuis juin 2019 en version 10.3.1 Rio et suivantes.

## Autres bibliothèques fournies

Delphi, selon son niveau de licence, intègre également des outils, projets et composants clients / serveur, de base de données, simplifiant le dialogue avec des capteurs IoT, permettant de créer des API REST et y accéder, des sites Internet : FireDAC, EMS (RAD Server), Datasnap, Webbroker, technologies bluetooth (BT, BT LE, beacon), composants http natifs de chaque plateforme, App Tethering, IntraWeb, technologie ThingConnect (composants IoT), etc.

## Historique

* 1995 : Delphi 1 est édité par Borland. Cette première version était destinée aux versions 16 bits de Windows (Windows 3, 3.1, etc.).
Dès la deuxième version, la cible était les Windows 32 bits (Windows 95, NT, etc.). Le logiciel ne change pas radicalement entre chaque version, la différence se fait plus sur des ajouts de composants utilisables dans les programmes et la prise en compte de nouvelles technologies.
* À la fin des années 1990, Microsoft débauche une grande partie de l'équipe initiale ayant conçu Delphi, dont Anders Hejlsberg (le créateur de Turbo Pascal). Anders Hejlsberg travaillera d'abord sur la bibliothèque de classes du langage Visual J++, puis sur le projet .NET et sera l'inventeur du C#. Le départ de nombreux membres coïncide avec une baisse générale de la qualité du produit ainsi qu'un manque d'investissement marketing de la part de Borland, menant à un déclin progressif de Delphi. Néanmoins, au début des années 2000, Borland reste un des seuls éditeurs permettant (sur le papier) de développer à partir d'un même ensemble d'outils des applications natives, des applications .NET ainsi que des applications fonctionnant sous Linux grâce à Kylix.
* 2001 : première édition de Kylix, l'environnement Delphi pour Linux.
* 2002 : Kylix 3. Le succès n'étant pas au rendez-vous de ce Delphi pour Linux, ce sera sa dernière version.
* 2006 (février) : Borland annonce son intention de se séparer du développement de ses EDI pour se consacrer à la Gestion du Cycle de Vie des applications.
Ne trouvant pas de repreneur, Borland crée en 2006 CodeGear (en), une entité dédiée aux EDI, à laquelle participe toute l'équipe de développement de Delphi, C++Builder, et JBuilder. Au départ, CodeGear appartient à Borland mais possède ses moyens propres destinés à la création d'outils pour développeurs (“Where developers matter”).
Après deux ans de recherche, la société Embarcadero Technologies (en) rachète CodeGear pour un montant de 23 millions de dollars. Dans un souci d'homogénéité, les bases de données issues d'Embarcadero sont regroupées sous la dénomination DataBaseGear. CodeGear continue à opérer en tant qu'entreprise privée sous la direction de l'actuelle CEO d'Embarcadero. Borland, ou ce qu'il en restait, sera racheté par Micro Focus International en 2009 pour 75 millions de dollars.
* 2008 : pour des questions de moyens, le compilateur Delphi .NET est abandonné au profit de Delphi Prism, une solution proposée par un éditeur tiers, RemObjects.
* 2009 (août) : Delphi 2010 consolide le support d'Unicode dans la VCL, propose le support de Windows 7, intègre de nombreuses corrections de bogues et améliore la productivité dans l'environnement de développement.
Langage : support de la généricité. Cela permet de réduire de façon significative les lignes de codes à saisir par le développeur. Support des méthodes anonymes, permettant, entre autres, de faire du refactoring plus abouti.
De nouveaux composants visuels ont été introduits dont le plus notable est une implémentation de l'interface utilisateur Ribbon utilisée par Microsoft à partir de Microsoft Office 2007 et Windows 7.
* 2010 : Delphi XE La compilation multiplateforme étant repoussé à l'année suivante, les évolutions sont moins nombreuses qu'attendu. On peut noter toutefois l’intégration de l'outil de contrôle de source SVN et du logiciel de Profilage de code AQTime au sein de l'IDE.
* 2011 : Delphi XE2 La compilation multiplateforme est introduite pour Mac OS X et iOS ainsi que pour Windows x64. Une bibliothèque d'interface graphique, FireMonkey, est rajoutée en plus de la VCL qui était trop orientée Windows. Cette version est considérée par beaucoup d'observateurs comme la première version majeure depuis plus de dix ans.
* 2012 : Delphi XE3 ajoute la plateforme Windows 8, Firemonkey 2 et prépare une nouvelle mouture IOS et Android.
* 2013 : Delphi XE4 ajoute des fonctionnalités à Delphi XE3 permettant essentiellement la création d'applications pour IOS native.
* 2013 : Delphi XE5 complète la volonté d'un outil de développement multiplateforme avec la création d'applications sous Android.
* 2014 : Delphi XE6 ajoute des fonctionnalités à Delphi XE5.
* 2014 : Delphi XE7 résout des bugs notamment sur iOS.
* 2015 : Delphi XE8
* 2015 : Delphi 10 Seattle
Embarcadero est racheté en octobre 2015 par Idera, une entreprise spécialisée dans les bases de données.
* 2016 : Delphi 10.1 Berlin
* 2017 : Delphi 10.2 Tokyo ajoute le compilateur pour Linux à Delphi.
* 2018 : en juillet les versions Starter de Delphi et C++Builder sont abandonnées au profit d'une Community Edition aux fonctionnalités équivalentes de la version Professional. Même si elle autorise une utilisation commerciale (avec des restrictions au niveau de la licence), Delphi Community Edition est plus destinée aux hobbyists, étudiants, petites associations et entreprises en création.
* 2018 : Delphi 10.3 Rio sort le 21 novembre et apporte un IDE rajeuni et plus performant, de nombreux changements dans la VCL (images, High DPI, 4K, API Windows) et FMX (notamment sur Android) et des changements sur le langage lui-même avec les variables inline et l'inférence de types permettant désormais de déclarer des variables où on veut dans un source sans se préoccuper de leur type lorsqu'on leur affecte tout de suite une valeur.
* 2019 : Delphi 10.3.2 Rio sort le 18 juillet 2019 et ajoute la compilation macOS 64 bits aux possibilités de travail multiplateforme (les applications 32 bits étant dépréciées depuis la mise à jour du 29 mars 2018 vers macOS High Sierra 10.13.4 et interdite sur macOS Catalina sorti le 3 octobre 2019). On peut donc créer des logiciels pour iOS 32/64, Android 32, macOS 32/64, Windows 32/64 et Linux 64 avec Delphi et ses compilateurs natifs.
* 2019 : Delphi 10.3.3 Rio sort le 21 novembre 2019. Les principaux ajouts de cette version concernent la prise en charge des nouvelles versions de macOS et iOS en 32 et 64 bits et l'ajout du compilateur Android ARM en 64 bits (Android 32 bits n'est plus supporté depuis le 1er août 2019).
* 2020 : Sortie de Delphi 10.4 Sydney le 26 mai 2020. Des modifications ont été apportées à l'IDE et la VCL pour améliorer la prise en charge des écrans High DPI et 4K avec notamment la mise en place de styles HD et du contrôle du style par composants sur la VCL. LSP a été mis en place pour améliorer le fonctionnement des assistants en saisie de code source. Et le langage voit arriver les managed records. Le modèle mémoire utilisé sur FireMonkey a été uniformisé en éliminant ARC sur les objets pour les plateformes mobiles.
* 2020 : Delphi 10.4.1 Sydney sort le 2 septembre 2020. Cette version ne contient pas de nouveauté majeure mais tout un tas d'améliorations, d'optimisations et de corrections. Plus de 500 demandes utilisateurs ont été traitées sur plus de 800 tickets traités par Embarcadero sur cette version.
* 2021: Delphi 10.4.2 Sydney sort le 24 février 2021. Elle apporte des correctifs, stabilise et améliore la nouvelle aide à la saisie de code (help insight et error insight) apparue en 10.4, de nouveaux composants VCL (TControlList, TNumberBox), le support de Android 11, iOS 14 et macOS BigSur (Intel) et plusieurs centaines d'améliorations.
* 2021 : Le 19 juillet Embarcadero annonce la sortie de la nouvelle version Community Edition de Delphi et C++Builder. Avec quelques restrictions au niveau des outils accessibles en ligne de commande, cette version est équivalente en fonctionnalités à la 10.4.2 Sydney. Elle permet de cibler les dernières versions des systèmes d'exploitation iOS, Android, MacOS et Windows.
* 2021: Sortie de Delphi 11 Alexandria le 9 septembre. Cette nouvelle version majeure prend en charge les écrans High DPI et 4K pour l'environnement de développement et les projets VCL pour lesquels le support de Windows 11 (beta) est également opérationnel. Une nouvelle chaîne de compilation permet de générer des applications natives pour macOS ARM 64 bits afin de cibler les Mac Apple Silicon. Les dernières versions d'Android (API 30) et iOS sont également disponibles. Et comme à chaque version un grand nombre de correctifs, modifications et nouveautés ont été intégrés.
* 2022 : Sortie de Delphi 11.1 Alexandria le 15 mars. Comme à chaque fois de nombreux changements sont intervenus dans les librairies, les composants et l'IDE. En améliorations principales pour cette version essentiellement corrective la prise en charge du High DPI dans l'IDE, des mises à niveau des SDK (bases de données et appareils mobiles), des correctifs et améliorations dans l'IDE pour l'aide à la saisie de code.
* 2022 : Nouvelle mise à jour de la branche 11 Alexandria le 9 septembre avec Delphi 11.2 Alexandria qui a redonné accès au simulateur iOS sur Mac ARM, de nouvelles améliorations sur LSP et la saisie de code dans l'IDE, l'arrivée de Markdown et HTML en natif pour l'affichage des fichiers et infobulles dans l'IDE, la mise à jour des librairies et du SDK Android et plein de changements dans la RTL.
* 2023 : Delphi 11.3 Alexandria est sortie le 27 février apportant à son tour plusieurs centaines d'évolutions dont de nouvelles améliorations au niveau de l'audit de code, du serveur LSP, de l'intégration de Subversion, de l'affichage et la prise en compte des écrans High DPI dans l'IDE, le concepteur de fiches et les projets VCL, un accès total au dessin et au contenu de l'éditeur de code à travers de nouvelles entrées dans ToolsAPI, la prise en charge de iOS 16 et Android 13, de nouveaux composants...
* Delphi Community Edition est mise à jour en avril 2023 pour proposer les mêmes fonctionnalités que la version 11.3 Alexandria en édition Professional. Ca inclut notamment les mises à niveau des SDK pour Android et iOS permettant de soumettre les applications mobiles aux magasins d'applications.

## Exemples de projets réalisés en Delphi

Le langage Delphi est beaucoup moins utilisé que son concurrent le plus commun, le C++, mais apparait néanmoins habituellement parmi les classements de popularité de langages informatiques. Par exemple, l'index TIOBE mentionne Delphi parmi les 20 langages les plus souvent sujets de recherches, sans interruption depuis 2001. Delphi est utilisé pour la réalisation de logiciels spécifiques d'entreprise, mais aussi pour des produits informatiques standard tels que :
* Delphi lui-même et les autres outils Borland comme C++Builder ;
* Altium Designer, un logiciel de conception assistée par ordinateur pour systèmes électroniques ;
* InnoSetup, un logiciel de création d'installateurs pour Windows ;
* Dev-C++, un environnement de développement intégré sous Windows ;
* Ad-Aware, un programme qui supprime les logiciels espions ;
* Toad, un outil d'administration et de développement de bases de données par Quest Software ;
* Game Maker (à ses débuts), un logiciel de création de jeux vidéo ;
* Kaspersky Anti-Virus ;
* L'interface sous Windows de Skype, un logiciel de téléphonie par IP ;
* Geoplan, un logiciel de géométrie dynamique éducatif ;
A l'occasion des 26 ans de Delphi (14 Février 2021) puis de ses 28 ans (14 février 2023) Embarcadero a relancé ses cas clients où plusieurs centaines de logiciels et applications mobiles développés avec Delphi sont présentés.