Compiler Intelligenz

  • VB.NET
  • .NET (FX) 4.5–4.8

Es gibt 6 Antworten in diesem Thema. Der letzte Beitrag () ist von Bluespide.

    Compiler Intelligenz

    Guten Tag,

    ich hätte da mal ne Frage zum .Net Compiler: Ich habe bei den PyGame Entwicklern deren über 500 vordefinierten Farbwerte "geklaut" in eine EXCEL Tabelle gesteckt und per Serienbrief Variablen erstellt.

    Wenn ich die alle in mein Projekt stecke habe ich also 500+ ReadOnly
    Color Variablen. Kann der Compiler die nicht benutzten Farben eliminieren, oder trägt er diesen "toten" Code durchs Programm?

    Im Sinne einer "schönen" Programmierung möchte ich nur Variablen haben, die ich auch verwende.
    Bitje voor Bitje Kwaliteit

    Axel schrieb:

    Im Sinne einer "schönen" Programmierung möchte ich nur Variablen haben, die ich auch verwende.


    Sehe ich ein wenig anders. Eine schöne programmierung erlaubt einfache erweiterbarkeit. Dazu gehört auch das Farben definiert sind, welche aber nicht genutzt werden, aber evtl. später einmal. Gut 500 Farben sind ein wenig viel, wirst du nie brauchen. Aber in aktuellen Studio kannst du sehen wie oft eine Farbe verwendet wird wenn du readonly properties draus machst. Ob du das nun automatisiert entfernen kannst weis ich nicht, aber die, die nicht verwendet werden von Hand zu löschen halte ich für schnell machbar.

    Du kannst auch einfach alle Farben löschen und dann die Farben die fehlen Anhand der Fehlermeldungen finden und wieder reinmachen.

    Mach dir eine Klasse und pack die Farben statisch rein, dort stören sie doch keinen.
    Zitat von mir 2023:
    Was interessiert mich Rechtschreibung? Der Compiler wird meckern wenn nötig :D

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „DTF“ ()

    Moin, Moin,

    vielen Dank für die Anregungen, das geht aber leider an dem was ich fragen wollte, vorbei:

    Wenn ich diese 500 Variablen, von denen vielleicht 5 verwendet werden, definiere, ist der Compiler in der Lage, die nicht verwendeten zu erkennen und nicht in die executable zu übernehmen?

    Die Compiler, mit denen ich im letzten Jahrhundert gearbeitet habe (Cobol, Assembler, SAP ABAP IV), konnten das nicht, schaffen das Compiler der heutigen Generation?
    Bitje voor Bitje Kwaliteit
    glaub schon.
    beweisen kann ichs nicht, aber der Compiler entfernt zB CodePfade, die nicht erreicht werden können.

    VB.NET-Quellcode

    1. Sub Test()
    2. Dim a = 9 ' hier Haltepunkt setzen
    3. If False Then
    4. Dim b = 10 ' Codeausführung kann nicht hierher verschoben werden, weil Compiler das entferntete
    5. End if
    6. End Sub


    Ansonsten müsste man zwei vergleichsklassen machen, und mit DeCompiler gucken, was für ein IL-Code bei rauskommt.
    konnten das nicht, schaffen das Compiler der heutigen Generation?

    Also der Roslyn kanns wohl nicht, ungenutzte Felder werden nicht weg optimiert.
    Bilder
    • Screenshot 2023-12-22 144840.png

      102,05 kB, 1.246×506, 35 mal angesehen

    Fakiz schrieb:

    Also der Roslyn kanns wohl nicht, ungenutzte Felder werden nicht weg optimiert.

    Ich glaube das ist gar nicht gewollt, da .NET ja Reflektion unterstützt. Wenn z.B. eine DLL geladen wird und die dann durch die Methoden und Variablen geht, kann da nicht einfach was Fehlen. Deswegen wird im IL relativ wenig gemacht, was wir ja schon in diesem Thread festgestellt haben, wo nicht mal Konstanten vor berechnet worden sind:
    Performance-Frage zu Konstante und Literal
    Der IL hält also mehr oder weniger das Original vor und der JIT macht dann die ganze Arbeit. Bei der Übersetzung wird dann mächtig optimiert. Der wird dann mit Sicherheit die ungenutzten Felder weg nehmen und zusammen führen. Methoden werden ja auch teilweise ganz weg genommen und geinlined.

    Sonst musst du mit NativeAOT arbeiten, da kommt nur das rein, was auch wirklich benutzt wird. Hier gibt es dann auch keine Reflektion mehr.

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Bluespide“ ()