Hi,
es gibt ja Assemblerprogramme und C-Programme oder auch welche aus
Fortran, Kobol, Pascal, Basic usw.
Dann gibt es ja Compiler. Sind Compiler selbst in Assembler geschrieben
oder schreibt man die gegenseitig - z.B. einen C-Compiler mit Fortran
oder so?
Man schreibt sogar C Compiler in C, durch bootstrapping, aber vor allem
verwendet man vorgefertigte Parser und Optimizer die man nur noch mit
der gewünschten Syntax und Befehlsoutput füttert und die damit den
Compiler bilden.
Aber klar, der allererste Compiler wurde in Assembler geschrieben, der
letzte in Assembler war eohl Turbo Pascal für CP/M.
Anfaenger schrieb:> Dann gibt es ja Compiler. Sind Compiler selbst in Assembler geschrieben> oder schreibt man die gegenseitig - z.B. einen C-Compiler mit Fortran> oder so?
C Compiler werden in C geschrieben und mit C Compilern übersetzt.
Ein Problem gab es nur beim ersten C Compiler. Der war nicht in C
geschrieben, sondern in NB, weil Ritche mit B nicht recht glücklich war.
Aber der Compiler für NB war in B geschrieben. B wiederum war in B
geschrieben.
MaWin schrieb:> Man schreibt sogar C Compiler in C, durch bootstrapping,
cool, danke fuer die schnelle Antwort. Da hab ich gleich ein paar Dinge,
die ich mal lernen kann - bootstrapping hab ich noch nie gehoert, klingt
aber total spannend :-)
Stimmt es auch, dass z.B. Python selber in C/C++ auch geschrieben wurde,
da das ja eine Interpretersprache ist?
Der grösste Teil von CPython ist in Python selbst implementiert, aber
Kernfunktionalität wie der Opcode Dispatcher und Code, der direkt auf
nativen Code zugreift, ist in C implementiert. Allerdings gibt es auch
reine Python-Implementierungen wie PyPy.
A. K. schrieb:> C Compiler werden in C geschrieben und mit C Compilern übersetzt.>> Ein Problem gab es nur beim ersten C Compiler. Der war nicht in C> geschrieben, sondern in NB, weil Ritche mit B nicht recht glücklich war.> Aber der Compiler für NB war in B geschrieben. B wiederum war in B> geschrieben.
Und Ken Thompson hat in den ersten C Compiler seinen Hack eingebaut, der
sich bis heute weiterverbreitet hat.
http://wiki.c2.com/?TheKenThompsonHack
Thomas W. schrieb:> Und Ken Thompson hat in den ersten C Compiler seinen Hack eingebaut, der> sich bis heute weiterverbreitet hat.>> http://wiki.c2.com/?TheKenThompsonHack
Quatsch Hack, alles nur ein Witz:
" Brian und ich experimentierten zu diesem Zeitpunkt mit einer frühen
Pascal-Version von Professor Niklaus Wirth vom ETH-Laboratorium in der
Schweiz und waren beeindruckt von seiner Einfachheit und Mächtigkeit.
Dennis hatte gerade "Der Herr der Klinge" gelesen, eine spöttische
Parodie auf Tolkins große Trilogie "Der Herr der Ringe". Im Übermut
beschlossen wir, Parodien zur Multics-Umgebung und zu Pascal zu
verfassen"
nach:
http://schreier.free.fr/pages/texte/witz/unix_c.html
Gefühlt, versucht jede Programmiersprache, einen Compiler in der eigenen
Sprache zu verfassen. Ist ja vielleicht auch Logisch, wenn Ich mich für
$Programmiersprache interessiere, glaube ich das die irgendwas besser
kann als andere, dann möchte man nicht mit einer anderen Sprache
arbeiten müssen um die Eigene noch besser zu machen.
Der erste Compiler ist in Ermangelung eines Compilers, in einer anderen
Sprache verfasst.
Dieser kann evtl. aber auch nur eine Miniversion der neuen Sprache
unterstützen.
Ausreichend, um einen Compiler zu bauen.
imonbln schrieb:> Gefühlt, versucht jede Programmiersprache, einen Compiler in der eigenen> Sprache zu verfassen.
Bei vorwiegend interpretierten Sprachen ist das relativ selten.
> Ist ja vielleicht auch Logisch, wenn Ich mich für> $Programmiersprache interessiere, glaube ich das die irgendwas besser> kann als andere, dann möchte man nicht mit einer anderen Sprache> arbeiten müssen um die Eigene noch besser zu machen.
Nicht alle Programmiersprachen addressieren ein Aufgabensprektrum, das
sie für den Bau von Compilern prädestiniert.
imonbln schrieb:> Gefühlt, versucht jede Programmiersprache, einen Compiler in der eigenen> Sprache zu verfassen. Ist ja vielleicht auch Logisch, wenn Ich mich für> $Programmiersprache interessiere, glaube ich das die irgendwas besser> kann als andere, dann möchte man nicht mit einer anderen Sprache> arbeiten müssen um die Eigene noch besser zu machen.
Wie im Nachbarthread bereits besprochen, gibt es dafür verschiedene
Gründe: Wie auch von dir bereits angeführt, ist es in erster Linie
natürlich sinnvoll, wenn ich schon eine neue Sprache erfinde, diese auch
zu nutzen (immerhin halte ich sie ja für besser als die existierenden,
also warum sollte ich eine schlechtere Sprache verwenden?).
Zudem ist so ein Compiler natürlich eine nette Demoanwendung, dass die
neue Sprache offensichtlich funktioniert. Aufgrund der relativ hohen
Komplexität eines Compilers lässt sich da gleich gut zeigen, dass die
ganzen tollen Konzepte die man sich ausgedacht hat, auch funktionieren.
Man merkt auch selbst gleich, wenn irgendwas in der Praxis doch nicht so
toll funktioniert wie man es sich vorgestellt hat, testet also die
Sprache gleich mit.
Und es zeigt halt auch, dass man seiner eigenen Sprache offenbar genug
vertraut, um damit vergleichsweise komplexe Software zu schreiben. Wenn
es in einer Sprache hingegen nur ein "Hello World" und irgendwelche
0815-Apps gibt, woher soll ich dann Wissen, dass sie auch die Werkzeuge
bietet, um aufwendige Programme performant zu bauen?
A. K. schrieb:> Bei vorwiegend interpretierten Sprachen ist das relativ selten.
Gegenbeispiele: TypeScript, Python.
vn n. schrieb:> Und es zeigt halt auch, dass man seiner eigenen Sprache offenbar genug> vertraut, um damit vergleichsweise komplexe Software zu schreiben.
Würdest du es für sinnvoll erachten, einen Labview Compiler in Labview
zu schreiben? Oder einen Prolog Compiler in Prolog, einen APL Compiler
in APL, ...?
Was wäre damit bewiesen, wenn man es schafft, eine Sprache für eine
Aufgabe einzusetzen, für die sie nicht geschaffen wurde? Telefonzellen
wurden fürs Telefonieren geschaffen, nicht um 18 Leute reinzuquetschen.
A. K. schrieb:> vn n. schrieb:>> Und es zeigt halt auch, dass man seiner eigenen Sprache offenbar genug>> vertraut, um damit vergleichsweise komplexe Software zu schreiben.>> Würdest du es für sinnvoll erachten, einen Labview Compiler in Labview> zu schreiben? Oder einen Prolog Compiler in Prolog, einen APL Compiler> in APL, ...?>> Was wäre damit bewiesen, wenn man es schafft, eine Sprache für eine> Aufgabe einzusetzen, für die sie nicht geschaffen wurde? Telefonzellen> wurden fürs Telefonieren geschaffen, nicht um 18 Leute reinzuquetschen.
Ich bin davon ausgegangen, dass es selbstverstänlich ist, dass sich das
nur auf Sprachen bezieht, wo dies sinnvoll ist.
Leider stelle ich gerade fest, dass man diese geistige Leistung nicht
von jedem erwarten kann.
vn n. schrieb:> Wie auch von dir bereits angeführt, ist es in erster Linie> natürlich sinnvoll, wenn ich schon eine neue Sprache erfinde, diese auch> zu nutzen (immerhin halte ich sie ja für besser als die existierenden,> also warum sollte ich eine schlechtere Sprache verwenden?).
Nur wieso sollte es auch zwingend notwendig sein, sie zum Bau eines
Compilers zu nutzen? Ganz besonders wenn die Endanwendung der Sprache
rein gar nichts damit zu tun hat, z.B. eine Sprache, die für mobile
GUI-Applikationen gedacht ist.
Dirk B. schrieb:> A. K. schrieb:>> Bei vorwiegend interpretierten Sprachen ist das relativ selten.>> Das sind Interpreter. Es geht aber um Compiler.
Für diverse traditionell interpretierte Sprachen gibt es auch Compiler.
Ein paar Sprachen hatte ich genannt. Labview wiederum ist nicht
interpretiert.
A. K. schrieb:> Dieser Thread-Zweig bezog sich auf "jede Programmiersprache", nicht jede> geeignete. Viele Leute nehmen mangels Kontakt nur die übliche Sprachen> der C- und Pascal-Familien wahr (oder merken es nicht).
Außerdem wurde ja explizit der Nachbarthread über Swift angesprochen,
und dort haben ein paar C++ Fanboys Swift genau dafür kritisiert.
Anfaenger schrieb:> MaWin schrieb:>> Man schreibt sogar C Compiler in C, durch bootstrapping,>> cool, danke fuer die schnelle Antwort. Da hab ich gleich ein paar Dinge,> die ich mal lernen kann - bootstrapping hab ich noch nie gehoert, klingt> aber total spannend :-)
Da wird erstmal eine relativ einfache Version des Compilers gebaut, die
reicht, um den Compiler selbst wieder komplett zu übersetzen, was dann
auch gemacht wird. So macht es GCC. Der ist dann also mit sich selbst
gebaut. Für den ersten Step braucht man aber natürlich trotzdem erstmal
einen C-Compiler.
> Stimmt es auch, dass z.B. Python selber in C/C++ auch geschrieben wurde,> da das ja eine Interpretersprache ist?
Das originale Python ist in C geschrieben. Es gibt aber auch
Python-Implementierungen, die in anderen Sprachen geschrieben sind, z.B.
IronPython oder Jython.
A. K. schrieb:> imonbln schrieb:>> Gefühlt, versucht jede Programmiersprache, einen Compiler in der eigenen>> Sprache zu verfassen.>> Bei vorwiegend interpretierten Sprachen ist das relativ selten.
Macht ja auch wenig Sinn, in einem Interpreter nochmal einen Interpreter
für die selbe Sprache laufen zu lassen.
Ursel schrieb:> Nur wieso sollte es auch zwingend notwendig sein, sie zum Bau eines> Compilers zu nutzen? Ganz besonders wenn die Endanwendung der Sprache> rein gar nichts damit zu tun hat, z.B. eine Sprache, die für mobile> GUI-Applikationen gedacht ist.
Ich zitiere mich mal selbst:
vn n. schrieb:> Ich bin davon ausgegangen, dass es selbstverstänlich ist, dass sich das> nur auf Sprachen bezieht, wo dies sinnvoll ist.> Leider stelle ich gerade fest, dass man diese geistige Leistung nicht> von jedem erwarten kann.
Der TS bezieht sich im Startposting ja schon explizit auf Sprachen,
deren Compiler in der Zielsprache verfasst ist. Da frage ich mich ja
schon, wie man da nun irgendwelche GUI-Sprachen oder Labview ins Spiel
bringen kann...
Ursel schrieb:> Außerdem wurde ja explizit der Nachbarthread über Swift angesprochen,> und dort haben ein paar C++ Fanboys Swift genau dafür kritisiert.
Interessant, was einen nun schon alles zu einem Fanboy macht.
vn n. schrieb:> Der TS bezieht sich im Startposting ja schon explizit auf Sprachen,> deren Compiler in der Zielsprache verfasst ist.
Der von dir erwähnte Nachbarthread allerdings nicht. Oder habe ich den
verwechselt?
vn n. schrieb:> Interessant, was einen nun schon alles zu einem Fanboy macht.
Scheinargumente zu erfinden ist der Klassiker.
Ursel schrieb:> Der von dir erwähnte Nachbarthread allerdings nicht. Oder habe ich den> verwechselt?
Wir sind hier aber nicht im Nachbarthread. Vielleicht ist dir das
entgangen.
Ursel schrieb:> vn n. schrieb:>> Interessant, was einen nun schon alles zu einem Fanboy macht.>> Scheinargumente zu erfinden ist der Klassiker.
Man ist also C++-Fanboy, weil man Swift kritiert.
Kling absolut logisch.
Anfaenger schrieb:> Dann gibt es ja Compiler. Sind Compiler selbst in Assembler geschrieben> oder schreibt man die gegenseitig - z.B. einen C-Compiler mit Fortran> oder so?
Compiler übersetzen eine Syntax in Befehle. Das können Assembler-Befehle
für eine M(CPU) sein oder auch andere Befehle. Ich habe mal einen
Compiler geschrieben, welcher Pseudo-Code in Plotter-Befehle zur
Erzeugung von Flussdiagrammen erzeugt hat (lange her).
Ein Compiler kann in jeder möglichen Programmiersprache geschrieben
werden (in meinem Fall war es PL/1).
Anfaenger schrieb:> es gibt ja Assemblerprogramme und C-Programme oder auch welche aus> Fortran, Kobol, Pascal, Basic usw.>> Dann gibt es ja Compiler. Sind Compiler selbst in Assembler geschrieben> oder schreibt man die gegenseitig - z.B. einen C-Compiler mit Fortran> oder so?
Kommt auf die Situation an.
Die Wurzel von allem ist natürlich der allererste Assembler. Der wurde
nicht in irgendeiner Sprache programmiert, sondern einfach so in
Maschinencode umgesetzt. Keine Ahnung, ob das direkt in Hardware
geschehen ist oder ob dabei schon irgendwelche Hilfsprogramme involviert
waren, die etwa Lochkarten lesen und als Binary des Assemblercodes
speichern konnten (vermutlich war es aber so).
Alles, was danach kam, basiert direkt oder indirekt auf diesem
allerersten Assembler. Möglich (sogar wahrscheinlich) ist allerdings
auch, dass die Geschichte der Programmiersprachen ein Wald ist, dieser
fundamentale Schöpfungsakt also mehrmals stattfand.
Wie auch immer: alles danach basiert auf dem/den ersten Assembler(n).
Das schließt allerdings nicht aus, dass es verschlungene Wege in der
weiteren Entwicklung gab. Ich selber habe beispielsweise einen
6502-Assembler in Atari-BASIC geschrieben, weil mir die damals
verfügbaren Assembler nicht zusagten. Und das erste, was ich dann mit
dem funktionierenden Assembler tat, war erneut denselben zu schreiben,
nur halt in Assembler. Und dann wiederum ein neues BASIC für meinen
Atari800XL...
So ungefähr sind alle Entwickler von Programmiersprachen gestrickt, seit
Anbeginn der Zeit. Man benutzt, was halt gerade verfügbar ist, um die
erste Inkarnation des Compilers/Assemblers der neuen Sprache zu
schreiben. Und dann ist oft der erste Test für die Tauglichkeit der
Implementierung, damit eine funktionierende Version dessen zu schreiben,
womit es selber übersetzt wurde, was sich daran zeigt, das wieder ein
funktionierender Assembler/Compiler rauskommt...
Rolf M.
>Da wird erstmal eine relativ einfache Version des Compilers gebaut, die>reicht, um den Compiler selbst wieder komplett zu übersetzen, was dann>auch gemacht wird. So macht es GCC. Der ist dann also mit sich selbst>gebaut. Für den ersten Step braucht man aber natürlich trotzdem erstmal>einen C-Compiler
Es gibt übrigens eine interessante Analogie: Werkzeugmaschinen werden
mit Hilfe von Werkzeugmaschinen gemacht.
Über die Jahrhunderte findet aber eine Evolution statt. Mit einfachen
Werkzeugmaschinen baut man komplexere.
Um das anschaulich zu machen, empfehle ich ein Besuch im Deutschen
Museum in München. Dort sind unten alte Fabrikräume mit
Werkzeugmaschinen mit Riemenantrieb gebaut. Da sieht man schön, wie sich
die Maschinen im Laufe der Zeit entwickelt haben.
Käme die Menschheit in die Situation, dass alle Maschinen weg sind und
von Null angefangen werden müsste, wäre das echt ein langer Weg (
ungeachtet des gesammelten Know-Hows ).
Das Ziel des RepRap ist übrigens RepRaps herzustellen.
chris schrieb:> Es gibt übrigens eine interessante Analogie: Werkzeugmaschinen werden> mit Hilfe von Werkzeugmaschinen gemacht.
Nur ein kleiner Teil der Werkzeugmaschinen kann man mit
Werkzeugmaschinen bauen.
Das ist so als würdest du versuchen, einen Compiler zu bauen - ohne
Computer.
chris schrieb:> Über die Jahrhunderte findet aber eine Evolution statt. Mit einfachen> Werkzeugmaschinen baut man komplexere.
Der Vergleich hinkt. Software <> Hardware.
c-hater schrieb:> Die Wurzel von allem ist natürlich der allererste Assembler. Der wurde> nicht in irgendeiner Sprache programmiert, sondern einfach so in> Maschinencode umgesetzt.
Und wie genau? Einfach so ... geht ja wohl nicht - oder?
Hugo H. schrieb:> c-hater schrieb:>> Die Wurzel von allem ist natürlich der allererste Assembler. Der wurde>> nicht in irgendeiner Sprache programmiert, sondern einfach so in>> Maschinencode umgesetzt.>> Und wie genau? Einfach so ... geht ja wohl nicht - oder?
Schalter (zur Eingabe der Binärwerte) oder Lochstreifen bzw. -karten.
Ursel schrieb:> Nur ein kleiner Teil der Werkzeugmaschinen kann man mit> Werkzeugmaschinen bauen.
Womit sonst? Schon mal bei einem Maschinenbauer rein geschaut? -
offensichtlich nicht.
Zeno schrieb:> Womit sonst? Schon mal bei einem Maschinenbauer rein geschaut? -> offensichtlich nicht.
Dann zeig mal, wie du die Chips der Steuerungselektronik mit einer
Werkzeugmaschine herstellen kannst.
c-hater schrieb:> Die Wurzel von allem ist natürlich der allererste Assembler. Der wurde> nicht in irgendeiner Sprache programmiert, sondern einfach so in> Maschinencode umgesetzt. Keine Ahnung, ob das direkt in Hardware> geschehen ist oder ob dabei schon irgendwelche Hilfsprogramme involviert> waren, die etwa Lochkarten lesen und als Binary des Assemblercodes> speichern konnten (vermutlich war es aber so).>> Alles, was danach kam, basiert direkt oder indirekt auf diesem> allerersten Assembler. Möglich (sogar wahrscheinlich) ist allerdings> auch, dass die Geschichte der Programmiersprachen ein Wald ist, dieser> fundamentale Schöpfungsakt also mehrmals stattfand.
Keine Ahnung, was Du mit Assembler meinst, aber Assembler (sprache) ist
auch nur eine Programmiersprache von vielen, und sicher kein Ursprung.
Verbreitet, ja, alt, ja, Low Level, ja. Aber so individuell wie der
Prozessor..
@Ursel:
Jetzt krieg dich mal wieder ein, so dass der Thread wieder zu seinem
ursprünglichen Thema zurückfinden kann.
Chris hat oben nichts weiter geschrieben als:
chris schrieb:> Es gibt übrigens eine interessante Analogie: Werkzeugmaschinen werden> mit Hilfe von Werkzeugmaschinen gemacht.> Über die Jahrhunderte findet aber eine Evolution statt. Mit einfachen> Werkzeugmaschinen baut man komplexere.
Er hat überhaupt nicht behauptet, dass man ausschließlich eine
Werkzeugmaschine braucht, um eine neue herzustellen. Das hast du ihm
(völlig sinnloserweise) in den Mund gelegt.
Ich finde den Vergleich mit den Werkzeugmaschinen sehr treffend, um
damit das Bootstrapping zu erklären. Lies dir einfach noch einmal seinen
Beitrag durch, vielleicht wirst du es dann verstehen.
Übrigens ist auch im Compilerbau ein bereits bestehender Compiler oder
Assembler alleine nicht hinreichend, um damit einen neuen Compiler zu
kreieren. Man braucht dazu mindestens noch einen Lochstreifen- oder
Lochkartenstanzer oder einen Texteditor, um den Quelltext einzugeben.
PS: Die Feststellung im Nachbarthread, dass Swift nicht self-hosted ist,
stammt überigens nicht von Dr. Sommer, sondern von mir. Entgegen deiner
Behauptung habe ich diese Tatsache auch nicht als Nachteil hingestellt
(das habe ich sogar explizit angemerkt), sondern mich nur etwas
verwundert darüber geäußert, da Swift sehr wohl geeignet wäre, damit
einen Compiler zu schreiben. Auch sein Vorgänger, Objective-C wäre dafür
ein guter Kandidat gewesen. Stattdessen wurde bei Apple entschieden, C++
zu verwenden.
Diese Tatsache hat nun zur Folge, dass ich urplötzlich von einem
C++-Skeptiker zu einem C++-Fanboy mutiert bin. Ja, so schnell kann es
gehen ;-)
Ursel schrieb im Beitrag #5992758:
> Der Thread wurde nur gesprengt, weil sich hier Leute von meiner Meinung> persönlich angegriffen fühlen.
Ist die Beschimpfung als Fanyboy aus deiner Sicht etwa kein persönlicher
Angriff? Erst dadurch wurde die Streiterei ausgelöst, vorher war die
Diskussion sehr sachlich, obwohl auch da schon gegensätzliche Meinungen
aufeinandergestoßen sind.
Versuchen wir jetzt also, wieder auf die sachliche Ebene zurückzukommen.
Nochmal: Ob man zum Bau einer neuen Werkzeugmaschine mit bestehenden
Werkzeugmaschinen auskommt oder darüberhinaus noch weitere Hilfsmittel
benötigt, ist für den oben von Chris gezogenen Vergleich völlig
irrelevant.
Wenn ihr weiter über Werkzeugmaschinen philosophieren wollt, dann tut
das bitte in einem eigenen Thread in "Mechanik & Werkzeug".
Falls der TE noch weitere Fragen zum eigentlichen Thema (Compilerbau)
hat, möge er dafür bitte ebenfalls einen neuen Thread starten.
Dieser Thread ist damit an seinem Ende angelangt.