Quelles fonctionnalités ont contribué à l'évolution de Pascal?

17

Je suis en train de compiler un historique détaillé du langage Pascal, et il manque quelques détails.

Il y a tellement de fonctionnalités aujourd'hui que nous tenons pour acquises. Quelles fonctionnalités ont significativement contribué à l'évolution de Pascal, et pourquoi étaient-elles significatives?

Je recherche des fonctionnalités de langage, pas des fonctionnalités de plateforme ou de framework. Comme la surcharge de l'opérateur ou les paramètres par défaut, mais pas la prise en charge Linux ou le nouveau widget Rich Text.

Je sais qu'il existe différentes saveurs de Pascal (Delphi, Free Pascal, Oxygene, Quick Pascal, Apple Pascal, etc.) et ils ont introduit les mêmes fonctionnalités à différents moments et en parallèle. Ça va. Je regarde le langage Pascal dans son ensemble, et quand les jalons importants se sont produits (dates, versions, etc.)

Jim McKeeth
la source
@Jim Votre question demandait une liste de dates, mais ne demandait pas de commentaires sur la raison pour laquelle quelqu'un les considérerait comme importantes. J'ai reformulé votre question pour saisir cet aspect et je l'ai rouverte.
2
Vous savez que le produit Turbo Pascal a révolutionné le monde Pascal? Et le monde des PC IBM aussi, en fait? D'autant plus qu'il fixe des cordes.
4
N'oubliez pas UCSD Pascal! Il a introduit des bytecodes (p-codes), bien avant que Java ne soit un clin d'œil à Sun.
Macneil
1
+1 @Macneil UCSD p-Code et la machine virtuelle Smalltalk sont les choses que j'explique toujours lorsque je parle de code managé moderne (Java, .NET). C'est amusant d'avoir un déjà vu en voyant des tas de trucs «modernes» (comme Apps, ce qui est juste une nouvelle saveur de client-serveur).
Jeroen Wiert Pluimers
1
@Jeroen Pluimers: Je suis également amusé par cette discussion sur le DVCS étant "nouveau". J'ai utilisé SCCS / Teamware chez Sun, Torvalds a utilisé BitKeeper. Quand j'ai vu CVS, je savais qu'il était cassé (tout comme Torvalds). Quand j'ai entendu parler de SVN pour la première fois, je me suis dit "oh, ils l'ont finalement corrigé". Mais non. Le monde OSS (et Joel!) A été tellement endommagé par CVS qui fait tout mal, ils doivent croire que c'est une chose nouvelle!
Macneil

Réponses:

10

Du point de vue historique de la langue, la plus grande contribution de Pascal était probablement la sécurité de type fort. Cette bataille est presque terminée maintenant - l'équipe de Pascal a gagné - et le point de basculement industriel a été Java. Mais pendant très longtemps, C a été favorisé devant Pascal par des gens qui se considéraient comme des codeurs adultes en grande partie à cause de cela: les gens voulaient la liberté de manipuler leurs pointeurs comme s'ils étaient des entiers. Les implémentations pratiques de Pascal avaient cependant des failles, comme les unions qui ne vérifiaient pas dynamiquement le champ discriminant, ou même avaient une transtypage complet des pointeurs au point d'être tout sauf C (Turbo Turbo en faisait partie).

Ceci, et une simplification de la spécification ALGOL 68 compliquée [1], pourrait être un point de départ.

[1] Essayez de lire le rapport ALGOL 68 un jour - c'est certainement un produit des années 60! Un site sur le Web mentionne une partie de son étrange jargon: «jeton de bus», «arbres de production invisibles», «environs primitifs», «unions incestueuses», «notions», «protonotions», «métanotions», «hypernotions», « paranotions », etc.

Barry Kelly
la source
15

Je dirais que les deux moteurs les plus importants de l'histoire de Pascal ont été:

  1. Sécurité des types: Pascal a été déterminant dans la création de la conviction que la sécurité des types est importante et critique dans un langage.
  2. Efficacité du compilateur: Pascal a toujours été conçu comme un langage à un seul passage et a montré au monde à quelle vitesse un compilateur peut être sans perdre de puissance. Les choses qui font un compilateur rapide sont aussi celles qui font aussi un langage bien conçu et facile à lire. Le génie de Borland était de fournir tout cela et la performance aussi.
Nick Hodges
la source
PASCAL n'était-il pas aussi la première langue où le compilateur était écrit en PASCAL lui-même? Une autre chose remarquable à cette époque était le P-code - code pour une machine pascale virtuelle. Tout ce qu'il fallait faire pour implémenter PASCAL sur une autre machine était d'écrire un interprète ou un assembleur pour le P-code.
Ingo
J'ajouterais que la sécurité de type incluait également les mécanismes connus sous le nom de contrôles d'exécution dans la plupart des compilateurs pascal. (Presque?) Chaque compilateur en a, ce qui est fondamentalement différent de l'approche LINT privilégiée par les compilateurs C.
Marco van de Voort
11

Il faut vraiment revenir aux origines - retrouver un peu d'histoire de Niklaus Wirth. Pascal a commencé sa vie comme langue d'enseignement. "Algorithmes + Structures de données = Programmes" est un bon point de départ.

À l'époque, Pascal était beaucoup plus simple que Algol 68 et PL / 1. Il a forcé la structure et la déclaration, et une sécurité de type forte, contrairement à Fortran4 (Fortran 77 a un peu amélioré les choses mais vous pouvez toujours jouer terriblement vite). Et par rapport à COBOL, il était court, simple et plus facile à écrire des programmes. (Bonjour tout le monde en environ 6 lignes au lieu de 600).

À son origine, il y avait des choses comme les tableaux de caractères en Pascal - c'était tout pour la gestion des chaînes. Les choses se sont améliorées au fil des ans.

Si vous voulez vraiment vous plonger dans une histoire Pascal, quelques points que vous devez prendre en compte:

  • L'original de Wirth (Standard Pascal)
  • extensions par Digital Equipment Corp (DEC) sur le Vax
  • l'UCSD p-System (sur de nombreuses machines mais notamment l'Apple-2)
  • Turbo Pascal
  • Apollo Domain Pascal (utilisé pour écrire le système d'exploitation Domain / OS, également appelé Aegis)
  • Turbo Pascal avec objets et unités (version 5.5 et ultérieure. Edit: vient de trouver le TP 5.5 OOP PDF )
  • Delphes

Dans les années 1980, il y avait une énorme fête des limaces entre Pascal et C. Il y avait une grande quantité de développement et d'activité dans les deux camps.

En conséquence, des choses étranges et merveilleuses comme Bliss-32, Algol et PL / 1 ont quasiment disparu - mais leurs idées ont fait leur chemin vers Pascal.

EDIT: les tableaux de caractères pourraient être emballés, ce qui conférait des propriétés spéciales, mais si vous vouliez ce que nous connaissons maintenant comme la gestion des chaînes, vous deviez le développer vous-même.

vite_maintenant
la source
IIRC il y avait une petite quantité de traitement spécial pour packed array[1..n] of char;, par exemple en lecture (ln) et écriture (ln)
Gerry
Oui, readln, writeln étaient un peu spéciaux en ce sens qu'ils pouvaient gérer l'entrée / sortie d'un nombre variable de caractères. Il y avait aussi un peu de poussière à la fin des années 1980 sur le fait qu'ils étaient mauvais et pécheurs et brisaient la construction du langage parce qu'ils acceptaient un nombre variable de paramètres. Les puristes détestaient cela. Le reste d'entre nous l'ont simplement utilisé sans trop s'en soucier.
quick_now
Peut-être des systèmes de modules / unités de "l'autre" langage Wirth Modula2. (Bien que peut-être indirect via les efforts qui en résultent pour l'obtenir dans les standards Pascal, il a finalement fait le standard Pascal étendu, mais avec une syntaxe différente)
Marco van de Voort
5

Extensions orientées objet! Object Pascal a été le plus grand saut de normes (non officiel) avec la sortie de Delphi (1) au milieu des années 90. Il est difficile d'en choisir un seul, mais l'ensemble du noyau du modèle objet dans son ensemble a contribué à amener le langage à un statut moderne. Malheureusement à ce jour, il n'a pas été transformé en un standard officiel unique auquel tous les compilateurs se conformeraient pour la symétrie de codage.

Heureusement, les développeurs du projet Free Pascal ont été assez accommodants avec les fonctionnalités ajoutées à Delphi par Borland et Embarcadero. RemObjects n'est pas tellement mais au moins ils ont des liens avec Embarcadero sous Delphi Prism, donc tout écart par rapport à une norme (pour rendre le langage plus conforme à .NET) serait hautement documenté.

Jason McMillen
la source
8
Les objets ont été introduits dans Pascal avec Turbo Pascal 5.5
mcottle
1
les procédures et les fonctions étaient par défaut statiques. Vous avez dû utiliser le virtualmot - clé pour les remplacer par des sous-classes.
1
Virtual n'est pas un mot réservé dans Delphi. La liste des mots réservés Delphi et des mots clés Prism peut être trouvée ici et ici .
David I
2
Les objets ont été introduits dans Pascal par Apple. en.wikipedia.org/wiki/Object_Pascal#Early_history_at_Apple
Carl Manaster
2
@Carl - J'avais oublié que les Mac classiques étaient programmés en Pascal, et je ne savais pas que c'était une version OO de Pascal co-créée par Wirth.
mcottle
4

Juste une ou deux choses dont je me souviens d'avoir utilisé Pascal il y a longtemps avec MS-DOS:

Turbo Pascal a plus ou moins introduit une sorte d'IDE dans les années 80 (et les performances de compilation ont été considérablement améliorées par rapport à UCSD Pascal

Vers le milieu des années 90, Borland a changé le nom de Turbo en Borland Pascal . Dans un premier temps, les unités introduites, qui ont permis de diviser les grands projets en unités de compilation distinctes.

Plus tard, ils ont également ajouté une programmation orientée objet.

thorsten müller
la source
Turbo Pascal était le produit simple. Borland Pascal avait BEAUCOUP de trucs supplémentaires comme des assembleurs, etc.
2
Unités introduites dans Turbo Pascal (v4 IIRC). Ceux-ci ont été compilés en fichiers .tpu (turbo pascal unit), qui étaient le prédécesseur des fichiers dcu actuels. Je crois qu'ils étaient basés sur des concepts du langage Modula-2 de Wirth.
Gerry
1
ISTR, le système p UCSD avait aussi des unités, mais je ne sais pas si elles étaient antérieures à Turbo Pascal ou non.
TMN
Fait intéressant, la cartouche "PROGRAMMATION DE BASE" pour l'Atari 2600 a fourni en 1980 un écran de programmation qui était étonnamment similaire à un écran CodeView; on pouvait voir le programme (avec le point d'exécution en surbrillance) dans une zone de l'écran, les valeurs des variables dans une seconde, et n'importe quelle sortie des instructions "print" dans une troisième. Malheureusement, la quantité de RAM disponible pour le programmeur était si limitée qu'elle ne se limitait pas aux applications "jouets" - ce n'était même pas vraiment un jouet. Encore une réalisation technique intéressante pour une plateforme avec ...
supercat
... un énorme 128 octets de RAM (dont 24 octets qui étaient nécessaires pour les pointeurs d'écran), et avec l'ensemble du système de développement adapté en 4K de ROM (y compris les formes de caractères). Compte tenu de ces contraintes, permettre aux utilisateurs de 64 octets de RAM pour contenir leur programme, leurs variables et leur sortie était une astuce assez intéressante. Dommage qu'Atari ait publié la programmation de base avant de développer sa puce "SARA" (qui a doublé la RAM de 128 octets à 256). Pouvoir utiliser 128 octets de RAM pour le programme plus 64 pour les variables et la sortie aurait été bien mieux que d'avoir 64 octets pour tout.
supercat
4

L'une des principales étapes évolutives de Pascal était la notion propre de chaînes. ISO 7185 ("Standard Pascal") n'en avait pas, ce qui est assez embarrassant. Cependant, tous les vrais programmeurs en avaient besoin, et des implémentations viables de Pascal (comme Borland / Turbo Pascal) les ont fournies.

MSalters
la source
4

En repensant aux innovations du langage Pascal de Delphi - j'ajouterais le modèle Property, Method, Event (PME) et la section "Published" pour les classes. Cela a rendu le code natif, facile à utiliser et à étendre la construction de composants. Les composants ont rempli la promesse de Brad Cox de circuits intégrés logiciels.

David I
la source
3

Le combat entre de nombreuses saveurs de Pascal dans les années 80 et au début des années 90.

Vous aviez Apple Pascal , Microsoft Pascal et QuickPascal et Turbo Pascal .

Tous ont introduit Object Pascal d'une manière ou d'une autre (QuickPascal 1.0 et Turbo Pascal 5.5 dans le même laps de temps). Apple parce qu'ils en avaient besoin pour leur plate-forme, Microsoft et Borland parce que OO devenait `` cool '' (puis QuickPascal est mort peu de temps après, et Turbo Pascal 6.0 a ajouté un cadre OO raisonnable appelé Turbo Vision ).

Rudy Velthuis est assez complet à ce sujet dans son message sur le forum .

Vous pouvez télécharger une image ISO avec DOS 6.22 et quelques-uns des compilateurs DOS Pascal de cette époque .

Jeroen Wiert Pluimers
la source
2

Je pense que l'introduction des interfaces (dans Delphi 3 IIRC) était très importante pour en faire un langage moderne orienté objet.

François
la source
Notez que l' héritage d'interface n'est pas OO en soi, mais il est considéré comme l'une des formes les plus vraies de polymorphisme. Comme il partageait le même format VMT que COM , il a rendu l'interopérabilité avec COM beaucoup plus facile (les gens ont de larges opinions sur le fait que ce soit une bonne ou une mauvaise chose <g>).
Jeroen Wiert Pluimers
2

J'ajouterai des méthodes et des génériques anonymes au mix.

gabr
la source
1
Aux versions les plus récentes de Delphi, peut-être. J'ai utilisé jusqu'à Delphi 7, donc bien sûr, je n'ai jamais utilisé de méthodes anonymes ou génériques!
Frank Shearar
2

Pour moi, les deux choses les plus importantes (après quelques autres langages comme C ...) étaient l'insensibilité à la casse et la vitesse du compilateur.

Et après c'est le fait qu'il est plus facile d'écrire avec le clavier finlandais, car je n'ai pas besoin constamment du {} ou d'autres touches difficiles à atteindre ...

Je suis à bord depuis Delphi2 mais j'ai utilisé D1 au travail quelques années ...

Tommi Prami
la source
1

Commencez par la "Programmation structurée" de Dahl, Dijkstra et Hoare. La section de Dijkstra est fondamentale, même aujourd'hui. La section de Tony Hoare sur la structuration des données a jeté les bases de PASCAL. (La section de Dahl a parlé de ce qui est finalement devenu une programmation orientée objet. Il a décrit ce qui est devenu des classes dans Simula 67.)

Découvrez ALGOL-W, l'implémentation par Wirth d'une variante d'ALGOL-60.

Vous devez également connaître PL / I et l'éditeur de liens IBM 360 (éditeur de liens) à l'époque. C'était une merveille de généralité, avec le problème mineur qu'elle courait plus lentement que la mélasse en janvier à Juneau, en Alaska. PASCAL a été spécialement conçu pour être compilé et lié en un seul passage, pour la vitesse. (Cela a aidé le démarrage du langage sur un supercalculateur junior CDC 6400, avec beaucoup de mémoire, ce qui rend un compilateur en un seul passage pratique.)

Il y avait en fait deux versions principales de PASCAL de l'ETH Zurich. La langue que tout le monde connaît actuellement sous le nom de PASCAL était en fait PASCAL2, la deuxième version.

John R. Strohm
la source