Clanintern Clanintern Clanintern

Forum

Öffentliche Foren
FORUM: Allgemeines THEMA: Compile from Scratch
AUTOR BEITRAG
Wheeljack

RANG Deckschrubber

#1 - 09.07 20:30

So eine Überlegung die mir ab und zu mal durch den Kopf geistert:
Mal angenommen, sämtlicher ausführbarer Code würde vom einen auf den anderen Tag verschwinden, aber das Wissen wäre noch da, als Quelltext. Allerdings wären sämtliche Computer auf einen Schlag nutzlos, da sie weder Betriebssystem noch BIOS mehr hätten. Wie stellt man aus dem ganzen Quelltext wieder lauffähige Programme her? Wo und wie fängt man da an? Ich meine, erstens gibt's keine laufenden Compiler mehr und kein Computer hat ein Betriebssystem, wo ein Compiler laufen könnte.
Aber irgendwie muss es ja mal angefangen haben, sonst wären wir nicht da wo wir heute wären (vor einem Computer grade auf CI surfend). Und die Industrie braucht Computer, um Computer herzustellen.

Bin gespannt auf Eure Antworten.

P.S.: Bevor es jemand andres tut, poste ich mal dieses Bild.
▪вιzzаrє▪

RANG Skill Captain

#2 - 09.07 20:35

es gibt halt verschiedenen ebenen... und eine ebene baut auf der anderen auf... die untereste arbeitet quasi direkt mit dem maschinencode...
NeDoH-*mit Wii*

RANG Deckschrubber

#3 - 09.07 20:35

Naja, auf unterster Ebene und dann Schrittweise.
Also bei Compiler läuft das halt so ab dass du die ersten in Maschinensprache schreiben müsstest. Und damit könntest du dann z.B. einen C-Compiler schreiben und kompilieren, und der könnte dann deine zukünftigen Programme kompilieren. Wobei es da eben noch Zwischenschritte geben wird.

OS: das gleiche Spiel, erstmal halt nur das nötigste in Maschinensprache, damit man starten kann und Dateien abspeichern kann (plus bisschen mehr, Speichermanagement usw.) Und wenn man das hat kann man mit dem Compiler oben schon größere Sachen anfangen.
*al!ve* - Vorbereitung aufs Urlaubssemester

RANG Master of Clanintern

#4 - 09.07 20:46

Zu dem Thema würde ich so zwei bis vier Grundlagenvorlesungen des klassischen Informatikstudiums oder Informatikvorlesungen des Elektrotechnikstudiums vorschlagen.

Fängt an bei Transistoren, Schritt zu grundlegender boolscher Algebra. AND, OR und NOT bzw NOR oder NAND in Hardware realisiert.
Dann bauen wir komplexere Schaltungen daraus, gibt so einige Verfahren, Mikroprozessoren zu basteln bzw sich diese zu überlegen.
Flipflops dürfen nicht fehlen, RAM-Speicher.
Irgend wann kommt dann der gute Von-Neumann und die Idee, Programme nicht zu verdrahten sondern mit in den Speicher zu schreiben.
Später folgen dann Grundlagen über Speicherverwaltung und Adressierung, damit wir ein Programm schreiben können, das andere ausführen/kontrollieren kann und die Illusion von gleichzeitig ablaufenden Programmen erschafft. Muss natürlich auch in Hardware verankert sein, der ganze Mist von Prozesswechsel und Speichermanagement, sonst wird das Ganze recht inperformant.

Den Compiler kann ich auch per Hand spielen. Hier Grundlagenvorlesungen aus dem Compilerbau in drei Sätzen zu rekapitulieren würde den Rahmen sprengen. Soviel sei verraten: Automatentheorie, Kellerautomat, Grammatik, tabellengetriebenes Verfahren, LALR1. So oder so ähnlich.
Nutellica|GedChickaWahwah

RANG Prophet of Clanintern

#5 - 10.07 03:14

solange es eh keine computer gibt, die das (noch nicht) Compilierte dann verarbeiten könnten, sollte sich diese frage nicht stellen
Wheeljack

RANG Deckschrubber

#6 - 10.07 14:41

Hmm, ich frag mal anders:
wie schnell könnte ein Haufen Experten, den ersten aktuellen PC wieder zum Laufen bringen?
Also die ersten logischen Bausteine zusammenlöten, Programmschaltungen aufbauen usw. bis der erste Bioschip programmiert werden kann.

Ist halt so ne Frage, die man sich stellt, wenn das Thema "Dem Compiler seinen eigenen Code vorsetzen" dran ist. Fand ich schon immer paradox.
SirLant

RANG Kloputzer

#7 - 10.07 18:48

Das hängt davon ab wie weit dein "es gibt plötzlich keine Computer mehr" geht.

Und wenn nur die Software weg ist, sind dann sämtliche Chips mit hardcodierter Logik noch vorhanden?
Wheeljack

RANG Deckschrubber

#8 - 11.07 18:03

Ok... um das abzugrenzen, ich sag mal alles inkl. programmierbare Bausteine ist weg. Hardcodierte Chips sind noch intakt. Ok?

----

Ich sollte es aufgeben, eine Diskussion loszutreten. Skeli kann das besser.
vaest´ark // patrick *ich bin hier nicht der depp*

RANG Master of Clanintern

#9 - 11.07 18:56

das wird nicht lange dauern. die grundlagen sind wahrlich zur genüge in gedruckter form vorhanden, die spezielleren sachen sind auch nicht so schwer zu finden.
man brauch im prinzip nur den gleichen weg noch einmal zu beschreiten, den man bis hierhin schon absolviert hat. also ab der z1, eventuell kann man sogar viele schritte überspringen. deswegen kann man das im zeitraffer abspulen.
und zu deinem programm-compiler-problem: früher hat das auch ohne compiler geklappt, da wurden kodierte lochkarten verwendet (das wusstest du bestimmt ). und einem compiler seinen eigenen quelltext zum kompilieren geben ist nicht so abwegig und paradox. du kannst sogar mit einem beliebigen basic-programm einen compiler für c# schreiben (verdammt hoher aufwand, wird aber funktionieren).
die halbleiterfabriken verwenden ja auch die "ältere" generation ihrer produzierten hardware um die "neuere" zu produzieren (vereinfacht und bildlich gesprochen).
du könntest sogar, geeignete software vorausgesetzt, der aktuellen rechnergeneration den auftrag erteilen, sich selbst weiterzuentwickeln. die ergebnisse wird man zwar kaum nachvollziehen können, aber egal.

zumal ich aber bezweifle, das der selbe "schrott" (x86-architektur) nochmal im consumer-bereich zu finden sein wird.
da würde die entwicklung imho zu anderen, skalierbareren, effizienteren, kleineren architekturen schwenken.
Morath

RANG Deckschrubber

#10 - 12.07 11:07

Man muss doch nur auf genau einer Prozessorarchitektur wieder einen Compiler direkt in Maschinencode eingeben und schon kann man über cross-compiles wieder alles erzeugen, was man will. Immer vorausgesetzt natürlich, die entsprechenden Quellcodes für die Crosscompiler liegen auch vor (aber das war ja in #1 so definiert).
Crush (Anti Däääh)

RANG Deckschrubber

#11 - 12.07 17:42

Ich würde folgendermaßen vorgehen:
-In Hex einen primitiven Texteditor und einen Assembler schreiben
-In Assembler mit dem Texteditor einen Interpreter für eine einfache Programmiersprache schreiben, die speziell auf Compilerbau ausgelegt ist
-In dieser Programmiersprache einen C Compiler schreiben
-Mit diesem GCC compilieren
-GCC bootstrappen
-Alle anderen Programme kompilieren
*al!ve* - Vorbereitung aufs Urlaubssemester

RANG Master of Clanintern

#12 - 13.07 00:03

quote:
du könntest sogar, geeignete software vorausgesetzt, der aktuellen rechnergeneration den auftrag erteilen, sich selbst weiterzuentwickeln. die ergebnisse wird man zwar kaum nachvollziehen können, aber egal.

Das wird man hoffentlich nie können. Stichwort technologische Singularität.


In de Grundlagen des Compilerbaus geht es um Zeichernersätzungen, die in bestimmter Reihenfolge ablaufen. Ich geh davon aus, dass die grundlegenden Ersätzungsregeln für C keine 20 A4-Seiten groß ist.

Wer sich in die Materie einlesen will findet sicher unter "Compilergenerator" so einiges. Wir haben damals in der Vorlesung Compilerbau vom Prof n Programm gekriegt, das hatte der in Ada geschrieben. Wir haben Mischcode aus EBNF und ADA geschrieben (EBNF mit Ada in Kommentaren), das Prog vom Prof hat aus EBNF anderen Ada-Code gemacht. Der von uns ins EBNF eingegliederte Ada-Code hat in Verbindung mit den von uns formulierten EBNF-Regeln dann nen Compiler gegeben, der mathematische Formulierungen in nen Assembler-Dialekt umgeformt hat, den wir dann mit nem Assembler-Compiler vom Prof geladen haben und asugeführt.
Blah blah blah ... Kurzfassung: Nen Compiler zu schreiben ist gar nicht so schwer. Man fängt unten an, erzeugt daraus "höherliegende" Compiler und hat irgend wann das, was wir heute haben.
Elohim

RANG Lord of Luck

#13 - 13.07 00:22

Eine viel interessantere Frage:

Ihr könntet dem obigen Szenario folgend ja auf Euer altes Wissen zurückgreifen. Würdet Ihr dieses Wissen nun anwenden, und - was relativ leicht fallen würde - erst einmal Windows (und andere heute vorhandene Betriebssysteme, Programme etc) neu programmieren, oder würdet Ihr darauf verzichten wollen, um mit dem Wissen ob der damals gemachten Fehler alle Programmstrukturen neu aufzusetzen, von Grund auf also alles neu zu designen?

Morath

RANG Deckschrubber

#14 - 13.07 09:31

"Würdet Ihr dieses Wissen nun anwenden, und - was relativ leicht fallen würde - erst einmal Windows [...] neu programmieren"

ARGH, alles nur DAS nicht!
vaest´ark // patrick *ich bin hier nicht der depp*

RANG Master of Clanintern

#15 - 13.07 11:26

na komm, linux würdest du hoffentlich SO auch nicht nochmal entwickeln wollen, oder?