"Bloody Stupid Decision": L'histoire de C



Aussi difficile que cela puisse paraître à croire, C n'est pas né comme un manuel de poche en lambeaux.



Sous une forme ou une autre, le langage C a influencé la formation de pratiquement tous les langages de programmation développés depuis les années 1980. Certains langages comme C ++, C # et Objective C étaient censés être des descendants directs de C, tandis que d'autres ont simplement adopté et adapté sa syntaxe. Un programmeur qui est passé de Java, PHP, Ruby, Python ou Perl n'aura presque aucune difficulté à comprendre des programmes C simples, et dans ce sens, C peut être considéré comme la lingua franca des programmeurs.



Cependant, C n'est pas sorti de nulle part comme un monolithe de programmation unique. L'histoire C commence en Angleterre, avec un collègue d'Alan Turing et un programme de dames.



que Dieu sauve le roi



Christopher Strachey a été surnommé «l'homme de la programmation idéale», selon son long dossier dans le magazine Annals of the History of Computing . Il a acquis cette réputation au Centre de calcul de l'Université de Manchester en 1951. Strachey s'est retrouvé là-bas grâce à son travail sur ordinateur à l'Université Ferranti Mark I et à sa connaissance d'Alan Turing du King's College de Cambridge.



Strachey est né en 1916 dans une famille britannique bien connectée - son oncle, Lytton Strachey, était l'un des fondateurs du groupe Bloomsbury, et son père, Oliver Strachey, a joué un rôle déterminant dans les opérations de rupture de code des Alliés dans les deux guerres mondiales.



Il aurait été une surprise pour les professeurs de Strachey de son école privée et de l'Université de Cambridge que Strachey soit devenu un expert reconnu en programmation et en informatique. Strachey a toujours fait preuve de talent pour les sciences, mais les a rarement appliquées.



S'il avait l'espoir d'une carrière dans la recherche scientifique, il fut durement touché par les résultats insignifiants de ses examens finaux. Au lieu de cela, pendant la Seconde Guerre mondiale, Strachey a travaillé pour une entreprise d'électronique britannique et est devenu plus tard professeur d'école, pour finalement se retrouver dans l'une des écoles privées les plus prestigieuses de Londres, Harrow.



En 1951, Strachey a d'abord eu la chance de travailler avec des ordinateurs - il a été présenté à Mike Wudger du UK National Physics Laboratory. Après avoir passé une journée de son week-end de Noël à explorer le Pilot ACE Lab, pendant son temps libre à Harrow, il a découvert comment apprendre à un ordinateur à jouer aux dames. Selon Martin Campbell-Kelly , qui deviendra plus tard un collègue de Strachey, "toute personne ayant plus d'expérience et moins de confiance serait heureuse avec juste une table de carrés."



La première tentative n’a pas porté ses fruits: l’ordinateur Pilot ACE n’avait tout simplement pas assez de mémoire pour jouer aux dames, mais il montrait un aspect des intérêts de Strachey qui s’avérerait essentiel pour le développement des langages qui conduiraient finalement à C. À une époque où les ordinateurs étaient principalement prisés pour leur capacité à résoudre rapidement des équations, Strachey était plus intéressé par leur capacité à exécuter des problèmes de logique (comme il l'a admis plus tard en 1952 à la réunion de l'Association for Computing Machinery ).



Le printemps suivant, il apprit qu'un ordinateur Ferranti Mark I. avait été installé à l'Université de Manchester. Dans cette université, Alan Turing était directeur adjoint du laboratoire informatique. Turing a écrit un manuel pour les programmeurs, et Strachey le savait assez bien grâce à sa collaboration à Cambridge pour en demander un.



En juillet 1951, Strachey se rendit à Manchester et discuta personnellement avec Turing de son programme de brouillons. Impressionné, Turing a suggéré que dans un premier temps, écrivez un programme permettant au Ferranti Mark I de se simuler. Le simulateur permettra aux programmeurs d'observer étape par étape comment l'ordinateur exécutera le programme. Un tel programme de "traçage" identifiera les parties où le programme crée des goulots d'étranglement ou est inefficace. À cette époque, les cycles de mémoire et de processeur de l'ordinateur valaient une fortune, c'était donc un aspect important de la programmation.



Le programme de traçage de Strachey contenait plus d'un millier de commandes - à cette époque, c'était le programme le plus long écrit pour Ferranti Mark I. Après avoir travaillé toute la nuit, Strachey a pu l'exécuter et, une fois terminé, le programme, selon Campbell-Kelly , a joué l'hymne "God save King »via le haut-parleur de l'ordinateur.



Cette réalisation d'amateur a attiré l'attention de Lord Halsbury, directeur général de la National Research and Development Corporation, qui a rapidement embauché Strachey pour gérer les travaux du gouvernement afin de promouvoir les applications pratiques des universités britanniques d'informatique en pleine croissance.



C'est dans cette position qu'il a appris l'existence d'un projet de Cambridge dirigé par un trio de programmeurs nommé David.



David et Goliath Titan



Le centre informatique de l'Université de Cambridge était fortement axé sur le service aux scientifiques. Les premiers ordinateurs du laboratoire de mathématiques, EDSAC et EDSAC 2, ont été mis à la disposition des chercheurs de toute l'université. Ils ont écrit des programmes qui ont été perforés sur des bandes de papier et insérés dans une machine.



Dans le centre informatique, ces bandes perforées étaient attachées à la corde à linge et exécutées les unes après les autres pendant les heures de travail. Cette file d'attente de programmes en attente est devenue la «file d'attente des travaux», un terme encore utilisé aujourd'hui pour décrire des méthodes beaucoup plus complexes d'organisation des tâches de calcul.





À 6h55, vous pouvez voir la "file d'attente des travaux" EDSAC.



Deux ans seulement après la mise en service de l'EDSAC 2, l'université a réalisé qu'une machine beaucoup plus puissante serait bientôt nécessaire et que pour résoudre ce problème, elle devrait acheter un mainframe commercial. L'université a envisagé des options pour l'IBM 7090 et le Ferranti Atlas, mais ne pouvait se permettre aucune de ces machines. En 1961, le directeur du département de Ferranti, Peter Hall, a proposé qu'une version allégée de l'ordinateur Atlas soit développée avec l'Université de Cambridge. Cambridge obtiendra un prototype appelé Titan, et Ferranti pourra vendre le nouvel ordinateur à des clients pour qui Atlas est trop cher.



Pour fournir des services informatiques au reste de l'université, cet ordinateur aura besoin à la fois d'un système d'exploitation et d'au moins un langage de programmation de haut niveau.



Presque aussitôt, l'idée d'étendre le langage développé pour EDSAC 2 a été abandonnée. «Au début des années 1960, on pensait généralement que 'nous construisons un nouvel ordinateur, nous avons donc besoin d'un nouveau langage de programmation' ', a rappelé David Hartley dans un podcast de 2017 . Avec David Wheeler et David Barron Hartley a participé aux premières étapes du développement d'un nouveau langage de programmation pour cet ordinateur.



«Construire un nouveau système d'exploitation était inévitable», a déclaré Hartley, mais pas un nouveau langage de programmation. «Nous pensions avoir l'occasion d'expérimenter une nouvelle langue. Rétrospectivement, il semble que ce soit une décision sacrément stupide. "



Maurice Wilkes, qui a dirigé le projet Titan, pensait qu'il n'y avait pas besoin d'un nouveau langage de programmation. La tâche principale prévue de Titan était de fournir des services informatiques à l'Université de Cambridge, et pour cela, il serait optimal de fabriquer et de démarrer la machine dès que possible, en l'équipant d'un langage déjà familier aux utilisateurs.



Avant d'approuver une proposition de développement d'un nouveau langage, Wilkes a demandé une analyse des langages de programmation existants. «Nous les avons choisis très soigneusement», se souvient Hartley, «pour qu'il décide qu'aucune langue n'est appropriée». Fait intéressant, le groupe de travail Fortran IV n'a même pas contacté les utilisateurs de Fortran à Cambridge qui pourraient parler de fonctionnalités supplémentaires disponibles dans d'autres saveurs Fortran. Pour cette raison, comme le rappelle Hartley , le groupe était convaincu que «nous pouvons concevoir et développer quelque chose de bien meilleur», mais après quelques années, cette entreprise s'est soldée par un échec.



Le trio avait rédigé un article en juin 1962 faisant valoir la nécessité d'une nouvelle langue et, comme le dit Hartley, «nous nous en sommes sortis».



Ce nouveau langage de programmation s'appelait CPL (Cambridge Programming Language), et en 1963, des travaux étaient déjà en cours dessus. Les programmeurs de Cambridge ont été rejoints par John Buxton et Eric Nixon de l'Université de Londres, et CPL signifie maintenant Combined Programming Language. Le projet a grandi et Wilkes a décidé de faire appel à Christopher Strachey pour le diriger. Bientôt, selon Campbell-Kelly , les personnes associées au projet ont commencé à décoder le CPL en tant que «langage de programmation de Christopher».



Le groupe de chercheurs en langues s'est réuni à Cambridge ou à Londres, ainsi qu'à l'Université de Londres, mais parfois ils se sont rencontrés dans l'atelier de la maison de ville de Kensington où Strachey vivait avec sa sœur. La pièce à l'arrière de la maison était bordée de chaises victoriennes, des oreillers étaient posés sur le sol et les murs étaient ornés de portraits de membres du groupe Bloomsbury, dessinés par l'un des proches de Strachey. C'est là que Strachey «a organisé une fête à la cour», parfois vêtue d'une robe de chambre, et, comme David Barron se souvient quelques années plus tard, «nous nous sommes disputés sur la façon de changer le monde pour le mieux et le soir nous sommes rentrés chez nous».



À ce moment-là, David Wheeler était passé à d'autres projets, laissant cinq de ses collègues: Hartley, Barron, Buxton, Nixon et Strachey.



Hartley adorait travailler sur le CPL: «C'était en fait un travail assez intéressant», se souvient-il. Les réunions étaient plutôt informelles. "Nous avons discuté de divers sujets avec beaucoup de chaleur et, au fil du temps, nous avons même commencé à se lancer des avions en papier."



Le groupe a commencé avec le cahier des charges ALGOL 60, dans le but d'écrire un langage «idéal» qui serait pratique pour différents utilisateurs, mais en même temps esthétique et efficace.



Les difficultés de hiérarchisation ont commencé presque immédiatement. Comme l'a dit David Barron à propos de Strachey, "il était typique pour lui de défendre son point de vue sur des différences mineures avec la même force que sur des points importants". L'une de ces controverses mineures était l'objection de Strachey à la grammaire des constructions IF ... THEN ... ELSE. «Je ne peux pas permettre que mon nom soit associé à une recommandation d'utiliser un anglais illettrement incorrect» - tel était son point de vue , selon les mémoires de Hartley pour les Annales de l'histoire de l'informatique . Strachey préférait "OU", ce qui contredisait la façon dont "OU" était utilisé dans presque toutes les autres langues existantes. Cependant, sa préférence l'a emporté, et dans le guide de référence CPL OR est utilisé là où les utilisateurs s'attendent à un ELSE.





Le manuel CPL, qui peut bien sûr être trouvé en ligne .



Un temps précieux a également été passé à développer un moyen d'éviter d'utiliser un astérisque pour désigner une opération de multiplication. Dans ce cas, des considérations esthétiques ont conduit à des complications qui ont ralenti la mise en œuvre d'un langage de programmation pratique car des règles complexes ont dû être développées pour distinguer entre «3a» signifiant «3 * a» et «3a» comme nom de variable.



Pendant ce temps, les utilisateurs de Cambridge étaient de plus en plus irrités par le manque de langage de programmation pratique pour les nouveaux ordinateurs Atlas. Les spécifications du langage étaient pour la plupart terminées, mais le compilateur n'existait pas encore. Le groupe de travail a rendu le CPL si complexe que les premières tentatives d'écriture d'un compilateur en code machine ont été incroyablement inefficaces.



Commencer par la promotion



En 1965, Strachey part pour le Massachusetts Institute of Technology (MIT) pendant plusieurs mois et, à son retour, devient directeur du Oxford Programming Research Group. Entre-temps, Martin Richards a rejoint le projet CPL à Cambridge. Il s'est mis à développer une version allégée du CPL avec laquelle les utilisateurs pourraient travailler. Ce langage BCPL ("B" pour "Basic", "simple") avait besoin d'un compilateur efficace.



Au MIT, Strachey a aidé Martin Richards à obtenir un congé sabbatique de deux ans à l'institut, et en 1966, Richards a emmené BCPL avec lui au Massachusetts où il a pu travailler sur un compilateur.



BCPL est un langage "bootstrap" car son compilateur est capable d'auto-compilation. Fondamentalement, une petite partie du compilateur BCPL est écrite en assembleur ou en code machine, et le reste du compilateur est écrit dans un sous-ensemble correspondant de BCPL. La partie du compilateur écrite en BCPL est transmise à la partie assembleur et le programme de compilation résultant peut être utilisé pour compiler n'importe quel programme écrit en BCPL.



Les compilateurs d'amorçage simplifient considérablement le processus de portage d'un langage d'un ordinateur ou d'un système d'exploitation à un autre. Pour que le compilateur s'exécute sur un autre ordinateur, il suffit de réécrire une partie relativement petite du compilateur, écrite dans un code spécifique à un ordinateur particulier.



Pendant que Richards travaillait sur le compilateur BCPL au MIT, l'institut a commencé à participer au projet Multics avec Bell Labs et GE. Pour soutenir le projet, un réseau a été créé reliant le MIT et les Bell Labs.



Bien que la connexion réseau entre les deux organisations ait été théoriquement destinée à faciliter le travail avec Multics, Ken Thompson nous a dit qu'il était socialement acceptable de «parcourir» les mainframes du MIT à la recherche d'autres projets, et c'est ainsi qu'il a trouvé le code et la documentation BCPL. Il les a téléchargés sur l'ordinateur central des Bell Labs et a commencé à travailler dessus. «Je cherchais une langue pour faire les choses que je voulais», se souvient Thompson. "La programmation à l'ère des systèmes d'exploitation propriétaires sur d'énormes machines était très difficile."



À l'époque des expériences de Thompson avec BCPL, Bell Labs s'est retiré du consortium Multics et le département d'informatique de Thompson a temporairement manqué d'ordinateurs.



Quand elle a finalement eu l'ordinateur, c'était un PDP-7 d'occasion, pas particulièrement puissant même selon les normes de cette époque. Néanmoins, Thompson a réussi à construire et à exécuter la première version d'Unix sur cette machine.



Le PDP-7 avait 8 192 "mots" en mémoire (un mot dans ce cas était de 18 bits - l'industrie n'avait pas encore normalisé un "octet" de 8 bits). Unix a pris les 4 000 premiers mots, laissant 4 000 pour exécuter les programmes.



Thompson a pincé sa copie de BCPL (qui était elle-même un CPL dépouillé) pour s'insérer dans les 4000 mots de la mémoire libre du PDP-7. Dans le processus de compression, il a emprunté des parties de la langue qu'il a rencontrées en tant qu'étudiant à l'Université de Californie à Berkeley. Ce langage SMALGOL était un sous-ensemble d'ALGOL 60 conçu pour fonctionner sur des ordinateurs moins puissants.



Le langage que Thompson a fini par utiliser sur le PDP-7 était, selon sa propre description, «la sémantique BCPL avec une grande partie de la syntaxe SMALGOL», ce qui signifie qu'il ressemblait à SMALGOL et fonctionnait comme BCPL. Étant donné que ce nouveau langage ne comprenait que les aspects de BCPL que Thompson trouvait les plus utiles et s'inscrivant dans les limites du PDP-7, il a décidé de raccourcir le nom de BCPL en "B".



Thompson avait précédemment écrit Unix pour le PDP-7 en assembleur, mais même en 1969, ce n'était pas un moyen idéal de construire un système d'exploitation. Sur le PDP-7, cela fonctionnait parce que l'ordinateur était assez basique et Thompson a écrit le système d'exploitation principalement pour le plaisir.



Tout système d'exploitation qui devait être maintenu et mis à jour par plusieurs programmeurs, ou exécuté sur du matériel plus sophistiqué à l'époque, devait être écrit dans un langage de programmation de haut niveau.



Ainsi, lorsque Bell Labs a acquis le PDP-11 pour le département en 1971, Thompson a décidé qu'il était temps de réécrire Unix dans un langage de programmation de haut niveau. Il en a parlé à Brian Kernighan sur scène au VCF 2019 .



Dans le même temps, Dennis Ritchie a emprunté B et l'a adapté pour fonctionner sur des ordinateurs plus puissants. L'un des premiers aspects qu'il a encore ajouté à B était la capacité de «taper» des variables. Puisque la mémoire du PDP-7 se composait de mots de 18 bits, B pourrait être simplifié en traitant chaque variable soit comme un mot mémoire, soit comme une séquence de mots référencés par son emplacement dans la mémoire système. Il n'y avait pas de nombres décimaux, d'entiers ou de chaînes à virgule fixe ou flottante dans la langue. Comme l'a dit Thompson, «ce n'étaient que des mots».



Cette approche était efficace sur une machine simple avec très peu de mémoire et une petite base d'utilisateurs, mais sur des systèmes plus complexes avec des programmes complexes et de nombreux utilisateurs, elle pouvait conduire à des moyens spécifiques de déterminer si une variable est une chaîne ou un nombre, ainsi qu'à une utilisation inefficace de la mémoire. ...



Selon la deuxième édition de l'Histoire des langages de programmation de Thomas Bergin et Richard Gibson, Ritchie a nommé ce langage modifié NB ("Nouveau B"). Il a été installé sur l'ordinateur central du Murray Hill Computing Center, qui a été mis à la disposition des utilisateurs via Bell Labs.



Naturellement, lorsque Thompson a décidé de réécrire Unix en Java, il a commencé avec NB. Les trois premières tentatives se sont soldées par un échec, et "à cause de mon égoïsme, j'ai blâmé la langue pour cela", se souvient Thompson avec un sourire à VCF.



Après chaque échec, Ritchie a ajouté des fonctionnalités à NB dont lui et Ken avaient besoin. Il a une fois ajouté des structures - des variables qui stockent de nombreuses valeurs individuelles d'une manière cohérente ou "structurée", après quoi Thompson a pu écrire Unix dans ce nouveau langage. Ritchie et Thompson ont considéré l'ajout de structures qui n'étaient pas dans B, SMALGOL, BCPL et CPL des changements suffisamment importants pour renommer le langage, et B est devenu C.



La vie sous le signe C





Christopher Strachey en 1955 avec Ferranti Mark 1 (également connu sous le nom de Manchester Electronic Computer).



C s'est échappé des Bell Labs de la même manière qu'Unix. Cela a rapidement contribué à faire du PDP-11 l'un des mini-ordinateurs les plus performants du marché, mais ce qui en a fait le plus attractif était le prix Unix. Tout centre de données avec un PDP-11 pouvait y installer Unix au prix des médias et du courrier, et



C est venu avec Unix.C La présence de C sur tant de campus était, selon Thompson, la principale raison de son succès. Dans une lettre, il a écrit qu '"ils étaient diplômés de beaucoup de gars qui connaissaient C".



Un autre coup de pouce au succès de C fut la publication en 1978 de The C Programming LanguageDennis Ritchie et Brian Kernighan. Un petit livre de 228 pages est devenu, même selon les normes de l'époque, un travail remarquablement simple et accessible.



Une large connaissance de la syntaxe C a influencé le développement de nombreux langages qui ont suivi, peu ou pas de ressemblance avec C.Les langages de script comme PHP et JavaScript contiennent des bits de notation de programmation que Thompson a initialement conçus pour adapter B dans la petite empreinte mémoire du PDP-7. Par exemple, il s'agit des opérateurs d'incrémentation "++" et de décrémentation "-". Lorsque vous ne disposez que de 4 000 mots, la réduction de «x = x + 1» à «x ++» économise une bonne quantité d'espace.



Thompson n'a jamais pensé que C serait aussi répandu. «Il y avait beaucoup de langues complètement différentes, très intéressantes et utiles», a déclaré Thompson. "Mon instinct esthétique m'a dit qu'une langue ne peut pas couvrir tous les besoins de l'univers."



Comme Unix, C était un succès né d'un échec. Dans les deux cas, les programmeurs ont pris les meilleures parties des projets qui étaient condamnés parce qu'on leur en demandait trop. Multics, qui a donné naissance à Unix, n'a été utilisé à son apogée que dans environ 80 ordinateurs, et le CPL, qui a finalement conduit à la création de C, n'a jamais été achevé et les chercheurs de Cambridge l'ont abandonné en 1967.



Lorsque Christopher Strachey a lancé le groupe de recherche en programmation à Oxford, il a déclaré que "diviser le travail en pratique et théorique est artificiel et nuisible".

Bien que le CPL soit censé combiner les aspects pratiques et théoriques, sa mise en œuvre s'est avérée trop théorique. Le groupe de travail CPL n'a pas essayé de programmer dans le CPL.



Cependant, même si Strachey n'a pas pu réaliser une synthèse entre théorie et pratique au CPL, son attitude était définitivement correcte. «C a été écrit pour écrire Unix», se souvient Thompson. Et "Unix a été écrit pour que nous puissions tous écrire des programmes."






La publicité



Des serveurs bon marché pour n'importe quelle tâche - c'est à propos de nos serveurs épiques . Créez votre propre plan en quelques clics, configuration maximale - 128 cœurs de processeur, 512 Go de RAM, 4000 Go de NVMe.






All Articles