Pascal (langage) - Définition

Source: Wikipédia sous licence CC-BY-SA 3.0.
La liste des auteurs de cet article est disponible ici.

Aspects techniques

Récursivité

On peut écrire des fonctions récursives en Pascal. Par exemple cette fonction illustre bien cette possibilité :

      function factorielle(n: shortint): integer;      begin          if n <= 1 then result := 1 else           result := n*factorielle(n-1);      end;      

Remarque : le nombre d'appels récursifs est limité (de même que pour de nombreux langages) par la pile d'appel.

Généricité

Il est possible de définir des types génériques, c'est-à-dire pouvant être utilisés avec différent types possibles sans pour autant avoir à réécrire le code entier. Voilà un exemple en FreePascal :

      type         { On définit un objet qui permet d'additionner deux éléments et multiplier un élément par un entier strictement positif }               { TAnneauGenerique }        generic TAnneauGenerique = class          function Somme(a, b: T): T;          function Multiple(n: integer; a: T): T;        end;               { On crée deux versions spécialisées, s'appliquant aux nombre réels et aux chaines de caractères }        TAnneauReel = specialize TAnneauGenerique;        TAnneauChaine = specialize TAnneauGenerique;             { TAnneauGenerique }             function TAnneauGenerique.Somme(a, b: T): T;      begin        result := a + b;      end;             function TAnneauGenerique.Multiple(n: integer; a: T): T;      var i: integer;      begin           { On ne gère que le cas où n >= 1 }           result := a;           for i := 2 to n do result := result + a;      end;                   var        r: TAnneauReel;        c: TAnneauChaine;                  begin        r := TAnneauReel.Create;        writeln('Avec des réels:');        writeln('4.1 + 5.2 = ', FloatToStr( r.Somme(4.1, 5.2) ));        writeln('3 x 5.1 = ', FloatToStr( r.Multiple(3, 5.1) ));         r.free;               writeln;               c := TAnneauChaine.Create;        writeln('Avec des chaines:');        writeln('bon + jour = ', c.Somme('bon', 'jour'));        writeln('10 x a = ', c.Multiple(10, 'a'));        c.free;               readln;       end;      

Note : en Delphi, il ne faut pas ajouter les mots-clés generic et specialize.

Dépendances mutuelles des unités

Il est possible que les différentes unités du programmes s'utilisent mutuellement, mais il y a une limitation. En effet, en Pascal, on peut faire référence à une autre unité à deux endroits possibles, à savoir dans l'interface et à l'implémentation. Si deux unités font référence l'une à l'autre dans leur interface, on obtient une erreur de dépendance circulaire. On peut contourner ce problème en utilisant une troisième unité qui servira de base aux deux autres, et/ou en utilisant des types plus abstraits au niveau des interfaces. Cette limitation n'existe pas en Visual Basic.

Compilateurs

Liste des compilateurs les plus répandus

  • Free Pascal (compatible avec le Pascal Objet de Borland) est un bon exemple de compilateur. Un environnement de développement visuel, accompagné de bibliothèques LGPL, permet au Free Pascal d'émuler Delphi (voir Lazarus). Free Pascal existe sur un grand nombre de plateformes facilitant le portage d'un programme d'un environnement à un autre.
  • GNU Pascal, dont la particularité est d'être écrit en C, c'est donc un compilateur qui ne se compile pas lui-même ce qui est devenu assez rare aujourd'hui.
  • Borland France autorise maintenant le téléchargement gratuit de Turbo Pascal 7.0 : Télécharger Borland Turbo Pascal 7.0 (DOS)
  • Il est d'ailleurs possible de télécharger une version de Delphi et de Kylix, qui est utilisable gratuitement sous réserve de ne produire que des logiciels open-source; pour produire des logiciels payants, il faut s'acquitter d'une licence. Télécharger l'édition personnelle gratuite de Borland : Delphi 6, Delphi 2005 (Windows)

Compatibilité

Delphi ne fonctionne que sur Windows. Kylix, son équivalent officiel, tourne sous Linux et Unix. Malheureusement si Delphi continue à évoluer, le développement de Kylix a été stoppé. Par conséquent les versions supérieures à 7 de Delphi sont moins compatibles avec Kylix. Par ailleurs, la compatibilité Delphi/Kylix n'est possible qu'avec les applications utilisant la bibliothèque CLX. Les applications utilisant la VCL ne sont pas utilisables avec Kylix.

En ce qui concerne Free Pascal et Delphi/Kylix, de grands progrès ont été réalisés au niveau de la compatibilité des compilateurs. Aujourd'hui c'est près de 99% de code compatible. Toutefois, un certain nombre de remarques sont à faire :

  • L'EDI de Free Pascal, Lazarus utilise un format différent pour les descriptions de fenêtres et boites de dialogue, il faut donc recréer une grande partie de l'interface. Toutefois l'équipe de développement actuelle travaille sur un convertisseur automatique.
  • Les composants Delphi/Kylix n'utilisent pas la même technologie que les composants Lazarus. Ils sont donc soumis à une moins bonne compatibilité que les applications en elles-mêmes, même si là encore de grands progrès ont été réalisés, notamment sur les fonctionnalités qui ne sont pas directement associées aux bibliothèques Win32.
  • Un certain nombre de composants Delphi/Kylix sont absents de Lazarus/Free Pascal, les bibliothèques Lazarus/Free Pascal ne sont pas encore achevées.
  • 1% de code non compatible peut demander beaucoup de travail sur de grosses applications...

Le projet GNU Pascal est assez peu populaire chez les amateurs de Pascal (il lui est souvent reproché par les puristes d'être écrit en C et non en Pascal comme les autres). Bénéficiant de moins de contributeurs eux-mêmes moins concernés (ils font du C), le projet ne peut se vanter des mêmes avancées que Free Pascal. Il est relativement compatible avec les anciens programmes Turbo Pascal mais n'est fourni qu'avec les bibliothèques de base, et donc limité en mode graphique. Les amateurs de fenêtres sous Lazarus ou Delphi/Kylix auront beaucoup de travail pour porter leurs programmes sous GNU Pascal.

Pour résumer si vous faites un programme compatible avec Turbo Pascal (en mode texte plus particulièrement), vous pourrez le compiler sans trop de difficultés avec le compilateur de votre choix. L'apparition des modes graphique et des fenêtres a complexifié les bibliothèques rendant la compatibilité plus difficile, mais pas impossible. Quoi qu'il en soit, plus vous utiliserez des technologies logicielles récentes, plus la compatibilité entre compilateurs (et les possibilités de portage) sera compromise.

Portage

Le portage d'application d'un système à un autre est une tâche assez difficile en Pascal. C'est la principale raison du manque de popularité de ce langage, malgré un grand nombre de qualités.

L'utilisation d'un compilateur disponible sur plusieurs plateformes facilite cette tâche. L'utilisation de fonctions spécifiques à un système est à éviter mais si c'est indispensable on peut s'inspirer du code suivant :

      procedure Special(Param1, Param2: TypeParam);      begin          {$IFDEF Linux}            {Code sprécifique à linux}          {$ELSEIF} {$IFDEF Win32}            {Code spécifique à Windows 32 bits}          {$ELSEIF}            Plateforme non supportée (texte clair non-commenté générant une erreur)          {$ENDIF}          {Code commun}      end;      

Le couple Delphi/Kylix constitue une bonne solution simple de portage Windows/Linux mais elle reste limitée à ces deux seuls systèmes, et impose l'utilisation des bibliothèques CLX. Le portage d'applications VCL vers des applications CLX est simple mais fastidieux car cela nécessite de redessiner complètement l'interface. Enfin Kylix n'étant plus développé, son usage est aujourd'hui déconseillé.

Lazarus est aujourd'hui la meilleure solution pour le développement multi-plateforme. Son compilateur, le Free Pascal compiler, est capable de générer des exécutables pour quasiment toutes les plateformes actuelles (c'est un compilateur croisé), Lazarus s'exécutant lui-même sur toutes ces plateformes. Hors utilisation de fonctions spécifiques à un système (appels directs aux bibliothèques Win32 par exemple, ou utilisation de l'assembleur), il compilera le code sans aucun problème quel que soit le système hôte et le système destinataire. Un inconvénient tout de même, Lazarus utilise, par défaut, la bibliothèque GTK en version 1.x (assez ancienne donc) en ce qui concerne les interfaces graphiques sous Linux, ce qui impose d'installer cette bibliothèque au préalable, alors qu'elle est considérée comme obsolète. Cela dit, des versions basés sur Qt 4 seront bientôt disponibles, le support de Qt 4 ayant considérablement avancé. Il est, par ailleurs, tout à fait possible de recompiler Lazarus pour qu'il utilise GTK 2 au lieu de GTK 1. La version Windows utilise directement les bibliothèques Win32 pour son affichage mais on peut aussi recompiler Lazarus pour qu'il utilise GTK 1 ou 2, ou Qt.

Page générée en 0.275 seconde(s) - site hébergé chez Contabo
Ce site fait l'objet d'une déclaration à la CNIL sous le numéro de dossier 1037632
A propos - Informations légales
Version anglaise | Version allemande | Version espagnole | Version portugaise