Was ist der Vorteil des Lernens und Verstehens der Compilerkonstruktion?

10

Ich bin ein Student in meinem 3. Jahr eines Software Engineering Abschlusses. Ab diesem Jahr hat meine Universität einen neuen Kurs namens "Compiler Constructions" eingeführt, der Ihnen die Grundlagen der Theorie des Bauens eines Compilers vermittelt.

Was wäre der reale Vorteil für einen Software-Ingenieur, wenn er etwas über die Compiler-Konstruktion lernen würde?

Nipuna
quelle
2
Obwohl ich es absolut nicht bereue, den Compilerkurs besucht zu haben, war es der härteste, den ich je hatte. Die meisten CSci-Kurse hatten entweder eine bedeutende Theorie, die gelernt werden musste, oder viel Programmierung, nicht beides. Compiler hatten beides.
David Thornley
1
Ich habe es auch in meinem 3. Jahr an der Uni gemacht. - War das zweitbeste Modul, das ich im gesamten Kurs belegt habe (nach AI).
TWith2Sugars
@ TWith2Sugars: Warum würdest du sagen, dass CC einer der besten ist?
Nipuna
1
Der Penny fiel für mich in der Klasse mehrmals - und ein engagierter Dozent und anständige Kommilitonen machten es zu etwas, das mir wirklich Spaß machte. Einer dieser Momente, an den ich mich erinnere, war, dass wir am Anfang angefangen haben, Grammatikausdrücke zu machen, und der Vortragende sagte: "Dies wird erst im zweiten Semester Sinn machen." - Im zweiten Semester haben wir begonnen, den Rest des Compilers zu erstellen (1.) Begriff haben wir einen Parser / Tokeniser gebaut). Das hat es für mich zu einem großartigen Modul gemacht.
TWith2Sugars

Antworten:

12

Das Erlernen der Compilerkonstruktion hat eine praktische Seite. Es gab mehrere Fälle, in denen ich Parser erstellen musste, um eine app-spezifische Befehlssprache zu implementieren. Dadurch konnte ich flexible, skriptfähige Schnittstellen zur App erstellen.

Außerdem erhalten Sie einen besseren Einblick, warum einige Sprachen so gestaltet sind, wie sie sind, und warum keine Sprache perfekt ist.

Es ist ein harter Kurs, einer der härteren im Lehrplan. Ich habe den Fehler gemacht, es während einer Sommersitzung zu nehmen; Nehmen Sie niemals an einem Compilerkurs in einer Sommersitzung teil, Ihr Gehirn wird explodieren.

John Bode
quelle
5
+1 für explodierendes Gehirn. Verschieben Sie Ihren Compiler auch erst am Ende des Semesters! Ich weiß aus Erfahrung ...
Jeremy Heiler
20

Oh, es ist gut. Nimm es, du wirst es nicht bereuen.

Sie erhalten Einblick in die Magie der Programmiersprachen, ihre vergleichenden Eigenschaften und die Umwandlung von Code auf hoher Ebene in seine ausführbare Form. Sie werden viele Sprachfunktionen besser verstehen und einen breiteren Überblick darüber haben, was möglich ist und wie diese Dinge getan werden. Sie werden alles nur mit anderen Augen sehen.

Es ist ratsam, Zeit an der Universität zu verbringen, um grundlegende Dinge über CS zu lernen. Konkrete Programmiersprachen, Tools und Bibliotheken kommen und gehen, aber die Grundlage bleibt.

Auch wenn Sie den Kurs überleben (vorausgesetzt, es wird ernst sein), können Sie sich selbst gratulieren, dass Sie die richtige Gehirnhälfte für die Programmierung haben. Wenn Sie ein praktisches Projekt mit dieser Theorie durchführen, erwähnen Sie es in Ihrem Lebenslauf, und Sie werden bei guten Arbeitgebern großes Interesse wecken.


quelle
2
Außerdem erhalten Sie einen Einblick in die gute / schlechte Sprache, die hier regelmäßig behandelt wird.
JBRWilkinson
8

Bestimmt!

Es ist möglicherweise kein Thema, das Sie täglich verwenden würden, wie beispielsweise eine Datenbankklasse. Wenn Sie Compiler verstehen, erhalten Sie eine hervorragende Grundlage.

Ein ähnliches Beispiel wäre eine Betriebssystemklasse. Sie sind vielleicht ein Programmierer und denken nicht darüber nach, wie ein Betriebssystem jeden Tag funktioniert, aber wenn Sie die Grundlagen dafür haben, wird dies Ihnen auf lange Sicht helfen.

ozz
quelle
2
Mein Undergrad OS-Kurs war der erste Ort, an dem ich Parallelität wirklich verstehen musste. Es war sehr praktisch. Mein Programmiersprachenkurs für Studenten war am besten, als wir Parser schrieben.
Justkt
Aus irgendeinem Grund in meinem 3. Jahr entfernte das das OS-Modul :(
Wollte
6

Ja! Der Kurs vermittelt Ihnen ein viel tieferes Verständnis für das Parsen von Programmiersprachen, Datentypen und Funktionen und deren Übersetzung in Maschinencode für bestimmte CPUs.

Dies allein mag für den täglichen Gebrauch nicht sehr praktisch sein, gibt Ihnen jedoch das Vertrauen, dass Sie tatsächlich wissen, wie Dinge funktionieren . Dies ist sehr hilfreich (hier mit Erfahrung), wenn Sie eine Optimierung auf niedriger Ebene durchführen und diese wirklich bösen Fehler finden müssen, die alle anderen verblüfft haben.

Martin Wickman
quelle
4

Heutzutage wird viel über domänenspezifische Sprachen geredet. Und sie sind wirklich die ganze Begeisterung wert, ihr wahres Potenzial muss noch erforscht werden . Daher werden die Konstruktionsfähigkeiten von Compilern in Zukunft nicht nur wichtig, sondern auch unverzichtbar sein. Ich verbringe ungefähr 60% meiner Entwicklungszeit mit der Implementierung von eDSL-Compilern, auch wenn das aktuelle Problem überhaupt nicht direkt mit Compilern zusammenhängt.

SK-Logik
quelle
Was meinst du mit eDSL-Compilern?
Nipuna
1
Da ich Sprachen verwende, die Metaprogrammierung unterstützen, ist jede eingebettete domänenspezifische Sprache, die ich implementiere, praktisch ein Compilermakro. Einige sind ziemlich kompliziert, mit ihrem eigenen Typsystem und zahlreichen Übersetzungsdurchläufen, einige sind trivial, aber alle sind Compiler. Es macht keinen Sinn, wenn Dolmetscher nicht wirklich gebraucht werden.
SK-Logik
1

Es lohnt sich, einen Kurs zu belegen, um zu verstehen, wie die Tools, die Sie während Ihrer gesamten Programmierkarriere verwenden werden (z. B. Compiler, Interpreter, Parser), aufgebaut sind und welche Einschränkungen bestehen.

Es lohnt sich auch, dies in einem akademischen Kontext zu tun, da dies die interessanten Grundlagen und nicht die vielen Komplexitäten der realen Welt aufdeckt, die im Umgang mit Legacy-Sprachen und -Architekturen, dh viel Komplexität, chaotisch und verstrickt ist. Es ist auch wahrscheinlicher, dass Sie an allen Aspekten eines Compilers arbeiten, wenn Sie einen ganzen für einen Kurs erstellen, als an einem in der Industrie.

grrussel
quelle