ANNÉES 1960

PL/I

L’informatique du début des années 1960 ressemblait à un archipel de communautés étanches. D’un côté, les scientifiques exploitaient leurs IBM 7090, codaient en FORTRAN et se retrouvaient dans les réunions de SHARE – un groupe d’utilisateurs des mainframes IBM. De l’autre, le monde des affaires travaillait sur IBM 7080, jurait par COBOL et organisait ses propres cercles au sein de G.U.I.D.E – un autre groupe d’utilisateurs des ordinateurs IBM. Quelques machines spécialisées comme l’IBM 7750 disposaient de leurs langages dédiés, à l’image de JOVIAL (Jules’ Own Version of the International Algorithmic Language).

Cette partition géographique du territoire informatique commençait à montrer ses limites. Les chercheurs ne voulaient plus attendre des heures devant leur terminal pour récupérer une simple valeur numérique, ils réclamaient des rapports structurés, lisibles, dignes de leurs travaux. Leurs fichiers de données gonflaient et rivalisaient désormais avec les volumes manipulés par les entreprises. Côté commercial, les directions marketing découvraient les joies de l’analyse statistique et réclamaient des calculs en virgule flottante sur leurs données de vente. Les responsables informatiques se retrouvaient avec deux systèmes d’exploitation sur les bras, deux équipes de programmeurs qui ne parlaient pas le même langage, littéralement, et des budgets qui s’envolaient.

IBM avait déjà posé les bases d’une réponse avec le System/360 et OS/360, cette famille de machines et de systèmes d’exploitation pensée pour unifier les besoins de tous. Restait à créer un langage de programmation qui suivrait une philosophie identique. En octobre 1963, IBM et SHARE créent le comité Advanced Language Development. Sa mission était de définir un langage universel qui mettrait fin à cette tour de Babel informatique.

L’équipe rassemblée mélangeait les genres et les compétences. Hans Berg de Lockheed apportait son expertise en formation, Jim Cox d’Union Carbide maîtrisait FORTRAN sur le bout des doigts, Bruce Rosenblatt de Standard Oil dirigeait les débats. Du côté IBM, C. W. Medlock était l’homme des compilateurs FORTRAN optimisés, Bernice Weitzenhoffer naviguait entre FORTRAN et COBOL avec aisance, George Radin pilotait le projet fort de son expérience en programmation scientifique. Les réunions s’enchaînaient tous les quinze jours, trois ou quatre jours d’affilée, principalement entre New York et Los Angeles. Les membres extérieurs à IBM gardaient leurs postes à temps plein, ce nouveau langage restant pour eux une mission annexe. Prévu pour décembre 1963, le gel des spécifications glissa finalement à février 1964. Les délais étaient tendus.

L’idée d’étendre FORTRAN fut abandonnée. Sa syntaxe ne collait pas aux terminaux modernes, ses déclarations organisées par type plutôt que par identificateur heurtaient les habitudes, son stockage des tableaux par colonne déroutait les programmeurs d’applications commerciales. Les extensions nécessaires auraient tellement transformé FORTRAN que maintenir une quelconque compatibilité perdait son sens.

Le langage s’appela d’abord NPL – New Programming Language – dans la grande tradition des acronymes descriptifs. En 1965, un conflit avec le National Physical Laboratory britannique obligea IBM à le rebaptiser PL/I (parfois écrit PL/1). La première présentation officielle eut lieu en mars 1964 à San Francisco, devant l’assemblée de SHARE. Les réactions furent partagées. Certains saluèrent son exhaustivité et son attention portée aux programmeurs de tous niveaux. D’autres pointèrent sa complexité et ses redondances. Un membre de SHARE le compara à « un couteau suisse à cent lames », une métaphore qui en disait long sur les ambitions du projet.

Le développement des compilateurs atterrit dans les laboratoires IBM de Hursley, en Angleterre. L’équipe de John Fairclough se chargea de stabiliser le langage et de le rendre utilisable en pratique. Sans les programmeurs de Hursley, PL/I serait resté une belle théorie. Ils construisirent ses compilateurs, participèrent à sa standardisation et transformèrent une spécification ambitieuse en outil de travail quotidien.

PL/I bouscula les conventions établies. Il introduisit les tâches asynchrones, définit des conditions ON pour spécifier des blocs de code à exécuter lors d’événements particuliers, autorisa les procédures récursives avec stockage statique et automatique. Sa palette de types de données impressionnait : arithmétiques ou chaînes de caractères, décimaux ou binaires, fixes ou flottants, réels ou complexes. Les tableaux acceptaient une dimension arbitraire avec des bornes choisies librement. Les entrées-sorties reçurent un soin particulier, elles représentaient plus de 10% de la définition du langage. PL/I mariait les capacités de formatage de FORTRAN avec certaines fonctionnalités COBOL pour le traitement des enregistrements, tout en exploitant les nouvelles possibilités d’OS/360 comme les entrées-sorties asynchrones.

L’une des particularités les plus controversées de PL/I résidait dans sa gestion des déclarations. Le langage n’exigeait pas que tous les attributs soient explicitement déclarés. En cas d’oubli, des types implicites étaient assignés selon l’usage des variables dans le programme. Les attributs manquants recevaient des valeurs par défaut dépendant de ceux explicitement mentionnés. Cette flexibilité répondait aux contraintes de l’époque où chaque soumission de programme impliquait attente et délais.

L’évolution de PL/I témoigne d’un effort constant de formalisation. Les premiers documents de 1964 laissaient de nombreuses zones d’ombre et ambiguïtés. Ray Larner et John Nicholls développèrent une première définition sémantique formelle baptisée Universal Language Definition II. Le laboratoire de Vienne prit ensuite le relais avec une définition encore plus rigoureuse. PL/I rejoignit ainsi le cercle fermé des langages les mieux définis de son temps.

Le succès fut au rendez-vous. Dans les années 1970, IBM vendait plus de licences de compilateurs PL/I que de FORTRAN pour les System/370. COBOL gardait certes la première place pour les applications commerciales, mais PL/I avait trouvé sa place. Le langage et ses variantes servirent à programmer des systèmes d’exploitation entiers comme MULTICS et OS/VS2 Release 2, ainsi que de nombreux compilateurs. Des sous-ensembles pédagogiques facilitèrent son enseignement dans les universités.

PL/I privilégiait l’efficacité du code objet et la commodité d’usage plutôt que l’élégance théorique. Son développement s’appuyait sur l’expérience concrète des programmeurs plutôt que sur des considérations mathématiques abstraites. Cette philosophie tranche avec les préoccupations actuelles comme l’extensibilité ou la vérification formelle des programmes.