Wie würden wir unseren Code kompilieren, wenn alle Binärdateien der Welt verschwinden würden und wir nur noch den Quellcode hätten? Zuerst denkst du vielleicht „Alles okay: Ich habe meinen Roslyn-Code hier“, aber warte! Es ist in C#! Sie sehen sich also einen älteren C#-Compiler an, der wiederum beispielsweise in C++ geschrieben ist, aber warten Sie ... und so weiter. Würden Sie sich am Ende einen ASM-Compiler löten?
Wie würden wir aktuelle Software neu erstellen, wenn wir die gesamte aktuelle Hardware und den gesamten Software-Quellcode, aber keine tatsächliche Software hätten? Würden wir den gleichen Weg wie zuvor gehen oder würden wir einige Abkürzungen nehmen und am Ende beispielsweise früher verwalteten Code haben? Würden wir nicht verwalteten Code vollständig überspringen und am Ende ein Singularity -ähnliches Betriebssystem haben? Würden wir unsere neuen Bootstrapper und Compiler so bauen, dass sie unseren vorhandenen (und wahrscheinlich, wenn wir die Dinge zum Laufen bringen, uralten Code) verwenden können, oder würden wir alles von Grund auf neu schreiben?
Der Prozess wird in Etappen ablaufen. Wir werden keinen Haufen Geeks sehen, die 4 Jahre lang in einem Raum zusammengepfercht sind, gefolgt von einem funktionierenden i7, der Linux bootet. Diese großen, komplizierten CPUs und Architekturen sind nur ein kleiner Teil der modernen Computerwelt. Es gibt auch Tausende und Abertausende von kleineren Chips, die viel einfacher aufzustehen sind.
Wir würden mit einem kleinen Chip beginnen, wie einem ATtiny. Es kann über einen seriellen SPI-Bus programmiert werden , der zu 100 % vom Master getaktet wird. Das bedeutet, dass Sie einen Satz von 4 Schaltern haben können, die von Menschenhand gesteuert werden, und wenn Sie sie in der richtigen Reihenfolge drehen, können Sie Anweisungen in den Speicher des ATtiny schieben.
Jetzt muss das erste Programm nicht viel sein. Das ist auch gut so, denn solche Schalter zu drehen ist schwierig. Die erste Anwendung wäre wahrscheinlich eine Texteditor-ähnliche Anwendung, mit der Sie eine Anwendung mit einfach zu verwendenden Schaltern schreiben können (dh 8 Schalter für ein Byte setzen, dann die "Bestätigen"-Taste drücken, um es im Programm zu speichern) und einige mehr grundlegende Lese-/Schreibfähigkeiten (suchen Sie nach Byte 200, ersetzen Sie es durch ein e8). Vor dem Ausschalten würde dies erweitert, um in den Flash-Speicher des ATtiny zu schreiben. Jetzt haben wir einen funktionierenden Computer (wenn auch einen kleinen). Wenn Sie es aus- und wieder einschalten, kann es die Texteditoranwendung neu laden.
Nun besteht das nächste Puzzlestück darin, damit andere Chips zu programmieren. Das ist einfach: Dieselbe SPI-Schnittstelle, die Sie zum Entwickeln der ersten App verwendet haben, verwenden Sie zum Erstellen von Apps in anderen. Sie könnten ein zweites Programm in den Flash-Speicher schreiben, das auf Befehl in diesen zweiten Chip gebrannt wird. Jetzt können wir unser Texteditorprogramm einfach duplizieren, sodass mehrere Entwickler parallel an den Herausforderungen arbeiten können.
Jetzt können wir damit einen größeren Chip wie einen ATmega programmieren. Eigentlich hätten wir mit dem ATmega anfangen können, weil es eine ähnliche Programmierbarkeit hat, aber ich hatte das Gefühl, dass die Geschichte ein klareres Gefühl hätte, wenn wir damit angefangen hätten, etwas zu programmieren, das zu klein ist, um sich in einem modernen Tool wie einem C++-Compiler zu halten. Unabhängig davon, sobald wir einen ausreichend großen Chip haben, können wir einen echten Assembler entwickeln. Vielleicht entstauben Sie einen dieser alten Nadeldrucker und geben Text an den parallelen Anschluss aus. Entstauben Sie eine alte PS/2-Tastatur und schließen Sie sie direkt an den ATmega an. Jetzt haben wir einen ausgewachsenen Assembler mit einem gewissen Maß an menschlichem Anstand.
Nun beginnt die Bootstrapping-Phase. Wir können diesen ATmega verwenden, um einige der größeren Chips wie den i7 zu booten, weil wir ihn verwenden können, um FLASH-Chips zu programmieren, wie diejenigen, mit denen das BIOS verbunden ist. Es ist nicht einfach, aber wir haben viele Ingenieure, die immer noch in diesen Schichten arbeiten müssen, also wird sich jemand genug merken, um das BIOS zum Laufen zu bringen. Damit ist es nicht unangemessen zu erwarten, dass funktionierende Tastaturen und Bildschirme funktionieren (kein Drucken von Code mehr auf Druckern, um ihn zu lesen). Auch auf Festplatten sollen wir wieder zugreifen können, damit wir dauerhafter Code schreiben können. Ich würde an dieser Stelle erwarten, dass jemand eine Bare-Bones-Version davon schreibt vi
(ja, es kann mehr Bare-Bones alsvi
) und einen Assembler, die beide auf einem rudimentären Dateisystem arbeiten. All dies liegt innerhalb der Möglichkeiten heutiger Entwickler. Tatsächlich würden einige von ihnen denken, dass es eigentlich ein bisschen Spaß macht (bis der Mtn. Dew aufgebraucht ist).
Nun zur eigentlichen Bootstrapping-Phase. Jemand wird einen Assembly-Treiber schreiben, um auf ein modernes Dateisystem wie EXT3 zuzugreifen. Es wird nicht schön sein, aber das reicht aus, um eine Kopie einer alten Version von C aus den frühen Bootstrapping-Tagen zu finden. C wurde gebootstrapped, indem ein sehr einfacher C-Compiler geschrieben wurde, der einige (aber bei weitem nicht alle) Befehle in der C-Sprache handhabte. Dieser einfache Compiler wurde dann verwendet, um eine fortgeschrittenere Version von C usw. zu entwickeln, wobei jedes Mal Funktionen hinzugefügt wurden, wenn sie immer einfacher zu schreiben waren.
Irgendwann würden wir genug C-Compiler schreiben, um GCC selbst zu kompilieren. Sobald wir einen GCC-Compiler kompiliert haben, werden die Bremsen gelöst. Innerhalb weniger Wochen hätten wir jede einzelne Linux-Anwendung einsatzbereit, einschließlich Linux selbst. Von dort aus könnten sich die anderen Betriebssysteme selbst verstärken.
How would we rebuild current software, if we had all the current hardware and all software source code, but no actual software?
. Sie haben bereits den GESAMTEN Quellcode für ALLE existierende Software. Sie müssen es nur kompilieren. Sobald Sie einen gcc-Compiler ausgeführt haben , was der letzte Punkt der Antwort ist, handelt es sich nur noch um eine Kettenreaktion beim Kompilieren . Ich denke, ein paar Wochen sollten ausreichen: PI think "a matter of weeks" is being rather on the optimistic side.
. Ich verstand, dass die nächste Größenordnung Jahre sein würden , da Wochen und Monate nahe genug sind, um als Äquivalente betrachtet zu werden. ^^UWir würden mit einigen der Leute telefonieren, die es beim ersten Mal gemacht haben.
Nein im Ernst. Wir haben noch viele Experten auf diesem Gebiet, die noch am Leben sind, und sie haben möglicherweise genug Wissen, um ein funktionierendes BIOS zu erstellen. Von dort aus können wir den Prozess viel schneller fortsetzen als beim ersten Mal: Wir konsultieren einfach die nächste Gruppe von Experten für das nächste bisschen Wissen, das wir verwenden, um die nächste Softwarestufe zu konstruieren.
Schließlich erreicht dieser Prozess die Experten von Microsoft und all der großen Computerfirmen, die die heute verwendeten Sprachen erstellen und pflegen, und sie drücken einfach F5, kompilieren den Quellcode der Sprache und liefern uns einen frischen neuen Satz von Binärdateien.
Das größere Problem ist hier die Umverteilung. Wenn alle Binärdateien verschwunden sind, müssen Sie entweder jeden Computer rekonstruieren oder alle einen neuen kaufen lassen. Und dann müssen Sie für einige der neuen Sprachen, die nicht vorinstalliert sind, Ihre Verteilungsserver aufrüsten, damit sie nicht abstürzen, wenn alle versuchen, gleichzeitig eine Kopie zu bekommen.
Heute werden wir keinen Computer mehr benutzen können - wenn alle Binärprogramme verschwunden sind -, da alle eine Firmware (zB das BIOS) zum Booten haben und diese Firmware in einem ROM (oft einem Flash-ROM) ist.
Die Zeit, in der das ursprüngliche Bootstrapping-Programm einfach (ohne die Hilfe eines anderen Computers) eingegeben werden konnte, ist lange vorbei. In den 1960er Jahren konnte man IBM7094 mit Schaltern booten!
Wenn Sie Ihre Hypothese auf "Alle Festplatten, die ich habe, sind gelöscht" ändern und Ihre Firmware Ihnen Schreibzugriff gibt (und wenn Sie alle erforderlichen Dokumentationen auf Papier haben!), könnten Sie Ihren Computer booten.
Übrigens, ich schätze, wenn wir alle freien Software-Binärdateien auf der Erde verlieren würden, hätten wir viel mehr Probleme, als wenn wir alle proprietären Software-Binärdateien verlieren würden (ich gehe davon aus, dass der Quellcode in beiden Fällen verfügbar bleibt).
Lesen Sie viel mehr über Bootstrapping , insbesondere über Bootstrapping - Compiler , zB wie wurde der erste Compiler geschrieben . Lesen Sie auch den Blog von J.Pitrat zum Bootstrapping künstlicher Intelligenz , der sich mit Bootstrapping-Problemen aus der Sicht einer starken KI befasst.
Siehe auch diese und jene Antwort auf eine sehr verwandte Frage. Sie könnten auch an Linux From Scratch oder Isaac Operating System (in seiner eigenen Sprache geschrieben, das auf dem Bare Metal läuft) oder sogar an MirageOS interessiert sein .
Ein konkretes Problem beim heutigen Bootstrapping eines ganzen Computers ist, dass es ziemlich komplex ist (insbesondere, aber nicht nur, wegen der technologischen Komplexität: Die Intel x86-64-Referenzhandbücher umfassen viele tausend Seiten, und x86 & PC sind sehr komplex, insbesondere weil aus historischen und Abwärtskompatibilitätsgründen), also wird es lange dauern (viele Jahre Arbeit) und es ist (leider) schwer, dafür bezahlt zu werden. Es gibt also ein soziales Problem. Mit anderer Hardware könnte es etwas einfacher sein (zB RISC-V , das nicht wirklich existiert oder viel weniger effizient ist).
Eine verwandte Frage ist, wie das Internet neu gestartet werden kann, wenn oder wann es abstürzen würde.
Eines frühen Morgens verschwinden alle Binärdateien der Welt. Jedes Stück kompilierten Codes ist weg; Die Daten sind noch da, die Codedateien sind noch intakt, aber jedes Stück kompilierten Codes ist verschwunden. Puh.
Das erste, woran jeder denkt, wird nicht sein, wie man es zurückbekommt, sondern wie man überlebt; Fly-by-Wire-Flugzeuge werden vom Himmel fallen, Telefone werden nicht funktionieren, das Internet wird weg sein, Autos werden nicht starten, Kraftwerke werden abgeschaltet. All diese Geräte und Systeme, ob groß oder klein, haben kleine Chips, die einst voller Firmware waren. Zugegeben, alles, was in den 1980er Jahren oder früher gebaut wurde, wird wahrscheinlich in Ordnung sein; Autos wurden größtenteils erst in den 1990er Jahren mit Bordcomputern ausgestattet.
Dennoch ist dies nicht nur eine technische oder Programmierkatastrophe. Es ist ein Ereignis im Ausmaß einer Apokalypse. Ein großer Teil der Welt wird ohne verlässliche Nahrung, Wasser oder Elektrizität sein; Die Kommunikation bricht komplett zusammen.
Der beste Ort wäre ein College oder eine Universität, da sie höchstwahrscheinlich über einen funktionierenden Lochkartenleser (und einen Generator) verfügen würden. Mit Lochkarten als anfängliche Schnittstelle konnten unsere unerschrockenen Programmierer sofort mit dem Schreiben von Code beginnen.
Natürlich sind diese alten Maschinen furchtbar langsam und riesige Stromfresser. Unsere Programmierer verwenden also die lochkartengesteuerten Systeme, um Mikrocontroller oder ihre schnelleren Cousins, Mikrocomputer , zu programmieren .
Diese winzigen Computer benötigen eine Art Schnittstelle; hoffentlich liegen da noch eine alte transistorgesteuerte Tastatur und ein paar alte CRTs herum. Moderne Tastaturen und LCD-Bildschirme sind auf Firmware angewiesen. Mit ein wenig Codegerangel haben unsere Programmierer einen Computer, eine Tastatur, einen Bildschirm und eine Möglichkeit, ihren Code zu speichern.
Darüber hinaus werden alle Geräte mit Firmware, die schnell neu geschrieben werden kann, erneut geflasht. Einige alte Hardware, wie alte CD-Laufwerke, hatten sehr wenig Firmware, konnten aber immer noch moderne Discs lesen.
Zurück zu bekommen, was verloren gegangen ist, wird viel, viel schwieriger sein. Fast alle moderne Hardware wird nichts als Müll sein; Fast alle Chips mit einer durchgebrannten Sicherung sind unbrauchbar und verwandeln Handys und Laptops gleichermaßen in Ziegel. Festplatten, obwohl die Daten noch vorhanden sind, haben keine Firmware, um diese Daten zu extrahieren.
Die beste Wahl sind Open-Source-Computer. Irgendjemand wird irgendwo einen nicht sicherheitsgesperrten Flash-Chip mit einem gespeicherten Code haben. Von dort aus kann der Open-Source-Rechner wieder aufgebaut werden, und die Programmierer können langsam damit beginnen, Software wiederherzustellen. Andernfalls hat jemand eine Sicherungskopie seines gesamten Codes auf einem billigen Flash-Laufwerk; Mit ein wenig Hardware-Hacking ist es möglich, diese Daten zu extrahieren, obwohl dies ein schwieriger Prozess sein wird.
Sobald Computer (wie klein sie auch sein mögen) betriebsbereit sind, wird das Leben ein wenig einfacher, aber die meisten modernen Geräte werden nutzlos sein. Selbst wenn das BIOS auf einem modernen Motherboard neu erstellt werden könnte, würde den Video-, Ethernet- und sogar Soundkarten ihre Firmware fehlen. Die Software würde auf den Stand der späten 1980er Jahre zurückgesetzt. Es würde allmählich zurückkehren, aber ich gehe davon aus, dass es länger dauern würde als beim ersten Mal. Was mit der Apokalypse und allem.
Eines der größeren Probleme ist nicht das Kompilieren des Quellcodes, weil Sie alles davon verlieren würden, alle Laufwerke sind binär gespeichert, so dass alles, was wir als aktuelle Technologie kennen, gelöscht würde. Und alles neu zu programmieren wäre eine große Aufgabe, wenn man bedenkt, dass jeder Prototyp oder jede Version weg wäre. Ich würde sogar eine Lebensmittelknappheit oder ähnliche Ereignisse erwarten, wenn man bedenkt, wie viele kleine Computer in den Dingen stecken, die wir so oft in unserem Leben verwenden, wie Autos, Stromnetzmanagement und Haushaltsgeräte.
Technisch gesehen ist Firmware "Hardware", also würde ich erwarten, dass es so bleibt. Ich nehme an, dass es bei „verschwindenden Binärdateien“ mehr um die zu entfernenden Informationen geht als um eine physische Katastrophe, die alle Informationsspeichergeräte getroffen hat, aber alles knapp verpasst hat, was nicht wie ein laufender Maschinencode aussah. Wenn tatsächlich Firmware übrig bliebe, dann hätten wir meiner Meinung nach einen guten Vorsprung. Wir sollten in der Lage sein, jedes System zu booten, das Firmware ausführen kann, und zumindest über ein primitives Betriebssystem und Textbearbeitungsfunktionen verfügen. Das interessante Problem ist, dass, wenn wir Quellcode haben, aber der größte Teil davon elektronisch ist, er für uns größtenteils nutzlos ist, bis wir die Systeme wiederherstellen können, die ihn lesen können.
Da so viel potenziell brauchbare Software herumliegt, wäre es am sinnvollsten, die Compiler zu reproduzieren, die die Software nachbauen könnten. Das bedeutet, dass die Gesellschaft höchstwahrscheinlich nicht versuchen würde, Programmiersprachen von Grund auf neu zu erfinden, bis wir die gerade verlorenen zurückerlangt hätten. Da wir die Nutzung des Internets und der digitalen Informationsspeicherung verloren haben, ist es unsere beste Wahl, auf die am besten dokumentierten Sprachen abzuzielen, für die wir Bücher haben. Ohne Zweifel wird ein C-Compiler das erste und wichtigste High-Level-Tool beim Neuaufbau sein. Sobald Sie das haben, können Sie sehr schnell Fortschritte machen. Sie können dann ganze Betriebssysteme, viele Softwaretools und Compiler für viele Sprachen neu erstellen. Es gibt einen Grund, warum diese 40 Jahre alte Sprache immer noch ganz oben auf der TIOBE-Liste steht. Es ist das „Englisch“ der Programmierwelt: umständlich, nervig,
Da es so viele C/C++-Experten auf der Welt gibt, sollte das Erstellen eines Compilers eigentlich nicht so schwer sein, sobald Sie ein System haben, das Text eingeben und Bytes auf der Festplatte speichern kann. Höchstwahrscheinlich würden ein paar Leute die "IDE" durch rohen Assembler-/Maschinencode verbessern und sie wahrscheinlich von Grund auf neu erfinden, nur um die Produktivität zu verbessern. Viele Teile eines minimalen Betriebssystems würden brutal erzwungen werden, nur um diesen ersten C-Compiler zum Laufen zu bringen. Aber ich bin mir ziemlich sicher, dass der erste Self-Hosting-Build des Compilers das moralische Äquivalent zum Starter eines riesigen Motors wäre, der endlich das Schwungrad anwirft, damit er sich selbst erhalten kann.
Tatsächlich würde dieser Prozess höchstwahrscheinlich an vielen Orten auf der ganzen Welt stattfinden. Es ist durchaus möglich, dass Russland oder Osteuropa den ersten funktionierenden C-Compiler "nach der Katastrophe" produziert, aufgrund der Anzahl von Hackern/Virenschreibern, die Low-Level-Code verstehen müssen. Obwohl es in China viele Hacker gibt, neigen sie dazu, auf höheren Ebenen in Systeme einzudringen. Ich wäre überrascht, wenn sie einen frühen C-Compiler von Grund auf neu erstellen würden (obwohl eine große Gruppe unternehmungslustiger Universitätsstudenten dies durch reine Willenskraft erreichen könnte). Die US-amerikanischen und westeuropäischen Hacker hätten den Vorteil, dass ihnen die meisten C-Bücher und Referenzhandbücher zur Verfügung stehen, und zwar in einer Sprache, die sie leicht verstehen.
Wenn jetzt auch die Firmware gezapped wird, wird es viel, viel schwieriger, ähnlich wie beim Umschalten von Schaltern, wie von anderen beschrieben. Das ist so deprimierend, dass ich es mir gar nicht vorstellen kann. Aber ich gehe davon aus, dass die Threads zusammengeführt werden, sobald Sie zu einer Basiskonsole (Tastatur, Monitor, persistenter Speicher ... ob Festplatte, Band, Flash usw.) gelangen.
Obwohl viele Sprachen selbsthostende Compiler haben, könnten die meisten Compiler in C von Grund auf neu erstellt werden, und die meisten Designer der ursprünglichen Sprache könnten bei diesen Bemühungen helfen. Ich denke, insgesamt würde der Neuaufbau viel schneller voranschreiten, als die Leute sich vorstellen könnten (von der einfachen Konsole zum selbsthostenden C-Compiler in 6 Monaten oder weniger). In fast allen Fällen würden die Leute wahrscheinlich entscheiden, dass es besser ist, das Verlorene einfach zu ersetzen und die Funktionalität wiederzuerlangen, als aus der Bahn zu laufen und Dinge neu zu gestalten.
Ein Redesign würde erfolgen, wenn Sie auch den Quellcode verlieren würden . Vielleicht werden Informationen in Büchern aufbewahrt, aber wenn alle elektronischen ausführbaren Dateien und Quellen verloren gingen, dann würden wir meiner Meinung nach eine bedeutende Neugestaltung und Abkürzung zu fortgeschritteneren Techniken sehen. Ich denke, C würde aufgrund seines Status als eine Art Lingua Franca immer noch von Grund auf neu aufgebaut werden. Und möglicherweise würden Java und ein paar andere wichtige Sprachen wiederbelebt (wenn auch offensichtlich von Reinraumimplementierungen). Andererseits wäre es viel schwieriger, Linux oder Windows oder OS X ohne Quellcode nur aus Büchern wiederherzustellen.
Interessanterweise konnten wir diese Gelegenheit nutzen, um viele nagende Fehler in den Sprachen, Tools und Betriebssystemen zu beseitigen. Vielleicht würden wir nicht genau C bekommen, sondern eine Art verbesserten C99, bei dem viel veralteter Cruft entfernt wurde. Einerseits wäre es für alle von Vorteil, einfach einen exakten C99-Compiler zu implementieren, damit Menschen aus aller Welt C-Quelltexte austauschen könnten, während die digitale Welt neu aufgebaut wird. Dies würde Innovationen entmutigen. Und aus diesem Grund würde Linux höchstwahrscheinlich das De-facto-Betriebssystem der neuen Ära werden, einfach weil viele Teile davon aus Büchern und Wissen wiederhergestellt werden könnten, die in bestimmten hochrangigen Zauberern eingeschlossen sind.
Wahrscheinlich würde proprietäre Software einfach nicht konkurrieren, bis der Großteil der Funktionalität ersetzt wäre. Der Wiederaufbau würde also höchstwahrscheinlich nach einem sehr offenen Modell erfolgen, es sei denn, einige Länder bemerken, dass sie viel schneller vorankommen als andere, und könnten einen Wettbewerbsvorteil erzielen, indem sie ihren Fortschritt vom Rest der Welt abschotten. Letztendlich würde der globale Handel die Länder dazu zwingen, internationale Standards neu zu etablieren, daher ist es schwer zu sagen, wie lange solche Mauern überleben könnten.
Obwohl viele gescheiterte Sprachen einfach nicht reproduziert werden würden (es sei denn von ihren liebevollen Schöpfern), würden die beliebtesten Sprachen sicherlich aufgrund des gespeicherten Wertes von Programmierern mit Kenntnissen in diesen Sprachen wiederbelebt werden. Das Gleiche gilt für Werkzeuge. Es würde jedoch lange dauern, etwas wie Microsoft Office oder Adobe Photoshop neu zu erstellen, ganz zu schweigen von Windows Server 2012. Diese Tools werden möglicherweise nie wieder existieren, und vielleicht würde es ein neues Wettrüsten geben, um jede Softwarekategorie von Grund auf neu zu erfinden.
Jede Technologie mit einem veröffentlichten Standard würde proprietäre Alternativen ohne öffentlichen Standard übertreffen, einfach weil die Standards intellektuelle Anstrengungen darstellen, die in Texten aufbewahrt werden, die nicht erneut erstellt werden müssen. Aber die schwächsten Standardtechnologien können durch bessere Alternativen verdrängt werden, einfach weil das Gewicht der Altlasten aufgehoben wurde und nicht mehr so einen großen Vorteil gegenüber schlechten alten Lösungen darstellt.
Wenn wir über Computersprachen und Computerprogrammierung im Allgemeinen sprechen, sprechen wir über Sprachen und ihre Abstraktionsebene. Früher hatten wir Patchpanels, mit denen Computer programmiert wurden. Die meisten Computer waren nicht wirklich programmierbar, sondern fest verdrahtet, um eine bestimmte Art von Operation auszuführen. Später bekamen wir programmierbare Computer.
Zuerst haben wir binäre Opcodes verwendet, um Code zu erzeugen. Sie müssten jeden Opcode des verwendeten Prozessors kennen und Ihr Programm Byte für Byte in den Computerspeicher eingeben. Später wurde eine Kurzform erfunden, die Wörter verwendet, um Operationen zu beschreiben. Es wurde mneomonische Form genannt. Das ist fast wie moderne Montage. Ein zweiter Schritt kam mit Makro-Assemblern, die es erlaubten, Makros zu verwenden. Das sind die Low-Level-Sprachen.
Eine Sprache auf mittlerem Niveau ist so etwas wie C und PL/I, sie sind keine sehr abstrakten Sprachen. Die Leute betrachten dies normalerweise als die äußerste Hackersprache - "Hey, ich verwende eine Sprache mit mittlerer Abstraktion, das sollte bedeuten, dass ich ein Über-Hacker bin" - Aber normalerweise sind Sprachen mit niedrigerer Abstraktion anfälliger für Fehler. C bietet grundlegende Funktionsaufrufe basierend auf Funktionsargumenten und anderen weniger primitiven Abstraktionen wie Arrays und Strukturen. Dies ist viel einfacher zu programmieren als reines Assemblieren und kann bei sorgfältiger Ausführung sogar zu portablem Code führen. Aber C fehlen Abstraktionen wie Objekte, Strings (formale Strings, keine hackishen zeigerbasierten Strings).
Eine Sprache mit einer höheren Abstraktionsebene ist Java oder C#. Leider werden beide Sprachen in eine virtuelle Maschine interpretiert. Dies bedeutet, dass die Codeausführung von einer abstrakten virtuellen Maschine im laufenden Betrieb in etwas übersetzt werden muss, das der Prozessor auf niedrigerer Ebene versteht. Wich ist langsam. Eine andere Sprache, die ein sehr hohes Abstraktionsniveau bietet, ist Python, Ruby usw. Daher denken die Leute, dass Hochsprachen interpretiert werden müssen. Object Pascal (der zurückgewiesene hässliche Sohn) ist so abstrakt wie Java, produziert aber wirklich kompilierten Code (bis hinab ins Binärformat).
Managed Code ist nicht die allerneueste Erfindung. Es impliziert einen enormen Preis in der Geschwindigkeit. Es ist eine Art Abstraktion, aber keine, die fehlerfrei ist.
Der Prozess der Erstellung des Ökosystems eines neuen Computersystems wird als Bootstraping bezeichnet. Wenn Sie einen neuen Computer erstellen, müssen Sie zwei Schritte ausführen: Erstellen Sie einen Compiler, der Code in dieser von der Maschine erwarteten Form ausgeben kann, und ein neues Betriebssystem (das normalerweise in dieser Sprache geschrieben wird).
Normalerweise beginnen Sie mit einem Cross-Compiler, der ein bestimmtes bereits vorhandenes System verwendet, um Code für dieses neue System zu generieren. Dann wird dieser Cross-Compiler verwendet, um ein grundlegendes Betriebssystem zu erstellen und den Compiler in eine Binärdatei zu kompilieren, die auf diesem neuen Computer ausgeführt wird.
Da reale Maschinen auf realen Komponenten basieren, arbeiten diese Maschinen auf einer niedrigen Abstraktionsebene. Sie können keine virtuellen Maschinen ohne reale Maschinen haben, denn eine virtuelle Maschine ist eigentlich ein Computerprogramm wie jedes andere auch. Das bedeutet, dass zwischen Ihrem Programmcode und der Hardware eine Lücke besteht, die gefüllt werden muss.
tl;dr
Zuerst müssen Sie ein Mneomonic-Assembler-Programm von Grund auf neu erstellen (unter Verwendung Ihres Wissens über die Maschinen), dann einen Makro-Assembler und dann einen echten Compiler (normalerweise für die Sprache C). Von da an können Sie alles andere kompilieren.
Wie würden wir unseren Code kompilieren, wenn alle Binärdateien der Welt verschwinden [...]
Lassen Sie jemanden von der Internationalen Raumstation eine Sojus-TMA verwenden, um mit einem noch funktionierenden Laptop mit allen verfügbaren Compilern herunterzukommen. (Hey, sie sind technisch nicht in der Welt ...)
Finden Sie ein Auto von vor 1986 und fahren Sie zum Computermuseum. Starten Sie die Altair-, Imsai- oder Digital Group-Box und starten Sie sie normal: Schalten Sie einen Bootstrap-Loader ein .
Umschalten bedeutet, eine Speicheradresse auf den 16 Adressschaltern einzustellen, dann einen Datenwert auf den 8 Datenschaltern einzustellen und "WRITE" zu drücken, dann automatisch zum nächsten Speicherplatz zu wechseln, Spülen und Waschen zu wiederholen.
Ein Bootstrap-Loader ist ein extrem kurzes ~100-Byte-Programm, das Daten von einem anderen E/A-Gerät wie einem Lochstreifenleser eingeben kann.
Verwenden Sie den Lochstreifenleser, um Ihr Programm einzugeben, oder hey - hier ist eine Idee, wie wäre es mit einem Betriebssystem . Sie wissen, wie Apple Monitor (2048 Bytes), der eine Menge Code enthielt, um ein TTY auf Apples internem Display und Tastatur zu emulieren, nicht erforderlich, verwenden Sie einfach ein physisches TTY oder VT100.
Und jetzt machen wir Mittagspause .
Ein paar hundert Bytes im Betriebssystem lehren es, eine Kassette zu lesen/beschreiben. Ein paar tausend weitere bringen ihm bei, Festplatten zu lesen/schreiben. Ich spekuliere nicht, so funktionierten sie.
Unterdessen laufen parallele Bemühungen weiter
Speichern des Bootstrap-Loaders irgendwie im ROM, um Fingerschwielen zu reduzieren
ein ursprüngliches Plattendateisystem
ein einfacher Texteditor (hmm, funktionieren VT100s noch?)
ein Assembler (Compiler für Assemblersprache, also können wir LDA #INPUT_MODE
statt A9 03
. sagen).
Und wir essen besser zu Abend, bevor alle Restaurants schließen.
An diesem Punkt verwenden wir die Befehlszeile genauso wie jetzt, außer dass wir anstelle eines Terminal/PuTTY-Fensters ein tatsächliches VT100 verwenden. Wir werden kein haben ls -R
, weil wir noch kein rekursives Dateisystem haben, aber kleine Schritte Ellie.
Apropos kleine Schritte, wir fangen an, Hochsprachen zu schreiben und übergreifend zu entwickeln; dh verwenden Sie das Imsai, um 80386 zu kompilieren, um den Compaq 386 hochzufahren (wohlgemerkt, Ihr allererster x86-Code wäre ein nativer 32-Bit-Code und hätte kein Konzept der alten 64k/1MB-RAM-Barrieren), und verwenden Sie das dann dazu Cross-Compile für den PowerMac G3 usw.
Das Problem ist, dass diese Bemühungen unabhängig voneinander an jedem einzelnen Standort durchgeführt werden, an dem eine funktionierende Altair/Imsai/Digital Group-Maschine existiert. Jetzt besteht die Herausforderung darin, die Bemühungen zu koordinieren, wenn die Telefone ausgefallen sind. Wenn die Telefone funktionierten, würde jedes museale 300-Baud-Modem die Crews zum Reden bringen und Code teilen.
Und die Telefongesellschaft ist nicht untätig; sie versuchen herauszufinden, wie sie etwas auf die Beine stellen können.
Ungefähr einen Tag, nachdem die Telekommunikation eingestellt wurde, wird jemand BBS-Software (neu) geschrieben haben, vorausgesetzt, er hat keine alte Kopie des BBS-Quellcodes im BYTE-Magazin gefunden. Jetzt machen wir dasselbe wie hier. Das erhöht die Geschwindigkeit des Wiederaufbaus ballistisch – zumal jede Nation der Welt ihn als nationale strategische Priorität identifiziert hat.
Leider haben viele Komponenten heutzutage, wie USB-Fobs, "Firmware", die auf einer niedrigeren Ebene des Systems läuft, und haben nicht wirklich eine "harte" Hintertür wie die Imsai-Frontplatte, um einen Bootstrap-Loader zwangsweise zu laden. Wenn diese Firmware weg ist, müsste jede Maschine gehackt oder verschrottet werden. Das wird jedoch kein Problem sein, bis wir in die 2000er-Hardware einsteigen, so dass Pentium und Mac Quadra 800 wahrscheinlich immer noch gut laufen werden. Und mit denen können wir die anderen umgestalten/ersetzen.
Es stimmt, dass ein Quadra 800 keine Frontplatte mit Schaltern hat. Es hat jedoch Spuren auf seiner Platine, und Sie müssten etwas Hardware-Hacking durchführen, um einen Bootstrap-Loader hineinzubekommen, oder einfach lernen, EPROMs zu brennen.
Da die Designprobleme sehr gut definiert und gut verstanden sind, bleibt nur Code-Slinging. Wir müssen das Rad nicht neu erfinden, wir alle wissen, wie Räder aussehen, wir müssen nur eines schnitzen.
Denken Sie daran, dass fast jeder existierende Code von jemandem verstanden wird, der lebt, und der ihn, wenn nötig, umschreiben könnte. Besser.
Es würde uns (heh) das Design unserer Computersysteme von Grund auf neu starten lassen, anstatt ständig alte Legacy-Infrastrukturen mitzuschleppen, die alles kompliziert machen. Der Code würde teilweise gestrafft und vereinheitlicht, weil wir die Welt wieder zum Laufen bringen müssen und es keine Zeit gibt, eine Reihe von Legacy-Möglichkeiten zu unterstützen, um dasselbe zu tun. DOSbox weg . Fenster weg . Blitz weg . HTML/CSS/AJAX Morast gestrafft . Etc. etc. Die Regierung würde aufgrund des nationalen Notstands alle Patentfragen zertrampeln.
Haben Sie sich jemals gewünscht, Sie könnten sich einfach einen Monat Zeit nehmen und all Ihren alten Spaghetti-Code und Ihre veralteten Standards von Grund auf neu schreiben? Jetzt kannst du.
Sobald wir einen funktionierenden C89- Compiler haben, ist das Problem noch lange nicht vorbei: Viele Software kann nicht ohne die Glib kompiliert werden, die gcc erfordert, was auch ein C++-Compiler ist, der C++-Bibliotheken benötigt.
Um die meiste Software zu kompilieren, benötigen Sie also einen C++-Compiler, und dazu benötigen Sie einen C++-Compiler.
Es wird viel Zeit brauchen, um es zu erreichen. Und das könnte genug Zeit sein, um C89-Software populär zu machen, um neue Software zu haben, die von Grund auf neu geschrieben – oder konvertiert – in C89 wird.
Leichte Programmiersprachen wie lua
diese, die nur C89 sind, würden die anderen übernehmen.
g++-4.3
zum Erstellen und Kompilieren von g++-4.6
; Verwenden Sie das g++-4.6
zum Kompilieren g++-4.9
, und verwenden Sie es g++-5
dann zum Kompilieren g++-6
. AFAIK, der Übergang in GCC-Interna von C zu C++ wurde mit einem solchen iterativen Prozess im Hinterkopf gedacht.
Jonsharpe
Rytis I
Scott Whitlock
Rytis I
Benutzer
Benutzer
Travis Christian
Murphy
xDaizu
Durandal
Wald