Ob Sie es glauben oder nicht, C wurde nicht als zerfetztes Taschenbuchhandbuch geboren.
In der einen oder anderen Form hat die C-Sprache die Bildung fast jeder seit den 1980er Jahren entwickelten Programmiersprache beeinflusst. Einige Sprachen wie C ++, C # und Objective C sollten direkte Nachkommen von C sein, während andere einfach die Syntax übernahmen und anpassten. Ein Programmierer, der von Java, PHP, Ruby, Python oder Perl gewechselt ist, wird kaum Schwierigkeiten haben, einfache C-Programme zu verstehen, und in diesem Sinne kann C als die Verkehrssprache der Programmierer angesehen werden.
C tauchte jedoch nicht aus dem Nichts als einzelner Programmiermonolith auf. Die C-Geschichte beginnt in England mit einem Kollegen von Alan Turing und einem Dame-Programm.
Gott schütze den König
Christopher Strachey wurde laut seinem ausführlichen Dossier in der Zeitschrift Annals of the History of Computing als „Mann der idealen Programmierung“ bezeichnet . Diesen Ruf erlangte er 1951 am Rechenzentrum der Universität von Manchester. Strachey landete dort dank seiner Arbeit an einem Computer an der Ferranti Mark I University und seiner Bekanntschaft mit Alan Turing vom King's College in Cambridge.
Strachey wurde 1916 in eine gut vernetzte britische Familie geboren - sein Onkel Lytton Strachey war einer der Gründer der Bloomsbury Group, und sein Vater Oliver Strachey war maßgeblich an den Code-brechenden Operationen der Alliierten in beiden Weltkriegen beteiligt.
Für Stracheys Professoren an seiner Privatschule und der Universität von Cambridge wäre es eine Überraschung gewesen, dass Strachey zu einem anerkannten Experten für Programmierung und Informatik geworden ist. Strachey zeigte immer Talent für die Wissenschaften, wandte sie aber selten an.
Wenn er auf eine Karriere in der wissenschaftlichen Forschung hoffte, wurde er von den unauffälligen Ergebnissen seiner Abschlussprüfungen schwer getroffen. Während des Zweiten Weltkriegs arbeitete Strachey für ein britisches Elektronikunternehmen und wurde später Schullehrer. Schließlich landete er an einer der renommiertesten Privatschulen Londons, Harrow.
1951 bekam Strachey erstmals die Möglichkeit, mit Computern zu arbeiten - er wurde Mike Wudger vom britischen National Physics Laboratory vorgestellt. Nachdem er einen Tag seines Weihnachtswochenendes damit verbracht hatte, das Pilot ACE Lab zu erkunden, fand er in seiner Freizeit in Harrow heraus, wie man einem Computer das Spielen von Dame beibringt. Laut Martin Campbell-Kelly , später ein Kollege von Strachey zu werden „ jemand mit mehr Erfahrung und weniger Vertrauen würde mit nur einen Tisch von Quadraten glücklich sein.“
Der erste Versuch hatte keine Früchte getragen: Der Pilot-ACE-Computer hatte einfach nicht genug Speicher, um Dame zu spielen, aber er zeigte einen Aspekt von Stracheys Interessen, der sich als kritisch für die Entwicklung der Sprachen erweisen würde, die schließlich zu C führen würden. Zu einer Zeit, als Computer größtenteils geschätzt wurden Strachey war mehr an ihrer Fähigkeit interessiert, logische Probleme zu lösen (wie er später 1952 beim Treffen der Association for Computing Machinery zugab ).
Im folgenden Frühjahr erfuhr er, dass an der Universität von Manchester ein Ferranti Mark I-Computer installiert worden war. Alan Turing war der stellvertretende Direktor des Computerlabors an dieser Universität. Turing schrieb ein Lehrbuch für Programmierer, und Strachey wusste es aus seiner Zusammenarbeit in Cambridge gut genug, um nach einem zu fragen.
Im Juli 1951 besuchte Strachey zufällig Manchester und diskutierte persönlich mit Turing über sein Entwurfsprogramm. Beeindruckt schlug Turing vor, als ersten Schritt ein Programm zu schreiben, mit dem sich der Ferranti Mark I selbst simulieren kann. Mit dem Simulator können Programmierer Schritt für Schritt beobachten, wie der Computer das Programm ausführt. Ein solches "Ablaufverfolgungs" -Programm identifiziert die Teile, bei denen das Programm Engpässe verursacht oder unwirksam ist. Zu dieser Zeit waren sowohl Speicher- als auch Computerprozessorzyklen ein Vermögen wert, daher war dies ein wichtiger Aspekt der Programmierung.
Stracheys Verfolgungsprogramm enthielt mehr als tausend Befehle - zu dieser Zeit war es das längste Programm, das für Ferranti Mark I geschrieben wurde. Nachdem Strachey die ganze Nacht gearbeitet hatte, konnte er es ausführen, und nach Abschluss spielte das Programm laut Campbell-Kelly die Hymne "God save" König “über den Computerlautsprecher.
Diese Hobby-Leistung erregte die Aufmerksamkeit von Lord Halsbury, Geschäftsführer der National Research and Development Corporation, der Strachey bald beauftragte, die Regierungsarbeit zu verwalten, um praktische Anwendungen der schnell wachsenden britischen Informatikuniversitäten zu fördern.
In dieser Position erfuhr er von einem Cambridge-Projekt, das von einem Trio von Programmierern namens David geleitet wurde.
David und Goliath Titan
Das Rechenzentrum der Universität von Cambridge konzentrierte sich stark auf die Betreuung von Wissenschaftlern. Die ersten Computer im Mathematiklabor, EDSAC und EDSAC 2, wurden Forschern an der gesamten Universität zur Verfügung gestellt. Sie schrieben Programme, die auf Papierbänder gestanzt und in eine Maschine eingelegt wurden.
Im Rechenzentrum wurden solche Lochbänder an der Wäscheleine befestigt und während der Arbeitszeit nacheinander ausgeführt. Diese Warteschlange wartender Programme wurde als „Jobwarteschlange“ bezeichnet, und der Begriff wird heute noch verwendet, um viel komplexere Arten der Organisation von Rechenaufgaben zu beschreiben.
Um 6:55 Uhr sehen Sie die EDSAC "Job Queue".
Nur zwei Jahre nach Inbetriebnahme des EDSAC 2 erkannte die Universität, dass bald eine viel leistungsstärkere Maschine benötigt werden würde, und um dieses Problem zu lösen, müssten sie einen kommerziellen Mainframe kaufen. Die Universität erwog Optionen für IBM 7090 und Ferranti Atlas, konnte sich jedoch keine dieser Maschinen leisten. 1961 schlug der Abteilungsleiter von Ferranti, Peter Hall, vor, gemeinsam mit der Universität von Cambridge eine abgespeckte Version des Atlas-Computers zu entwickeln. Cambridge wird einen Prototyp namens Titan erhalten, und Ferranti wird den neuen Computer an Kunden verkaufen können, für die Atlas zu teuer ist.
Um Computerdienste für den Rest der Universität bereitzustellen, benötigt dieser Computer sowohl ein Betriebssystem als auch mindestens eine Programmiersprache auf hoher Ebene.
Fast sofort wurde die Idee, die für EDSAC 2 entwickelte Sprache zu erweitern, aufgegeben: „In den frühen 1960er Jahren wurde allgemein angenommen, dass wir einen neuen Computer bauen, also brauchen wir eine neue Programmiersprache“, erinnert sich David Hartley in einem Podcast 2017 . Zusammen mit David Wheeler und David Barron war Hartley an den frühen Phasen der Entwicklung einer neuen Programmiersprache für diesen Computer beteiligt.
"Das Erstellen eines neuen Betriebssystems war unvermeidlich", sagte Hartley, aber keine neue Programmiersprache. „Wir dachten, wir hätten die Möglichkeit, mit einer neuen Sprache zu experimentieren. Rückblickend scheint es eine verdammt dumme Entscheidung gewesen zu sein. "
Maurice Wilkes, der das Titan-Projekt leitete, glaubte, dass keine neue Programmiersprache erforderlich sei. Die Hauptaufgabe von Titan bestand darin, der Universität von Cambridge Computerdienste bereitzustellen. Dazu wäre es optimal, die Maschine so schnell wie möglich zu erstellen und zu starten und sie mit einer Sprache auszustatten, die den Benutzern bereits vertraut ist.
Bevor Wilkes einen Vorschlag zur Entwicklung einer neuen Sprache genehmigte, forderte er eine Analyse der vorhandenen Programmiersprachen an. "Wir haben sie sehr sorgfältig ausgewählt", erinnert sich Hartley, "damit er entscheidet, dass keine Sprache angemessen ist." Interessanterweise hat die Fortran IV-Arbeitsgruppe nicht einmal Fortran-Benutzer in Cambridge erreicht, die über zusätzliche Funktionen sprechen konnten, die in anderen Fortran-Varianten verfügbar sind. Aus diesem Grund war die Gruppe , wie Hartley sich erinnert , davon überzeugt, dass "wir etwas viel Besseres entwerfen und entwickeln können", aber nach einigen Jahren scheiterte dieses Unternehmen.
Das Trio hatte bis Juni 1962 einen Artikel vorbereitet, in dem es um die Notwendigkeit einer neuen Sprache ging, und wie Hartley sagt: "Wir sind damit durchgekommen."
Diese neue Programmiersprache hieß CPL (Cambridge Programming Language), und 1963 wurde bereits daran gearbeitet. Zu den Cambridge-Programmierern gesellten sich John Buxton und Eric Nixon von der University of London, und CPL steht jetzt für Combined Programming Language. Das Projekt wuchs und Wilkes beschloss, Christopher Strachey als Leiter zu holen. Laut Campbell-Kelly begannen die mit dem Projekt verbundenen Personen bald, CPL als "Christopher's Programming Language" zu dekodieren.
Die Gruppe der Sprachforscher traf sich in Cambridge oder London sowie an der University of London, aber manchmal trafen sie sich in der Werkstatt des Stadthauses von Kensington, in dem Strachey mit seiner Schwester lebte. Der Raum im hinteren Teil des Hauses war mit viktorianischen Stühlen ausgekleidet, Kissen lagen auf dem Boden und die Wände waren mit Porträts von Mitgliedern der Bloomsbury Group geschmückt, die von einem Verwandten Stracheys gezeichnet wurden. Dort veranstaltete Strachey "eine Gerichtsparty", manchmal im Schlafrock, und, wie David Barron einige Jahre später erinnerte, "wir haben darüber gestritten, wie wir die Welt zum Besseren verändern können, und am Abend sind wir nach Hause gegangen."
Zu diesem Zeitpunkt war David Wheeler zu anderen Projekten übergegangen und hatte seine fünf Kollegen verlassen: Hartley, Barron, Buxton, Nixon und Strachey.
Hartley liebte es, an der CPL zu arbeiten: „Es war tatsächlich eine ziemlich interessante Arbeit“, erinnert er sich. Die Treffen waren eher informell. "Wir haben verschiedene Themen sehr hitzig diskutiert und im Laufe der Zeit sogar angefangen, Papierflugzeuge aufeinander zu werfen."
Die Gruppe begann mit den ALGOL 60-Spezifikationen mit dem Ziel, eine „ideale“ Sprache zu schreiben, die für verschiedene Benutzer praktisch, aber gleichzeitig ästhetisch und effizient ist.
Schwierigkeiten bei der Priorisierung begannen fast sofort. Wie David Barron über Strachey sagte, "war es typisch für ihn, seinen Standpunkt zu geringfügigen Unterschieden mit der gleichen Kraft wie zu wichtigen Punkten zu verteidigen." Eine solche kleine Kontroverse war Stracheys Einwand gegen die Grammatik der Konstrukte IF ... THEN ... ELSE. "Ich kann nicht zulassen, dass mein Name mit einer Empfehlung in Verbindung gebracht wird, Analphabetisch falsches Englisch zu verwenden" - dies war laut Hartleys Memoiren für die Annalen der Geschichte des Rechnens sein Standpunkt. Strachey bevorzugte "OR", was der Art und Weise widersprach, wie "OR" in fast jeder anderen existierenden Sprache verwendet wurde. Seine Präferenz setzte sich jedoch durch und im CPL-Referenzhandbuch OR wird verwendet, wenn Benutzer ELSE erwarten würden.
Das CPL-Handbuch, das natürlich online verfügbar ist .
Es wurde auch wertvolle Zeit aufgewendet, um einen Weg zu finden, die Verwendung eines Sterns zur Bezeichnung einer Multiplikationsoperation zu vermeiden. In diesem Fall führten ästhetische Überlegungen zu Komplikationen, die die Implementierung einer praktischen Programmiersprache verlangsamten, da komplexe Regeln entwickelt werden mussten, um zwischen „3a“, was „3 * a“ bedeutet, und „3a“ als Variablenname zu unterscheiden.
In der Zwischenzeit waren die Benutzer von Cambridge zunehmend irritiert über das Fehlen einer praktischen Programmiersprache für die neuen Atlas-Computer. Die Sprachspezifikationen waren größtenteils fertig, aber der Compiler existierte noch nicht. Die Arbeitsgruppe machte die CPL so komplex, dass frühe Versuche, einen Compiler in Maschinencode zu schreiben, unglaublich wirkungslos waren.
Beginnend mit der Beförderung
1965 wechselte Strachey für einige Monate zum Massachusetts Institute of Technology (MIT) und wurde nach seiner Rückkehr Direktor der Oxford Programming Research Group. In der Zwischenzeit schloss sich Martin Richards dem CPL-Projekt in Cambridge an. Er machte sich daran, eine abgespeckte Version der CPL zu entwickeln, mit der Benutzer arbeiten konnten. Diese Sprache BCPL ("B" für "Basic", "simple") benötigte einen effizienten Compiler.
Während seiner Zeit am MIT half Strachey Martin Richards, ein zweijähriges Sabbatical am Institut zu absolvieren, und 1966 nahm Richards BCPL mit nach Massachusetts, wo er an einem Compiler arbeiten konnte.
BCPL ist eine "Bootstrap" -Sprache, da der Compiler sich selbst kompilieren kann. Grundsätzlich ist ein kleiner Teil des BCPL-Compilers in Assembly- oder Maschinencode geschrieben, und der Rest des Compilers ist in einer entsprechenden Teilmenge von BCPL geschrieben. Der in BCPL geschriebene Teil des Compilers wird an den Assembler-Teil übergeben, und das resultierende Compilerprogramm kann zum Kompilieren jedes in BCPL geschriebenen Programms verwendet werden.
Compiler mit Bootstrapping vereinfachen das Portieren einer Sprache von einem Computer oder Betriebssystem auf einen anderen erheblich. Damit der Compiler auf einem anderen Computer ausgeführt werden kann, reicht es aus, einen relativ kleinen Teil des Compilers neu zu schreiben, der in Code geschrieben ist, der für einen bestimmten Computer spezifisch ist.
Während Richards am MIT am BCPL-Compiler arbeitete, nahm das Institut mit Bell Labs und GE am Multics-Projekt teil. Zur Unterstützung des Projekts wurde ein Netzwerk zwischen MIT und Bell Labs eingerichtet.
Obwohl die Netzwerkverbindung zwischen den beiden Organisationen nominell dazu gedacht war, die Arbeit mit Multics zu vereinfachen, sagte Ken Thompson, dass es gesellschaftlich akzeptabel sei, die MIT-Mainframes nach anderen Projekten zu durchsuchen, und fand so den BCPL-Code und die Dokumentation. Er lud sie auf den Bell Labs-Mainframe herunter und begann daran zu arbeiten. "Ich suchte nach einer Sprache, um die Dinge zu tun, die ich wollte", erinnert sich Thompson. "In dieser Ära proprietärer Betriebssysteme auf riesigen Maschinen war die Programmierung sehr schwierig."
Ungefähr zur Zeit von Thompsons Experimenten mit BCPL zogen sich Bell Labs aus dem Multics-Konsortium zurück, und Thompsons Informatikabteilung gingen vorübergehend die Computer aus.
Als sie endlich den Computer bekam, war es ein gebrauchter PDP-7, der selbst nach den damaligen Maßstäben nicht besonders leistungsfähig war. Trotzdem gelang es Thompson, die erste Version von Unix auf diesem Computer zu erstellen und auszuführen.
Der PDP-7 hatte 8192 "Wörter" im Speicher (ein Wort war in diesem Fall 18 Bit - die Industrie hatte noch kein 8-Bit "Byte" standardisiert). Unix nahm die ersten 4.000 Wörter auf und ließ 4.000 übrig, um Programme auszuführen.
Thompson drückte seine Kopie von BCPL (die selbst eine abgespeckte CPL war) zusammen, um in die 4.000 Wörter des freien Speichers des PDP-7 zu passen. Während der Komprimierung lieh er sich Teile der Sprache aus, die er als Student an der University of California in Berkeley kennengelernt hatte. Diese SMALGOL-Sprache war eine Teilmenge von ALGOL 60, die auf weniger leistungsfähigen Computern ausgeführt werden konnte.
Die Sprache, die Thompson letztendlich auf dem PDP-7 verwendete, laut seiner eigenen Beschreibung „BCPL-Semantik mit einem Großteil der SMALGOL-Syntax“, was bedeutet, dass sie wie SMALGOL aussah und wie BCPL funktionierte. Da diese neue Sprache nur aus den Aspekten von BCPL bestand, die Thompson am nützlichsten fand und die den PDP-7-Einschränkungen entsprachen, beschloss er, den Namen von BCPL auf "B" zu kürzen.
Thompson hatte zuvor Unix für den PDP-7 in Assembler geschrieben, aber selbst 1969 war dies kein idealer Weg, um ein Betriebssystem zu erstellen. Auf dem PDP-7 funktionierte es, weil der Computer ziemlich einfach war und Thompson das Betriebssystem hauptsächlich zum Spaß schrieb.
Jedes Betriebssystem, das von mehreren Programmierern unterstützt und aktualisiert werden musste oder auf einer komplexeren Hardware ausgeführt werden musste, musste in einer höheren Programmiersprache geschrieben werden.
Als Bell Labs 1971 den PDP-11 für die Abteilung erwarb, entschied Thompson, dass es Zeit war, Unix in einer höheren Programmiersprache neu zu schreiben. Er sprach mit Brian Kernighan auf der Bühne des VCF 2019 darüber .
Gleichzeitig lieh sich Dennis Ritchie B aus und passte es an leistungsfähigere Computer an. Einer der ersten Aspekte, die er erneut zu B hinzufügte, war die Fähigkeit, Variablen zu "tippen". Da der Speicher des PDP-7 aus 18-Bit-Wörtern bestand, konnte B vereinfacht werden, indem jede Variable entweder als ein Speicherwort oder als eine Folge von Wörtern behandelt wurde, auf die durch ihre Position im Systemspeicher verwiesen wird. Es gab keine Fest- oder Gleitkomma-Dezimalzahlen, Ganzzahlen oder Zeichenfolgen in der Sprache. Wie Thompson sagte: "Es waren alles nur Worte."
Dieser Ansatz war auf einer einfachen Maschine mit einem sehr kleinen Speicherbedarf und einer kleinen Benutzerbasis effektiv, aber auf komplexeren Systemen mit komplexen Programmen und vielen Benutzern könnte er zu spezifischen Methoden führen, um zu bestimmen, ob eine Variable eine Zeichenfolge oder eine Zahl ist, sowie zu einer ineffizienten Speichernutzung. ...
Gemäß der zweiten Ausgabe der Geschichte der Programmiersprachen von Thomas Bergin und Richard Gibson nannte Ritchie diese modifizierte Sprache NB ("New B"). Es wurde auf dem Mainframe des Murray Hill Computing Center installiert, das den Benutzern über Bell Labs zur Verfügung gestellt wurde.
Als Thompson sich entschied, Unix in Java neu zu schreiben, begann er natürlich mit NB. Die ersten drei Versuche scheiterten und "wegen meiner Selbstsucht habe ich die Sprache dafür verantwortlich gemacht", erinnerte sich Thompson mit einem Grinsen an VCF.
Nach jedem Fehler fügte Ritchie NB Funktionen hinzu, die er und Ken brauchten. Er fügte einmal Strukturen hinzu - Variablen, die viele einzelne Werte auf kohärente oder "strukturierte" Weise speichern, wonach Thompson Unix in dieser neuen Sprache schreiben konnte. Ritchie und Thompson betrachteten die Hinzufügung von Strukturen, die nicht in B, SMALGOL, BCPL und CPL enthalten waren, als signifikant genug, um die Sprache umzubenennen, und B wurde zu C.
Leben unter dem C-Zeichen
Christopher Strachey 1955 mit Ferranti Mark 1 (auch bekannt als Manchester Electronic Computer).
C entkam Bell Labs auf die gleiche Weise wie Unix. Es hat dazu beigetragen, dass der PDP-11 schnell zu einem der erfolgreichsten Minicomputer auf dem Markt wurde, aber es war der Unix-Preis, der ihn am attraktivsten machte. Jedes Rechenzentrum mit einem PDP-11 konnte Unix für die Kosten für Medien und E-Mail installieren, und
C kam mit Unix. Die Präsenz von C an so vielen Standorten war laut Thompson der Hauptgrund für seinen Erfolg. In einem Brief schrieb er, dass "sie viele Leute abgeschlossen haben, die C kannten".
Ein weiterer Erfolgsschub für C war die Veröffentlichung von The C Programming Language im Jahr 1978 Dennis Ritchie und Brian Kernighan. Das kleine Buch mit 228 Seiten wurde selbst nach damaligen Maßstäben zu einer bemerkenswert einfachen und zugänglichen Arbeit.
Ein breites Wissen über die C-Syntax beeinflusste die Entwicklung vieler nachfolgender Sprachen, die C kaum oder gar nicht ähnelten. Skriptsprachen wie PHP und JavaScript enthalten Programmiernotationen, die Thompson ursprünglich entwickelt hatte, um B in den kleinen Speicherbedarf des PDP-7 zu integrieren. Dies sind beispielsweise die Inkrementierungsoperatoren "++" und "-". Wenn Sie nur mit 4.000 Wörtern arbeiten müssen, spart das Reduzieren von "x = x + 1" auf "x ++" ziemlich viel Platz.
Thompson hätte nie gedacht, dass C so weit verbreitet sein würde. "Es gab viele völlig verschiedene, sehr interessante und nützliche Sprachen", sagte Thompson. "Mein ästhetischer Sinn sagte mir, dass eine Sprache nicht alle Bedürfnisse im Universum abdecken kann."
Wie Unix war C ein Erfolg, der aus dem Scheitern entstand. In beiden Fällen nahmen Programmierer die besten Teile von Projekten, die zum Scheitern verurteilt waren, weil zu viel von ihnen verlangt wurde. Multics, aus dem Unix hervorging, wurde auf seinem Höhepunkt in nur etwa 80 Computern verwendet, und die CPL, die schließlich zur Schaffung von C führte, wurde nie abgeschlossen, und Cambridge-Forscher gaben sie 1967 auf.
Als Christopher Strachey die Programmierforschungsgruppe in Oxford gründete, sagte er: "Die Aufteilung der Arbeit in praktische und theoretische ist künstlich und schädlich."
Und obwohl die CPL praktische und theoretische Seiten kombinieren sollte, erwies sie sich bei der Umsetzung als zu theoretisch. Die CPL-Arbeitsgruppe hat nicht versucht, in der CPL zu programmieren.
Auch wenn Strachey in der CPL keine Synthese zwischen Theorie und Praxis erreichen konnte, war seine Haltung definitiv richtig. "C wurde geschrieben, um Unix zu schreiben", erinnert sich Thompson. Und "Unix wurde geschrieben, damit wir alle Programme schreiben können."
Werbung
Preiswerte Server für jede Aufgabe - das sind unsere epischen Server . Erstellen Sie Ihren eigenen Plan mit wenigen Klicks, maximale Konfiguration - 128 CPU-Kerne, 512 GB RAM, 4000 GB NVMe.