Article de reference

Pascal (langage de programmation)

{{cite web| url=http://java.sun.com/docs/white/delegates.html |title=About Microsoft's \"Delegates\" |archive-url=https://web.archive.org/web/20120627043929/http://java.sun.com/...

langage de programmation impératif et procédural , conçu par Niklaus Wirth comme un langage concis et efficace visant à encourager les bonnes pratiques de programmation grâce à structurée et à la structuration données . Il porte le nom du mathématicien, philosophe et physicien français Blaise Pascal .

Pascal a été développé sur le modèle du langage ALGOL 60. Wirth a participé à l'amélioration du langage dans le cadre du projet ALGOL X et a proposé une version nommée ALGOL W. Cette version n'a pas été retenue, et le projet ALGOL X s'est enlisé. En 1968, Wirth a décidé d'abandonner le projet ALGOL X et de poursuivre le développement d'ALGOL W, qui a été publié sous le nom de Pascal en 1970.

En plus des scalaires et des tableaux d'ALGOL , Pascal permet de définir des types de données complexes et de construire des structures de données dynamiques et récursives telles que des listes , des arbres et des graphes . Pascal assure un typage fort de tous les objets, ce qui signifie qu'un type de données ne peut être converti en un autre ou interprété comme tel sans conversion explicite. Contrairement au C (et à la plupart des autres langages de la famille C ), Pascal autorise les définitions de procédures imbriquées à n'importe quel niveau et permet la plupart des types de définitions et de déclarations à l'intérieur des sous-programmes (procédures et fonctions). Un programme est ainsi syntaxiquement similaire à une procédure ou une fonction. Ceci est comparable à la structure par blocs d'ALGOL 60, mais restreinte aux procédures et aux fonctions, au détriment des blocs d'instructions arbitraires.

Pascal connut un grand succès dans les années 1970, notamment sur le marché naissant des mini-ordinateurs . Des compilateurs étaient également disponibles pour de nombreux micro-ordinateurs dès l'émergence de ce domaine à la fin des années 1970. Il fut largement utilisé comme langage d'enseignement dans les cours de programmation universitaires dans les années 1980, ainsi que dans le développement de logiciels commerciaux durant la même période. Il fut supplanté par le langage C à la fin des années 1980 et au début des années 1990, avec la popularisation des systèmes UNIX et, surtout, la sortie du C++ .

Un dérivé nommé Object Pascal, conçu pour la programmation orientée objet, a été développé en 1985. Il a été utilisé par Apple Computer (pour les ordinateurs Lisa et Macintosh ) et Borland à la fin des années 1980, puis a donné naissance à Delphi sur la plateforme Microsoft Windows . Des extensions des concepts de Pascal ont conduit aux langages Modula-2 et Oberon , tous deux développés par Wirth.

des langages informatiques des années 1960 trouve son origine dans le langage ALGOL 60. Développé dans les années 1950 dans le but précis de décrire clairement les algorithmes , ALGOL intégrait plusieurs fonctionnalités de programmation structurée qui restent courantes dans les langages actuels.

Peu après son introduction, en 1962, Wirth commença à travailler avec Helmut Weber sur sa thèse de doctorat consacrée au langage de programmation Euler . Euler s'inspirait de la syntaxe et de nombreux concepts d'ALGOL, sans toutefois en être un dérivé. Son objectif principal était d'ajouter des listes et des types dynamiques, permettant ainsi son utilisation dans des rôles similaires à ceux de Lisp . Le langage fut publié en 1965.

À ce moment-là, plusieurs problèmes d'ALGOL avaient été identifiés, notamment l'absence d'un système de chaînes de caractères standardisé. Le groupe chargé de la maintenance du langage avait lancé le processus ALGOL X afin d'identifier des améliorations, en sollicitant des contributions. Wirth et Tony Hoare ont proposé un ensemble de modifications modérées visant à ajouter des chaînes de caractères et à simplifier la syntaxe. Ces modifications ont été jugées trop mineures pour être utilisées comme nouvelle norme ALGOL ; Wirth a donc écrit un compilateur pour le langage, qui a été nommé ALGOL W.

Les efforts déployés dans le cadre du projet ALGOL X ont abouti au choix d'un langage beaucoup plus complexe, ALGOL 68. La complexité de ce langage a engendré des difficultés considérables pour la production de compilateurs performants, et son utilisation est restée limitée dans l'industrie. Ceci a ouvert la voie à de nouveaux langages.

Pascal

Pascal a été influencé par les efforts d'ALGOL W, dont les objectifs explicites étaient l'enseignement structuré de la programmation et le développement de logiciels système. Toute une génération d'étudiants a utilisé Pascal comme langage d'introduction dans les cours de premier cycle universitaire. Parmi les autres objectifs figuraient la fourniture d'un outil fiable et efficace pour l'écriture de programmes de grande envergure, et la volonté de combler le fossé entre la programmation scientifique et la programmation commerciale, représentées alors par les langages Fortran et COBOL, très répandus, grâce à un langage généraliste.

L'un des premiers succès du langage fut l'introduction de UCSD Pascal , développé à l'Université de Californie à San Diego (UCSD). Cette version fonctionnait sur un système d'exploitation personnalisé et pouvait être portée sur différentes plateformes. L' Apple II , où il connut une large diffusion sous le nom d' Apple Pascal , constitua une plateforme clé . Pascal devint ainsi le principal langage de haut niveau utilisé pour le développement sur Apple Lisa , puis sur Macintosh . Certaines parties du système d'exploitation original du Macintosh furent traduites manuellement en langage assembleur Motorola 68000 à partir du code source Pascal .

Le système de composition TeX de Donald Knuth a été écrit en WEB , le premier système de programmation littéraire , basé sur le Pascal du PDP-10 de DEC ( Digital Equipment Corporation ) . Des applications commerciales à succès comme Adobe Photoshop ont été écrites en Pascal (Macintosh Programmer's Workshop ) , tandis que des applications comme Total Commander , Skype et Macromedia Captivate ont été écrites en Delphi ( Object Pascal ). Apollo Computer a utilisé le Pascal comme langage de programmation système pour ses systèmes d'exploitation à partir de 1980.

Des variantes de Pascal ont également été utilisées dans de nombreux domaines, allant des projets de recherche aux jeux PC en passant par les systèmes embarqués . Des compilateurs Pascal plus récents existent et sont largement utilisés.

dialectes

Le compilateur de Wirth, conçu pour diffuser le langage Pascal-P, utilisait un sous-ensemble minimal du langage, capable de se compiler lui-même. L'idée était de permettre l'amorçage du compilateur, qui serait ensuite étendu pour devenir un langage Pascal complet. Plusieurs compilateurs ont adopté cette approche, mais UCSD Pascal, basé sur Pascal-P2, constitue une exception notable. Il conservait ce sous-ensemble du langage, partant du principe qu'il fonctionnerait mieux sur les nouveaux microprocesseurs à mémoire limitée. UCSD a également converti l'interpréteur Pascal-P2 en une « machine à octets », là encore pour mieux répondre aux besoins des microprocesseurs orientés octets.

UCSD Pascal a servi de base à de nombreux systèmes, dont Apple Pascal. Borland Pascal, bien que n'étant pas basé sur le code source d'UCSD, est apparu durant la période faste de ce dernier et en reprenait nombre de fonctionnalités. Il a inauguré une lignée qui s'est achevée avec Delphi Pascal et le compilateur open source compatible FPC/ Lazarus .

La norme ISO pour Pascal, ISO 7185, a été publiée en 1983 et a connu une large diffusion sur les ordinateurs centraux, les mini-ordinateurs, les PC IBM et compatibles, de 16 à 32 bits . Les deux dialectes de Pascal les plus utilisés à la fin du XXe siècle et encore aujourd'hui sont la version standard ISO 7185 et les versions Delphi/Turbo Pascal (dont les deux versions Borland sont globalement compatibles entre elles).

La plupart des informations historiques sur les débuts de Pascal proviennent des bulletins d'information du groupe d'utilisateurs de Pascal :

Bulletins d'information du groupe d'utilisateurs Pascal .

Objet Pascal

Durant le développement de la Lisa, Larry Tesler a commencé à correspondre avec Wirth au sujet de l'idée d'ajouter des extensions orientées objet au langage, afin de faire de Pascal un langage de programmation multi-paradigme . Cela a d'abord abouti à Clascal , introduit en 1983. Avec le déclin du programme Lisa et son remplacement par le Macintosh, une nouvelle version a été créée et nommée Object Pascal . Celle-ci a été introduite sur Mac en 1985 au sein du framework d'applications MacApp et est devenue le principal langage de développement d'Apple jusqu'au début des années 1990.

Les extensions Object Pascal ont été ajoutées à Turbo Pascal avec la sortie de la version 5.5 en 1989. Au fil des années, Object Pascal est devenu la base du système Delphi pour Microsoft Windows , toujours utilisé pour le développement d'applications Windows et capable de compiler du code pour d'autres systèmes. Free Pascal est une alternative open source et multiplateforme dotée de son propre environnement de développement intégré (IDE) graphique, nommé Lazarus .

Mises en œuvre

premiers compilateurs

Le premier compilateur Pascal a été conçu à Zurich pour la famille d'ordinateurs centraux CDC 6000. Niklaus Wirth rapporte qu'une première tentative d'implémentation en FORTRAN 66 en 1969 a échoué en raison de l'incapacité de ce langage à exprimer des structures de données complexes. La seconde tentative a été implémentée dans un langage de type C (Scallop, par Max Engeli), puis traduite manuellement (par R. Schild) en Pascal pour l'amorçage . Il était opérationnel au milieu de l'année 1970. Depuis, de nombreux compilateurs Pascal sont auto-hébergés : le compilateur est écrit en Pascal et peut généralement se recompiler automatiquement lors de l'ajout de nouvelles fonctionnalités au langage ou lors de son portage vers un nouvel environnement. Le compilateur GNU Pascal constitue une exception notable, étant écrit en C.

Le premier portage réussi du compilateur Pascal de CDC sur un autre ordinateur central a été réalisé par Welsh et Quinn à l' Université Queen's de Belfast (QUB) en 1972. La cible était la série 1900 d' International Computers Limited (ICL) . Ce compilateur était à l'origine du compilateur Pascal pour le mini-ordinateur Multum d' Information Computer Systems (ICS) . Le portage pour Multum a été développé – dans l'optique d'utiliser Pascal comme langage de programmation système – par Findlay, Cupples, Cavouras et Davis, travaillant au Département d'informatique de l' Université de Glasgow . On pense que Multum Pascal, achevé durant l'été 1973, pourrait avoir été la première implémentation 16 bits .

Un compilateur entièrement nouveau a été mis au point par Welsh et al. à l'Université Queen's de Belfast en 1977. Il offrait une fonction de diagnostic du langage source (intégrant le profilage, le traçage et des vidages post-mortem formatés et typés) implémentée par Findlay et Watt à l'Université de Glasgow. Cette implémentation a été portée en 1980 sur la série ICL 2900 par une équipe des universités de Southampton et de Glasgow. L'implémentation du modèle Pascal standard était également basée sur ce compilateur, après avoir été adaptée, par Welsh et Hay à l'Université de Manchester en 1984, pour vérifier rigoureusement la conformité à la norme BSI 6192/ISO 7185 et générer du code pour une machine abstraite portable.

Le premier compilateur Pascal écrit en Amérique du Nord a été conçu à l' Université de l'Illinois par Donald B. Gillies pour le PDP-11 et générait du code machine natif. Microsoft proposait des compilateurs Pascal pour les PC IBM ; voir Microsoft Pascal .

Le système Pascal-P

Pour diffuser rapidement le langage, un kit de portage de compilateur fut créé à Zurich. Il comprenait un compilateur générant du « p-code » pour machine virtuelle à pile, c'est-à-dire du code se prêtant à une interprétation relativement efficace, ainsi qu'un interpréteur pour ce code : le système Pascal-P . Les compilateurs du système P furent nommés Pascal-P1, Pascal-P2, Pascal-P3 et Pascal-P4. Pascal-P1 fut la première version développée à Zurich, et Pascal-P4 la dernière. L'appellation Pascal-P1 fut créée a posteriori en raison de la multitude de sources existantes pour Pascal-P. Le compilateur fut repensé pour améliorer la portabilité et publié sous le nom de Pascal-P2. Ce code fut ensuite amélioré pour devenir Pascal-P3, avec un code intermédiaire rétrocompatible avec Pascal-P2 et Pascal-P4, ce dernier n'étant pas rétrocompatible.

Le compilateur-interpréteur Pascal-P4 peut encore être exécuté et compilé sur les systèmes compatibles avec le Pascal original (tout comme Pascal-P2). Cependant, il n'accepte qu'un sous-ensemble du langage Pascal.

Pascal-P5, créé en dehors du groupe de Zurich, accepte l'intégralité du langage Pascal et inclut la compatibilité ISO 7185.

Pascal-P6 est une suite de Pascal-P5 qui, parmi d'autres fonctionnalités, vise à être un compilateur pour des processeurs spécifiques, notamment AMD64.

UCSD Pascal est une branche de Pascal-P2, utilisé par Kenneth Bowles pour créer le système interprétatif UCSD p-System. Il figurait parmi les trois systèmes d'exploitation disponibles lors du lancement du premier IBM Personal Computer . UCSD Pascal utilisait un code intermédiaire basé sur des valeurs d'octets et fut ainsi l'un des premiers compilateurs de bytecode . Apple Pascal a été lancé en 1979 pour les systèmes Apple II et Apple III . Il s'agissait d'une implémentation d'UCSD Pascal, ou largement basé sur celui-ci. Pascal-P1 à Pascal-P4, quant à eux, étaient basés sur la longueur de mot de 60 bits du CDC 6600 .

Un compilateur basé sur le compilateur Pascal-P4, qui créait des fichiers objets binaires natifs , a été publié pour l' ordinateur central IBM System/370 par la Commission australienne de l'énergie atomique ; il a été nommé AAEC Pascal 8000 Compiler d' après l'abréviation du nom de la commission.

Object Pascal et Turbo Pascal

Apple Computer a créé son propre compilateur Lisa Pascal pour le Lisa Workshop en 1982, puis l'a porté sur Apple Macintosh et MPW en 1985. En 1985, Larry Tesler , en consultation avec Niklaus Wirth, a défini Object Pascal, et ces extensions ont été intégrées aux compilateurs Lisa Pascal et Mac Pascal.

Dans les années 1980, Anders Hejlsberg a écrit le compilateur Blue Label Pascal pour le Nascom -2. Une réimplémentation de ce compilateur pour l' IBM PC a été commercialisée sous les noms de Compas Pascal et PolyPascal avant d'être acquise par Borland et renommée Turbo Pascal .

Turbo Pascal a connu un succès fulgurant grâce à une politique tarifaire agressive, à l'un des premiers environnements de développement intégrés (IDE) plein écran et à une rapidité d'exécution exceptionnelle (compilation, édition des liens et exécution en quelques secondes seulement). Entièrement écrit et optimisé en langage assembleur , il était plus compact et plus performant que la plupart de ses concurrents.

En 1986, Anders porta Turbo Pascal sur Macintosh et y intégra les extensions Object Pascal d'Apple. Ces extensions furent ensuite réintégrées à la version PC de Turbo Pascal pour la version 5.5. Simultanément, Microsoft implémenta également le compilateur Object Pascal. Turbo Pascal 5.5 eut une grande influence sur la communauté Pascal, qui commença à se concentrer principalement sur l'IBM PC à la fin des années 1980. De nombreux amateurs d'informatique, à la recherche d'une alternative structurée au BASIC, utilisèrent ce produit. Il commença également à être adopté par les développeurs professionnels. À peu près à la même époque, un certain nombre de concepts furent importés du C pour permettre aux programmeurs Pascal d'utiliser directement l' interface de programmation (API) basée sur le C de Microsoft Windows . Ces extensions comprenaient les chaînes de caractères terminées par un caractère nul , l'arithmétique des pointeurs , les pointeurs de fonction , un opérateur d'adresse et les conversions de type non sécurisées .

Turbo Pascal et ses dérivés à structure modulaire sont des langages de programmation modulaires . Cependant, ils ne proposent ni module imbriqué ni importation/exportation qualifiée de symboles spécifiques.

Autres variantes

Super Pascal ajoute des étiquettes non numériques, une instruction de retour et des expressions comme noms de types.

TMT Pascal a été le premier compilateur compatible Borland pour le mode protégé compatible MS-DOS 32 bits , OS/2 et Win32 . Il étend le langage avec la surcharge de fonctions et d'opérateurs .

Les universités du Wisconsin–Madison , de Zurich , de Karlsruhe et de Wuppertal ont développé les compilateurs Pascal-SC et Pascal-XSC ( Extensions pour le calcul scientifique ), destinés à la programmation de calculs numériques. Le développement de Pascal-SC a débuté en 1978 avec la prise en charge du niveau 0 de la norme ISO 7185 Pascal ; la prise en charge du niveau 2 a été ajoutée ultérieurement . Pascal-SC visait initialement le processeur Z80 , mais a ensuite été réécrit pour DOS ( x86 ) et 68000. Pascal-XSC a été porté à différentes reprises sur les systèmes d'exploitation Unix (Linux, SunOS , HP-UX , AIX ) et Microsoft/IBM (DOS avec EMX , OS/2, Windows ). Son fonctionnement repose sur la génération de code source C intermédiaire, qui est ensuite compilé en un exécutable natif. Certaines extensions du langage Pascal-SC ont été adoptées par GNU Pascal .

Pascal Sol a été conçu vers 1983 par une équipe française pour implémenter un système de type Unix nommé Sol. Il s'agissait d'un Pascal standard de niveau 1 (avec des limites de tableaux paramétrées), mais sa définition autorisait des mots-clés alternatifs et des identificateurs prédéfinis en français. Le langage incluait également quelques extensions pour faciliter la programmation système (par exemple, un équivalent de la commande `lseek`). L'équipe Sol a ensuite rejoint le projet ChorusOS pour concevoir un système d'exploitation distribué .

IP Pascal est une implémentation du langage de programmation Pascal utilisant Micropolis DOS, mais a rapidement été portée sur CP/M-80 fonctionnant sur le Z80. Elle a ensuite été adaptée aux machines 80386 en 1994, et existe aujourd'hui sous forme d'implémentations pour Windows XP et Linux. En 2008, le système a été modernisé et le langage résultant a été baptisé « Pascaline » (en référence à la calculatrice de Pascal ). Il inclut des objets, des contrôles d'espace de noms , des tableaux dynamiques et de nombreuses autres extensions, et offre généralement les mêmes fonctionnalités et la même protection de type que C# . C'est la seule implémentation de ce type compatible avec l'implémentation Pascal originale, normalisée par la norme ISO 7185.

constructions du langage

Pascal, dans sa version originale, est un langage purement procédural et comprend l'ensemble traditionnel des structures de contrôle de type ALGOLif , avec des mots réservés tels que `if` then, else`else`, while`else`, for`else` et case`else`, s'appliquant à une instruction unique ou à un bloc d' begininstructions end. Pascal possède également des constructions de structuration de données absentes des types ALGOL 60 d'origine , comme les enregistrements , les variantes, les pointeurs , les énumérations , les ensembles et les pointeurs de procédure. Ces constructions ont été en partie héritées ou inspirées de Simula 67, ALGOL 68 , d' ALGOL W de Niklaus Wirth et des suggestions de CAR Hoare .

Les programmes Pascal commencent par le programmot-clé `__init__` suivi d'une liste de descripteurs de fichiers externes en paramètres (non requis en Turbo Pascal, etc.) ; puis vient le bloc principal encadré par les mots-clés `__init__` beginet ` end__init__`. Les points-virgules séparent les instructions , et le point final termine le programme (ou l'unité ). La casse est ignorée dans le code source Pascal.

Voici un exemple de code source utilisé pour un programme très simple « Hello, World ! » :

en ajouter un ajoute une "instruction nulle" au programme, qui est ignorée par le compilateur.} fin .

Types de données

En Pascal, une déclaration de type permet de définir l'ensemble des valeurs qu'une variable de ce type peut stocker. Elle définit également les opérations autorisées sur les variables de ce type. Les types prédéfinis sont :

Type de donnéesType de valeurs que la variable peut stocker
entiernombres entiers
réelnombres à virgule flottante
booléenLes valeurs Vrai ou Faux
carboniserun caractère unique d'un ensemble de caractères ordonné
ensembleéquivalent à un tableau de valeurs booléennes
tableauun groupe dénombrable de données de l'un des types précédents, d'enregistrements ou d'autres tableaux
enregistrerUn ensemble de données de l'un des types précédents ou d'autres enregistrements
chaîneUne séquence ou « chaîne » de caractères est déclarée comme un « tableau compact de char » avec un index de départ de 1. On peut leur attribuer des constantes de chaîne et accéder à chaque caractère individuellement en tant qu'élément du tableau.

L'intervalle de valeurs autorisé pour les types de base (à l'exception des booléens) est défini par l'implémentation. Des fonctions sont fournies pour certaines conversions de données. Pour la conversion de type ` realint` en `int` integer, les fonctions suivantes sont disponibles : round`float` ( arrondi à la moitié de zéro ) et trunc`float` (arrondi vers zéro).

Le programmeur a la liberté de définir d'autres types de données couramment utilisés (par exemple, byte, string, etc.) en fonction des types prédéfinis en utilisant le système de déclaration de types de Pascal, par exemple.

mot pour stocker les données. Par exemple, le de 8 bits . Pascal ne propose pas d'éléments de langage permettant de définir plus finement les types de stockage de base. Cette fonctionnalité a été intégrée dans plusieurs extensions de Pascal et langages dérivés, tandis que d'autres, comme Modula-2 , ont étendu l'ensemble intégré pour couvrir la plupart des types de données machine, tels que les entiers 16 bits.

Ce mot par élément. Le compactage peut ralentir l'accès sur les machines qui ne permettent pas d'accéder facilement aux parties d'un mot.

Types de sous-gamme

Il est également possible de créer des sous-plages de n'importe quel type de données ordinales (tout type simple sauf réel) :

des vecteurs de bits . Les opérateurs ensemblistes peuvent alors être implémentés efficacement sous forme d'opérations en code machine bit à bit.

Types d'enregistrements

Un enregistrement est une structure comprenant un nombre quelconque d'éléments membres appelés champs . Les champs sont définis par une paire identifiant-type de données séparée par un deux-points ; les enregistrements imbriqués sont possibles. La liste des champs se termine par le endmot-clé `__`. Les champs d'une variable d'enregistrement sont accessibles ultérieurement en insérant un point (` ..`) entre le nom de l'enregistrement et les identifiants des champs. Exemple de type d'enregistrement Pascal :

Comme illustré dans l'exemple ci-dessus, les fichiers Pascal sont des séquences de composants. Chaque fichier possède une variable tampon, notée ` f^ `. Les procédures `get` (pour la lecture) et `put` (pour l'écriture) déplacent la variable tampon vers l'élément suivant. La procédure `read` est définie de telle sorte que `read(f, x)` soit équivalent à `x := f^; get(f);` . La procédure `write` est définie de telle sorte que `write(f, x)` soit équivalent à `f^ := x; put(f);`. Le type les pointeurs :

déclaration anticipée , une exception à la règle selon laquelle les éléments doivent être déclarés avant d'être utilisés.

Pour créer un nouvel enregistrement et affecter la valeur 10 et le caractère A aux champs a et b de cet enregistrement, et pour initialiser le pointeur c au pointeur nul (« NIL » en Pascal), les instructions seraient :

Les listes chaînées , les piles et les files d'attente peuvent être créées en incluant un champ de type pointeur (c) dans l'enregistrement.

Contrairement à de nombreux langages utilisant des pointeurs, Pascal n'autorise les pointeurs qu'à référencer des variables anonymes créées dynamiquement, et leur interdit de référencer des variables statiques ou locales standard. De plus, les pointeurs doivent être associés à un type, et un pointeur vers un type donné est incompatible avec un pointeur vers un autre type (par exemple, un pointeur vers un caractère n'est pas compatible avec un pointeur vers un entier). Ceci contribue à éliminer les problèmes de sécurité liés aux types inhérents à d'autres implémentations de pointeurs, notamment celles utilisées en PL/I ou en C. Cela réduit également certains risques liés aux pointeurs non initialisés , mais la possibilité de libérer dynamiquement l'espace mémoire référencé à l'aide de la fonction `dispose` (qui a le même effet que la fonction ` free` de la bibliothèque C ) signifie que le risque de pointeurs non initialisés n'est pas totalement éliminé , contrairement à des langages tels que Java et C#, qui offrent un ramasse-miettes automatique (mais qui ne résolvent pas le problème connexe des fuites de mémoire ).

Certaines de ces restrictions peuvent être levées dans les dialectes plus récents.

structures de contrôle

Pascal est un langage de programmation structuré , ce qui signifie que le flux de contrôle est structuré en instructions standard , généralement sans commandes « goto ».

la compilation en une seule passe . Toutefois, dans certains dialectes (comme Delphi ), cette exigence stricte a été assouplie.

Le point-virgule comme séparateur d'instructions

Pascal a repris de nombreuses caractéristiques syntaxiques du langage ALGOL , notamment l'utilisation du point-virgule comme séparateur d'instructions. Ceci contraste avec d'autres langages, tels que PL/I et C , qui utilisent le point-virgule comme terminateur d'instruction. Aucun point-virgule n'est nécessaire avant le endmot-clé d'une déclaration de type enregistrement, d'un bloc ou d'une instruction ` case` ; avant le untilmot-clé d'une instruction `repeat` ; et avant le elsemot-clé d'une instruction ` if` .

Dans les premières versions de Pascal, la présence d'un point-virgule supplémentaire était interdite. Cependant, l'ajout d' instructions vides, similaires à celles d'ALGOL , dans le rapport révisé de 1973 , et les modifications ultérieures apportées au langage dans la norme ISO 7185:1983 autorisent désormais l'utilisation de points-virgules optionnels dans la plupart des cas. Un point-virgule n'est toujours pas autorisé immédiatement avant le elsemot-clé `if` dans une instruction `if` , car `if` elsesuit une instruction unique, et non une séquence d'instructions. Dans les instructions `if` imbriquées, l'utilisation d'un point-virgule pour éviter le problème de la clause `else` orpheline (lorsque l'instruction `if` interne ne comporte pas de clause `else`, contrairement à l'instruction `if` externe) ne permet pas de terminer l'instruction `if` imbriquée par un point-virgule ; cela termine en réalité les deux clauses `if`. Il est donc nécessaire d'utiliser un bloc ` begin...` explicite. end

Ressources

Compilateurs et interpréteurs

Plusieurs compilateurs et interpréteurs Pascal sont disponibles pour une utilisation générale :

  • Delphi est le produit phare de développement rapide d'applications (RAD) d'Embarcadero (anciennement Borland/CodeGear) . Il utilise le langage Object Pascal (appelé « Delphi » par Borland), dérivé de Pascal, pour créer des applications pour Windows , macOS , iOS et Android . La prise en charge de .NET , présente de Delphi 8 à Delphi 2005, 2006 et 2007, a été abandonnée et remplacée par un nouveau langage (Prism, rebaptisé Oxygene ; voir ci-dessous) qui n'est pas entièrement rétrocompatible. Ces dernières années, la prise en charge d'Unicode et des génériques a été ajoutée (Delphi 2009, Delphi 2010, Delphi XE).
  • Free Pascal est un compilateur multiplateforme écrit en Object Pascal (et auto-hébergé ). Il vise à fournir un compilateur pratique et puissant, capable de compiler des applications existantes et de servir au développement de nouvelles. Il est distribué sous la licence publique générale GNU (GNU GPL), tandis que les paquets et la bibliothèque d'exécution sont distribués sous une licence publique générale limitée GNU (GNU LGPL) modifiée. Outre les modes de compatibilité pour Turbo Pascal , Delphi et Mac Pascal, il possède ses propres modes de syntaxe procédurale et orientée objet, avec la prise en charge de fonctionnalités étendues telles que la surcharge d'opérateurs . Il est compatible avec de nombreuses plateformes et systèmes d'exploitation. Les versions actuelles proposent également un mode ISO.
  • Turbo51 est un compilateur Pascal gratuit pour la famille de microcontrôleurs Intel 8051 , avec la syntaxe Turbo Pascal 7.
  • Oxygene (anciennement Chrome ) est un compilateur Object Pascal pour les plateformes .NET et Mono . Il a été créé et est commercialisé par RemObjects Software , et a également été distribué pendant un certain temps par Embarcadero comme compilateur back-end de Prism.
  • Kylix , dérivé de Delphi, prenait en charge Linux et disposait d'une bibliothèque objet améliorée. Il n'est plus maintenu. Le compilateur et l'EDI restent disponibles pour un usage non commercial.
  • Le compilateur GNU Pascal (GPC) est le compilateur Pascal de la collection de compilateurs GNU (GCC). Écrit en C, il utilise une bibliothèque d'exécution principalement en Pascal. Distribué sous licence publique générale GNU (GPL) , il fonctionne sur de nombreuses plateformes et systèmes d'exploitation. Il prend en charge les langages normalisés ANSI/ISO et offre une prise en charge partielle du dialecte Turbo Pascal. L'une de ses principales lacunes est l'absence d'un type chaîne de caractères (courte) entièrement compatible avec Turbo Pascal. La prise en charge de Borland Delphi et d'autres variantes de langages est assez limitée. Une certaine prise en charge de Mac Pascal est toutefois assurée.
  • Virtual Pascal a été créé par Vitaly Miryanov en 1995 comme compilateur natif OS/2 compatible avec la syntaxe Borland Pascal. Développé commercialement par fPrint, il a ensuite intégré la prise en charge de Win32, avant de devenir un logiciel libre en 2000. Aujourd'hui, il permet de compiler pour Win32, OS/2 et Linux, et est largement compatible avec Borland Pascal et Delphi. Son développement a été arrêté le 4 avril 2005.
  • Le compilateur Pascal-P4 sert de base à de nombreux compilateurs Pascal implémentés en Pascal. Il implémente un sous-ensemble du langage Pascal complet.
  • Le compilateur Pascal-P5 est une adaptation ISO 7185 (Pascal complet) de Pascal-P4.
  • HTML5 / JavaScript .
  • Turbo Pascal a dominé le marché des compilateurs Pascal pour PC dans les années 1980 et au début des années 1990, grâce à ses puissantes extensions et à ses temps de compilation extrêmement courts. Compact, Turbo Pascal permettait de compiler, d'exécuter et de déboguer directement depuis la mémoire, sans accès au disque. À cette époque , les lecteurs de disquettes, assez lents , étaient courants chez les programmeurs, ce qui accentuait encore l'avantage de vitesse de Turbo Pascal. Aujourd'hui, les anciennes versions de Turbo Pascal (jusqu'à la version 5.5) sont disponibles gratuitement en téléchargement sur le site de Borland.
  • IP Pascal implémente le langage « Pascaline » (nommé d'après la calculatrice de Pascal ), une extension du Pascal compatible avec le Pascal original selon la norme ISO 7185. Il comprend des modules avec gestion des espaces de noms, notamment des modules de traitement parallèle avec sémaphores, des objets, des tableaux dynamiques de dimensions illimitées alloués à l'exécution, des surcharges, des redéfinitions et de nombreuses autres extensions. IP Pascal intègre une bibliothèque de portabilité adaptée au langage Pascal. Par exemple, une application de sortie texte standard du Pascal original des années 1970 peut être recompilée pour fonctionner dans une fenêtre et même enrichie de fonctionnalités graphiques.
  • Pascal-XT a été créé par Siemens pour ses systèmes d'exploitation mainframe BS2000 et SINIX .
  • PocketStudio est un compilateur Pascal et un outil de développement rapide d'applications (RAD) pour Palm OS et les processeurs MC68xxx, doté d'extensions spécifiques facilitant l'interaction avec l' API Palm OS . Il s'apparente à Delphi et Lazarus et propose un concepteur visuel de formulaires, un inspecteur d'objets et un éditeur de code source .
  • MIDletPascal – Un compilateur Pascal et un IDE qui génère du bytecode Java petit et rapide, spécialement conçu pour créer des logiciels pour mobiles.
  • Vector Pascal est un langage pour les jeux d'instructions SIMD tels que MMX et AMD 3D Now , prenant en charge tous les processeurs Intel et AMD, ainsi que le moteur Emotion Engine de la PlayStation 2 de Sony .
  • Morfik Pascal permet le développement d' applications web entièrement écrites en Object Pascal (côté serveur et côté navigateur).
  • WDSibyl – Environnement de développement visuel et compilateur Pascal pour Win32 et OS/2.
  • PP Compiler, un compilateur pour Palm OS qui s'exécute directement sur l'ordinateur de poche.
  • Le compilateur Pascal CDC 6000 est le code source du premier compilateur Pascal (CDC 6000).
  • Amiga .
  • VSI Pascal pour OpenVMS (anciennement HP Pascal pour OpenVMS, Compaq Pascal, DEC Pascal, VAX Pascal et initialement VAX-11 Pascal ) est un compilateur Pascal fonctionnant sur les systèmes OpenVMS . Il était également pris en charge par Tru64 . VSI Pascal pour OpenVMS est compatible avec la norme Pascal ISO/IEC 7185:1990 ainsi qu'avec certaines parties de la norme Pascal étendue ISO/IEC 10206:1990, et inclut également ses propres extensions. L' interface du compilateur est implémentée en BLISS .
  • Stony Brook Pascal+ était un compilateur optimisant 16 bits (puis 32 bits) pour DOS et OS/2, commercialisé comme un remplacement direct de Turbo Pascal, mais produisant un code qui s'exécutait au moins deux fois plus vite.

IDE

Bibliothèques

  • Bibliothèque WOL pour la création d'applications GUI avec le compilateur Free Pascal.

Normes

ISO/IEC 7185:1990 Pascal

En 1983, le langage a été normalisé par la norme internationale CEI/ISO 7185 et plusieurs normes nationales, dont les normes américaines ANSI/IEEE 770X3.97-1983 et ISO 7185:1983. Ces deux dernières normes différaient uniquement par le fait que la norme ISO incluait une extension de « niveau 1 » pour les tableaux conformes (un tableau dont les limites ne sont connues qu'à l'exécution), extension que la norme ANSI n'autorisait pas dans la version originale (version Wirth). En 1989, la norme ISO 7185 a été révisée (ISO 7185:1990) afin de corriger diverses erreurs et ambiguïtés présentes dans le document original.

La norme ISO 7185 visait à clarifier la terminologie de Wirth de 1974, telle que détaillée dans le manuel d'utilisation et le rapport [Jensen et Wirth]. Elle se distinguait également par l'ajout des « paramètres de tableaux conformes » au niveau 1, le niveau 0 correspondant à Pascal sans tableaux conformes. Cet ajout fut réalisé à la demande de CAR Hoare , avec l'approbation de Niklaus Wirth. Hoare souhaitait créer une version Pascal de la bibliothèque d'algorithmes numériques (NAG) , initialement écrite en FORTRAN, et constata qu'il lui était impossible d'y parvenir sans une extension permettant l'utilisation de paramètres de tableaux de taille variable. Des considérations similaires ont motivé l'inclusion, dans la norme ISO 7185, de la possibilité de spécifier les types de paramètres procéduraux et fonctionnels.

Niklaus Wirth lui-même désignait le langage de 1974 comme « la norme », par exemple pour le différencier des fonctionnalités spécifiques à la machine du compilateur CDC 6000. Ce langage était documenté dans le rapport Pascal , la deuxième partie du « manuel et rapport des utilisateurs de Pascal ».

Sur les grandes machines (ordinateurs centraux et mini-ordinateurs) où Pascal a été conçu, les normes étaient généralement respectées. Sur IBM PC , ce n'était pas le cas. Sur IBM PC, les langages Borland Turbo Pascal et Delphi sont les plus utilisés. Il est donc généralement important de déterminer si une implémentation donnée correspond au langage Pascal original ou à un dialecte Borland de celui-ci.

Les versions du langage pour PC IBM ont commencé à différer avec l'arrivée d'UCSD Pascal, une implémentation interprétée qui proposait plusieurs extensions, ainsi que des omissions et des modifications. De nombreuses caractéristiques d'UCSD subsistent aujourd'hui, notamment dans le dialecte de Borland.

ISO/IEC 10206:1990 Pascal étendu

En 1990, une norme Pascal étendue a été créée sous la référence ISO/IEC 10206 , dont le contenu technique est identique à celui de la norme IEEE/ANSI 770X3.160-1989 . En 2019, la prise en charge du Pascal étendu dans le compilateur FreePascal était prévue

La modularité et la compilation séparée sont les caractéristiques principales d'Extended Pascal. Les fichiers source d'une application Extended Pascal peuvent être divisés en un fichier « programme » et plusieurs fichiers « modules ». Chaque module possède ses propres définitions de types, de constantes, de variables et de procédures/fonctions, et les programmeurs peuvent modifier l'ordre de ces définitions. Il existe également des zones de définition spécifiques aux modules, appelées zones d'« initialisation » (avec l'instruction `initialization`) to begin do ...et zones de « finalisation » (avec l'instruction `finalization`) to end do ..., qui permettent de gérer l'état initial et l'allocation mémoire des entités au sein du module. En insérant import ...des instructions `finition` entre les zones de déclaration et de définition des modules/programmes, les modules peuvent partager leurs entités avec d'autres modules (et programmes).

Parmi les autres fonctionnalités majeures, citons la liaison de variables, les collections de types similaires (Schemata), des fonctionnalités complètes de gestion des chaînes de caractères, la prise en charge des types de nombres complexes, otherwiseun mot-clé pour le flux de branchement par défaut dans caseles instructions et l'évaluation booléenne en court-circuit.

Variations

La version zurichoise de Pascal, développée par Niklaus Wirth, a été diffusée hors de l'ETH sous deux formes principales : le code source du compilateur CDC 6000 et un kit de portage appelé système Pascal-P. Le compilateur Pascal-P omettait plusieurs fonctionnalités du langage complet qui n'étaient pas nécessaires à son initialisation. Par exemple, les procédures et fonctions utilisées comme paramètres, les enregistrements de variantes non discriminées, le packaging, la fonction `dispose`, les instructions `goto` interprocédurales et d'autres fonctionnalités du compilateur complet étaient absentes.

Le Pascal de l'UCSD , développé sous la direction du professeur Kenneth Bowles , était basé sur le kit Pascal-P2 et partageait donc plusieurs des restrictions du langage Pascal-P. Ce Pascal a ensuite été adopté par Apple et a connu plusieurs versions ultérieures. Bien qu'il ait enrichi le sous-ensemble Pascal du kit Pascal-P en réintégrant des constructions Pascal standard, il ne constituait pas pour autant une installation standard complète de Pascal.

Au début des années 1990, Alan Burns et Geoff Davies ont développé Pascal-FC, une extension de Pl/0 (tirée de l'ouvrage de Niklaus, * Algorithms + Data Structures = Programs* ). Plusieurs constructions ont été ajoutées pour utiliser Pascal-FC comme outil pédagogique de programmation concurrente (telles que les sémaphores, les moniteurs, les canaux, l'invocation à distance et les ressources). Afin de démontrer la concurrence, le code généré par le compilateur (une sorte de code P ) pouvait être exécuté sur une machine virtuelle. Cette machine virtuelle simulait non seulement un environnement normal (équitable), mais aussi des conditions extrêmes (mode inéquitable).

Compilateurs Pascal de type Borland

Le compilateur Turbo Pascal de Borland , écrit par Anders Hejlsberg , était développé en langage assembleur, indépendamment des compilateurs UCSD et Zürich. Cependant, il reprenait une grande partie des mêmes sous-ensembles et extensions que le compilateur UCSD. Ceci s'explique probablement par le fait que le système UCSD était le système Pascal le plus répandu et le plus adapté au développement d'applications sur les systèmes à microprocesseurs aux ressources limitées de l'époque.

La version 3 de Turbo Pascal, vendue sous blister, et ses incarnations ultérieures, y compris Object Pascal et Delphi de Borland et les quasi-compatibles non-Borland, sont devenues populaires auprès des programmeurs, y compris les auteurs de shareware. De ce fait, la bibliothèque SWAG de code Pascal contient une grande quantité de code écrit en pensant à des versions telles que Delphi.

Produits logiciels ( compilateurs et IDE/ développement rapide d'applications (RAD)) dans cette catégorie :

Liste des normes connexes

  • ISO 8651-2:1988 Systèmes de traitement de l'information – Infographie – Liaisons de langage du système à noyau graphique (GKS) – Partie 2 : Pascal

Réception

Pascal a suscité des réactions très diverses au sein de la communauté informatique, à la fois critiques et élogieuses.

premières critiques

La définition initiale du langage par Wirth a été largement critiquée. Nico Habermann , notamment, a souligné dans ses « Commentaires critiques sur le langage de programmation Pascal » (1973) que nombre de ses constructions étaient mal définies, en particulier les types de données , les intervalles , les structures et l'instruction `goto` . Plus tard, Brian Kernighan , qui a popularisé le langage C , a exposé ses critiques à l'égard de Pascal en 1981 dans son article « Why Pascal is Not My Favorite Programming Language ». Le problème le plus grave, selon Kernighan, était que la taille des tableaux et la longueur des chaînes de caractères faisaient partie intégrante du type, ce qui empêchait d'écrire une fonction acceptant des tableaux de longueur variable, voire des chaînes de caractères, comme paramètres. Il devenait ainsi impossible de développer, par exemple, une bibliothèque de tri. Kernighan a également critiqué l'ordre d'évaluation imprévisible des expressions booléennes, le manque de bibliothèques dédiées et l'absence de variables statiques , et a soulevé plusieurs autres problèmes mineurs. Il a également affirmé que le langage ne proposait aucune construction simple pour contourner (ignorer sciemment et de force) les restrictions et limitations. Des critiques plus générales, provenant d'autres sources ont souligné que la portée des déclarations n'était pas clairement définie dans la définition originale du langage, ce qui pouvait avoir de graves conséquences lors de l'utilisation de déclarations anticipées pour définir des types de pointeurs, ou lorsque des déclarations d'enregistrements entraînaient une récursion mutuelle , ou encore lorsqu'un identificateur pouvait être utilisé ou non dans une liste d'énumération. Une autre difficulté résidait dans le fait que, comme ALGOL 60 , le langage n'autorisait pas les procédures ou fonctions passées en paramètres à prédéfinir le type attendu de leurs paramètres.

Popularité croissante dans les années 1970 et 1980

Au cours des deux décennies qui ont suivi 1975, Pascal a gagné en popularité et est devenu un langage de programmation majeur pour d'importantes plateformes (notamment Apple II, Apple III, Apple Lisa, les systèmes Commodore, les machines basées sur le Z-80 et IBM PC) grâce à la disponibilité de UCSD Pascal et de Turbo Pascal.

Malgré les critiques initiales, Pascal a continué d'évoluer, et la plupart des points soulevés par Kernighan ne s'appliquent pas aux versions du langage améliorées pour le développement de produits commerciaux, telles que Turbo Pascal de Borland . Comme Kernighan l'avait prédit dans son article, la plupart des extensions destinées à corriger ces problèmes étaient incompatibles d'un compilateur à l'autre. Depuis le début des années 1990, cependant, la plupart des variantes semblent se regrouper en deux catégories : ISO et de type Borland. Le Pascal étendu répond à bon nombre de ces critiques initiales. Il prend en charge les chaînes de caractères de longueur variable, l'initialisation des variables, la compilation séparée, les opérateurs booléens à court-circuit et otherwiseles clauses `default()` pour les instructions `case`.

Certains problèmes découlant des différences dans les implémentations de Pascal ont été en partie résolus par l'avènement de Free Pascal, qui prend en charge plusieurs dialectes avec des directives de mode.

Plus d articles de Worldlex Wiki

Revenez a l index pour explorer davantage de pages sur l histoire, la science, la culture, la geographie et la societe en francais.

Explorer l index