Ist es eine gute Idee, den Compiler-Quellcode zu lesen? [geschlossen]


8

Ich bin ein Junior in College mit Schwerpunkt Informatik. Abgesehen davon, dass ich viel Code schreibe, möchte ich anfangen, von anderen geschriebenen Quellcode zu lesen, um meine Codierungsfähigkeiten zu verbessern und bessere / unterschiedliche Methoden zu erlernen. Ich dachte, ich sollte anfangen, einige der wichtigsten Teile des Codes in C ++ - Compilern zu lesen. Ich denke, das würde mir helfen, zwei Dinge zu tun:

  • Lernen Sie elegante Codierungspraktiken, da Compiler schwierig sind und der Code Lösungen für dieses schwierige Problem darstellt.
  • Dies würde mir auch helfen zu lernen, wie meine am häufigsten verwendete Sprache kompiliert wird, welche Details, wie jeder Fehler generiert wird, wie Code analysiert wird und wie gut die Spezifikationen der Sprache sind.

Halten Sie das für eine gute Idee?


2
Die meisten C ++ - Compiler sind sehr kompliziert (da das Parsen von C ++ sehr kompliziert ist) und haben nicht die beste Codequalität. Sie sollten besser nach anderen Compiler- / Interpreter-Ressourcen suchen
Ratschenfreak

3
Warum wird das abgelehnt? Ich denke, das ist eine gute Frage.
Rocklan

1
@LachlanB Die Abstimmung sagt, dass es nicht zum Thema gehörte. Ich glaube nicht.
Reactgular

1
Ein großes Lob dafür, dass Sie Code lesen möchten. Die meisten Programmierer sind nicht interessiert.
Tcrosley

1
Ich bin wirklich erstaunt, dass alle Antworten "Nein, tu es nicht" sagen. Ich könnte diesen Antworten nicht mehr widersprechen. Neben dem Lesen von Quellcode können Sie auch wissenschaftliche Artikel lesen und davon profitieren, in denen Parsing-Algorithmen und die Compiler-Architektur beschrieben werden. +1 für eine gute Frage und viel Glück.

Antworten:



4

Halten Sie das für eine gute Idee?

Der einzige Grund, warum dies eine gute Idee sein könnte, besteht darin, dass Sie die Erfahrung machen können, dass der meiste Code, selbst häufig verwendeter, "guter" Code ( besonders häufig verwendeter, guter Code in der Tat) völlig unelegant ist.

Oh, und es sollte eine gute Lernerfahrung darüber sein, wie Code selten wie Spezifikationen aussieht und / oder wie wenig Code tatsächlich Spezifikationen folgt.

Und vielleicht können Sie so lernen, wie viel Sie lernen müssen.

Aber nein, ich denke nicht, dass dies eine gute Idee ist - selbst aus den Gründen, die Sie daraus ziehen könnten (und definitiv nicht aus den Gründen, aus denen Sie glauben, dass Sie davon profitieren könnten).


2

Nein, das ist keine gute Idee, weil Sie so wenig gewinnen. Es ist besser, die Compiler-Klasse zu besuchen und das Drachenbuch zu lesen, wenn Sie sich auf Compiler spezialisieren möchten. Wenn Sie sich auf C ++ spezialisieren möchten, kaufen und lesen Sie den Standard. Diese vermitteln Ihnen mehr technische Fähigkeiten als das Reverse Engineering eines Compilers.

Für reine Programmierkenntnisse würde ich "The Practice of Programming" von Pike und Kernighan empfehlen.


1

Ich würde nicht mit dem Lesen von Compiler-Code beginnen, da dieser sehr komplex ist. Sie sollten nach C ++ - Projekten suchen (um den Code zu lesen, das Projekt zu erstellen und Änderungen vorzunehmen):

wwww.github.com
www.codeplex.com
code.google.com

Lesen Sie auch: Die C ++ - Programmiersprache von Bjarne Stroustrup


1
Das ist ein bisschen riskant ... es gibt viel mehr schlechtes C ++ als gutes.
Daniel Gratzer

@jozefg Das gilt für alle Sprachen
Harrison Brock

1
Das ändert nichts an der Bedeutung meiner Bemerkung. Das zufällige Durchsuchen von Open Source-Code ist kein guter Weg, um Best Practices zu finden. Bekannte Projekte könnten jedoch anders sein.
Daniel Gratzer

0

Anstatt Quellcode zu lesen, der wahrscheinlich keine Kommentare enthält. Sie sollten versuchen, einige Bücher darüber zu lesen, wie man gutes C ++ schreibt.

Probieren Sie Scott Meyers Bücher aus . Ich denke, seine Effective C ++ - Bücher werden Ihnen gefallen.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.