Niklaus Wirth est né le 15 février 1934 à Winterthour, en Suisse. Il a obtenu un diplôme d’ingénieur en électronique de l’École polytechnique fédérale de Zurich (EPFZ) en 1959, une maîtrise en sciences de l’université Laval au Québec en 1960, et un doctorat en génie électrique et informatique de l’université de Californie à Berkeley en 1963. Il a été professeur assistant d’informatique à l’université Stanford de 1963 à 1967, puis à l’université de Zurich. Il est ensuite devenu professeur d’informatique à l’EPFZ, où il a pris sa retraite en 1999.
Niklaus Wirth a été impliqué dans le développement de normes internationales en informatique, en tant que membre du groupe de travail IFIP 2.1 dont la tâche était d'améliorer le langage ALGOL-60. Ce qui aboutit à l'Algol 68. La proposition de Wirth était moins ambitieuse : il s'agissait seulement d'une dérivation de l'ALGOL-60 (qui fut réalisée ensuite sous le nom d'ALGOL-W).
Déçu par le langage ALGOL X, devenu ALGOL 68, il a décidé de travailler seul à Zurich sur son propre langage, basé sur ses travaux antérieurs sur l’ALGOL W. Il a ainsi créé le Pascal en 1970, un langage de programmation impératif et structuré, destiné à encourager les bonnes pratiques de programmation et à développer des programmes fiables et efficaces. Le Pascal a été nommé en l’honneur du mathématicien, philosophe et physicien français Blaise Pascal.
Le Pascal a connu un grand succès dans les années 1970, notamment sur le marché émergent des mini-ordinateurs. Des compilateurs ont également été disponibles pour de nombreux micro-ordinateurs à la fin des années 1970. Il a été largement utilisé comme langage d’enseignement dans les cours de programmation universitaires dans les années 1980, et également utilisé dans des environnements de production pour écrire des logiciels commerciaux pendant la même période. Il a été supplanté par le langage C à la fin des années 1980 et au début des années 1990, avec l’essor des systèmes UNIX et surtout avec la sortie du C++.
Niklaus Wirth a été le concepteur principal des langages de programmation Euler (1965), PL360 (1966), ALGOL W (1966), Pascal (1970), Modula (1975), Modula-2 (1978), Oberon (1987) et Oberon-2 (1991). Il a également fait partie de l’équipe de conception et de mise en œuvre des systèmes d’exploitation Medos-2 (1983, pour la station de travail Lilith) et Oberon (1987, pour la station de travail Ceres), et du système de conception et de simulation de matériel numérique Lola (1995).
En 1995, il énonce pour la première fois ce qui sera connu sous le nom de loi de Wirth : « les programmes ralentissent plus vite que le matériel n'accélère ». Niklaus Wirth attribuait quant à lui cette loi à Martin Reiser.
Les différents langages dont Wirth a été le concepteur principal
Euler
Euler est un langage de programmation créé par Niklaus Wirth et Helmut Weber, conçu comme une extension et une généralisation d'ALGOL 60. Les objectifs des concepteurs étaient de créer un langage qui soit*:
- Plus simple, mais plus flexible, que l'ALGOL 60
- Utile et traité avec une efficacité raisonnable
- Définissable avec une formalité rigoureuse
Euler utilise un concept général de type de données. Dans Euler, les tableaux, procédures et commutateurs ne sont pas des quantités déclarées et nommées par des identifiants : contrairement à ALGOL, ce ne sont pas des quantités au même niveau que les variables. Ces quantités se situent plutôt au niveau des constantes numériques et booléennes. Ainsi, outre les constantes numériques et logiques traditionnelles, Euler introduit plusieurs types supplémentaires*:
Les sources disponibles indiquent qu'Euler était opérationnel en 1965.
PL360
PL360 (ou PL/360) est un langage de programmation système conçu par Niklaus Wirth et écrit par Wirth, Joseph W. Wells Jr. et Edwin Satterthwaite Jr. pour l'ordinateur IBM System/360 de l'Université de Stanford. Une description du PL360 a été publiée au début de 1968, bien que la mise en œuvre ait probablement été achevée avant que Wirth ne quitte Stanford en 1967. Il est apparu pour la première fois en 1966.
PL/360 est un compilateur en une seule passe avec une syntaxe similaire à ALGOL qui fournit des fonctionnalités pour spécifier des instructions exactes de code machine (langage) et des registres similaires au langage assembleur, mais fournit également des fonctionnalités couramment trouvées dans les langages de programmation de haut niveau, telles que les expressions arithmétiques complexes et structures de contrôle. Wirth a utilisé PL360 pour créer ALGOL W.
Exemple : R0, R1, R2 et FLAG sont des noms prédéclarés
Code PL360 : | Sélectionner tout |
1 2 3 4 5 6 7 8 9 10 | BEGIN INTEGER BUCKET; IF FLAG THEN BEGIN BUCKET := R0; R0 := R1; R1 := R2; R2 := BUCKET; END ELSE BEGIN BUCKET := R2; R2 := R1; R1 := R0; R0 := BUCKET; END RESET(FLAG); END |
Algol W
Algol W est une version du langage Algol due à Niklaus Wirth, proposée au comité Algol 68 pour succéder à Algol 60. Bien qu'antérieure au Pascal, elle était plus puissante à certains points de vue. En particulier toute expression ou tout bloc ramenait un résultat, ce qui permettait l'écriture d'expressions particulièrement élégantes.
Algol-W est visiblement une étape transitoire entre Algol 60 et Pascal. Il représente une modification relativement légère d'Algol 60, auquel N. Wirth a ajouté les types de données « string », « bitstring », les nombres complexes et les références à des enregistrements (structures), ainsi que le passage de paramètres par valeur, sans changer grand-chose d'autre.
Comme tous les autres langages de Wirth (Pascal, Modula-2, Oberon, etc.), Algol-W est un petit langage à typage statique qui diffère beaucoup moins d'Algol 60 que d'Algol 68, langage nettement plus « gros » et plus complexe.
C'est avec ALGOL W qu'en 1970 Brent programma, sur un IBM 360/67, l'algorithme de multiplication rapide de Strassen, démontrant son efficacité pour le produit de deux matrices carrées de plus de 110 lignes.
Pascal
Pascal se veut didactique, simple, clair, efficace. Au plan didactique, il s'agit de privilégier l'analyse. Pour la clarté, il se rallie à la programmation structurée. Pour l'efficacité (dont Algol 60 put manquer), il privilégie les mécanismes statiques, et ce qui permet la compilation en une passe (la déclaration précède toujours l'emploi).
Modula
Le langage de programmation Modula est un descendant du langage Pascal. Il a été développé en Suisse, à l'ETH Zurich, au milieu des années 1970 par Niklaus Wirth, le même qui a conçu Pascal. La principale innovation de Modula par rapport à Pascal est un système de modules, utilisé pour regrouper des ensembles de déclarations associées en unités de programme*; d'où le nom Modula. Le langage est défini dans un rapport de Wirth intitulé Modula : un langage de multiprogrammation modulaire publié en 1976.
Modula a été implémenté pour la première fois par Wirth sur un PDP-11. Très vite, d'autres implémentations ont suivi, notamment les compilateurs développés pour Modula de l'Université de York et celui des laboratoires Philips nommé PL Modula, qui générait du code pour le microprocesseur LSI-11.
Le développement de Modula a été interrompu peu de temps après sa publication. Wirth a ensuite concentré ses efforts sur le successeur de Modula, Modula-2.
Modula-2
Modula-2 est un langage de programmation compilé, procédural, fortement typé, modulaire, facile à lire et à apprendre. Il est conçu pour enseigner la programmation et faciliter le développement des projets de grande ampleur.
Par rapport à Pascal, il ajoute :
- l'encapsulation en modules — d'où le nom du langage,
- la notion d'interface, de bibliothèque, d'unité de compilation ; avec celle-ci, la programmation de haut et de « bas niveau » (permettant la définition de primitives ou fonctions de base au niveau le plus physique).
- la programmation concurrente et une bien meilleure portabilité.
En résumé, Modula-2 est plus puissant et plus complet que Pascal. La modularité étant mieux conçue et traitée qu'en C, Modula-2 s'avère plus fiable dans les grosses applications.
Wirth a déclaré que ce langage était « celui qu'il aurait aimé concevoir quand il avait conçu Pascal ».
Oberon
Oberon est un langage de programmation à usage général publié pour la première fois en 1987 par Niklaus Wirth et le dernier membre de la famille Wirthienne des langages de type ALGOL (Euler, ALGOL W, Pascal, Modula et Modula-2). Oberon est le résultat d'un effort concentré visant à augmenter la puissance de Modula-2, le successeur direct de Pascal, et simultanément à réduire sa complexité. Sa principale nouveauté est le concept d'extension de type des types d'enregistrement.
Il permet de construire de nouveaux types de données à partir de ceux existants et de les relier, s'écartant du dogme du typage strictement statique des données. L'extension de type est la méthode d'héritage de Wirth reflétant le point de vue du site parent. Oberon a été développé dans le cadre de la mise en œuvre d'un système d'exploitation, également nommé Oberon à l'ETH Zurich en Suisse. Le nom a été inspiré à la fois par les images de la sonde spatiale Voyager de la lune de la planète Uranus, nommée Oberon, et parce qu'Obéron est célèbre comme le roi des elfes.
Comme illustration, ici, une table de variables de procédure est définie et une variable globale de ce type est déclarée dans le module étendu et réaffectée dans le module générique*:
Code Oberon : | Sélectionner tout |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | MODULE Figures; (* Abstract module *) TYPE Figure* = POINTER TO FigureDesc; Interface* = POINTER TO InterfaceDesc; InterfaceDesc* = RECORD draw* : PROCEDURE (f : Figure); clear* : PROCEDURE (f : Figure); mark* : PROCEDURE (f : Figure); move* : PROCEDURE (f : Figure; dx, dy : INTEGER); END; FigureDesc* = RECORD if : Interface; END; PROCEDURE Init* (f : Figure; if : Interface); BEGIN f.if := if END Init; PROCEDURE Draw* (f : Figure); BEGIN f.if.draw(f) END Draw; (* Other procedures here *) END Figures. |
Conclusion
Niklaus Wirth a reçu de nombreuses distinctions pour ses travaux, dont le prix Turing en 1984, considéré comme la plus haute distinction en informatique, pour « avoir développé une séquence de langages de programmation innovants, EULER, ALGOL-W, MODULA et PASCAL ». Il a également reçu le prix IEEE Emanuel R. Piore en 1983, le prix Marcel-Benoist en 1989, le prix d’excellence du SIGPLAN de l’ACM en 2007, et a été fait membre de l’Académie des sciences de Berlin-Brandebourg, de l’Association for Computing Machinery, de l’Académie américaine des arts et des sciences, de l’Académie allemande des sciences et de l’ingénierie, et de l’Academia Europaea.
Niklaus Wirth a été un pionnier et un leader dans le domaine de l’informatique, et a laissé un héritage durable à travers ses langages de programmation, ses publications, ses enseignements et ses recherches. Il a inspiré et influencé de nombreux informaticiens, et a contribué à faire avancer la science et l’art des langages de programmation. Il sera regretté par la communauté informatique et par tous ceux qui ont eu le privilège de le connaître et de travailler avec lui.
Sources : Euler : une expérience de définition du langage, vidéo dans le texte
Et vous ?
Aviez-vous déjà entendu parler de Niklaus Wirth ? Que pensez-vous de son apport dans l'évolution de l'informatique en général et de la programmation en particulier ?
Quelle est l’importance du langage Pascal dans l’histoire de l’informatique ?
Quels sont les avantages et les inconvénients des langages de programmation impératifs et structurés par rapport aux autres paradigmes ?
Quels sont les défis actuels et futurs de la conception et de l’implémentation des langages de programmation ?
Quelles sont les qualités requises pour être un bon concepteur de langages de programmation ?
Quels sont les langages de programmation que vous utilisez ou que vous aimeriez apprendre, et pourquoi ?