Même si le Pascal a eu son heure de gloire avec Turbo Pascal et les premiers Delphi, ce langage est actuellement en perte de vitesse. La plupart des nouveaux programmeurs n'utilisent pas ce langage et les amateurs de Pascal actuels sont surtout des fans de la première heure.
Cependant, cette petite communauté est toujours très active. Ainsi des projets comme Lazarus et Free Pascal continuent d'évoluer à rythme constant. Par ailleurs, les récents changements chez Borland font espérer une renaissance du langage et un retour à l'innovation.
En 1995, pour contrecarrer Microsoft et la programmation visuelle du Visual Basic, Borland sort Delphi qui est, lui, un vrai compilateur qui produit du code machine. Ce langage emprunte clairement certaines caractéristiques du langage C++ en ajoutant, par exemple, le support des classes et, par conséquent, un système de programmation objet bien plus complet. On voit également apparaître la bibliothèque VCL servant d'interface aux bibliothèques Win32 de Windows, facilitant grandement le développement. Enfin, grâce à Delphi, pour la première fois, le Pascal devient un langage évènementiel.
En 2001, Borland produit Kylix, l'équivalent de Delphi pour le monde Linux.
Lazarus, une version open-source légèrement différente, permet de compiler sur n'importe quelle plateforme.
Voici un exemple de fichier Pascal associé à une fenêtre (Form1: TForm1) contenant un label (un texte). Ce fichier est généré automatiquement et sert de structure de base pour programmer. C'est-à-dire qu'on peut le modifier, le compléter etc. Les petits points sont des repères lors de l'édition. Ils sont invisibles à l'exécution. Le source et les fenêtres Delphi sont très semblables.
unit Unit1; {$mode objfpc}{$H+} interface uses Classes, SysUtils, LResources, Forms, Controls, Graphics, Dialogs, StdCtrls; type { TForm1 } TForm1 = class (TForm) Label1: TLabel; { le label "Hello world!" posé sur la fenêtre } private { private declarations } public { public declarations } end; var Form1: TForm1; implementation initialization {$I unit1.lrs} end.
Petite explication : la directive {$I unit1.lrs} permet de lier la classe TForm1, décrivant une fenêtre, au fichier de ressource unit1.lrs qui contient le design de la fenêtre. Avec Lazarus le fichier lrs est un fichier intermédiaire créé automatiquement par le compilateur à partir des informations du fichier lfm et des directives de compilation (notamment la possibilité de choisir la bibliothèque de Widget). Avec Delphi la directive équivalente aurais été {$R unit1.dfm} et il n'y a pas de fichier intermédiaire. Par ailleurs elle aurait été placée dans la partie interface.
Le Turbo Pascal avait été écrit par Anders Hejlsberg (il s'appelait avant TP, Compass Pascal puis Poly Pascal). Très compact (12 K octets) et très rapide car travaillant essentiellement en RAM, il compilait en une passe et produisait du code machine (x86 sous DOS) et non plus du P-Code. Il était livré avec un environnement complet (un éditeur de texte et une aide en ligne (innovation à l'époque) particulièrement compacte grâce à un système de substitution). au fil des différentes versions, Turbo Pascal apporta son lot d'innovations qui ne cesseront de combler en partie certaines lacunes du langage original.
C'est ainsi qu'en 1987 la version 4 apparaît avec un vrai EDI (Environnement de Développement Intégré), en 1989 la version 5.5 introduit les objets, en 1990 la version 6 permet la programmation de fenêtres (dans la console DOS), les prémices de l'événementiel. Et puis 1993, la dernière version, la 7, pour DOS et pour Windows.
program HelloWorld(output); begin writeln ('Hello World'); readln; end.
Le paramètre Output qui suit le nom du programme est aujourd'hui facultatif (il n'était obligatoire qu'avec les premières versions des implémentations Pascal). De nos jours, il est absent la plupart du temps.
Contrairement au C, le Pascal n'est pas sensible à la casse, c'est-à-dire que les mots réservés (comme begin) ou les identificateurs (comme write ou la variable a) peuvent être indifféremment écrits en majuscules ou en minuscules.
Toujours contrairement au C, les déclarations (var dans l'exemple ci-dessus) se font dans une partie clairement séparée du code. Les déclarations locales sont faites en début de procédure ou de fonction, les déclarations globales, elles, étant faites n'importe où avant le programme principal. Ceci ajoute de la clarté au langage au prix d'un certain manque de souplesse. On ne peut pas déclarer de variable au beau milieu d'une fonction. Notons qu'en Pascal, les déclarations doivent précéder toute utilisation ; il est notamment interdit d'utiliser une procédure ou une fonction qui n'a pas encore été déclarée.
Enfin, la distinction entre procédures et fonctions, présente dans le Pascal constitue cette fois un avantage par rapport à la plupart des autres langages (y compris le C) car elle rend impossible certaines erreurs de programmation (par défaut, car une directive de compilation de Delphi permet d'activer une syntaxe "étendue" qui offre le même laxisme d'utilisation que les C-like).