Warum .NET-Code zu MSIL kompiliert?

7

Der erste .NET-Code wird nach MSIL kompiliert und dann von JIT in maschinenabhängigen Code konvertiert. Kann jemand mir sagen, was alle Vorteile wegen der 2-Schritt-Compilation bekommen. Danke

    
Siddiqui 18.12.2009, 05:06
quelle

4 Antworten

20

Es gibt ein paar Gründe. In erster Linie ist es wahrscheinlich, es plattformübergreifend zu machen. Wenn C # oder andere .NET-Sprachen direkt in systemeigenen Code kompiliert werden, müssen sie für jede Plattform, auf der sie ausgeführt werden, neu kompiliert werden. Bei einer VM kann der gesamte Code in einem Zwischenformat gespeichert werden, und Sie müssen nur eine VM-Implementierung für jede Plattform schreiben.

Wenn Sie eine sprachunabhängige Zwischensprache haben, können Sie auch viele höhere Sprachen (C #, VB.NET, Python usw.) verwenden, die alle auf in anderen Sprachen geschriebene Assemblys verweisen. Da sie sich alle zu einem Ganzen zusammenfügen, können sie nahtlos miteinander arbeiten.

Es gibt auch Leistungsvorteile. Der JIT-Compiler kann speziell für die Maschine, auf der der Code gerade ausgeführt wird, aggressive Optimierungen vornehmen. Ich weiß nicht, wie viel Optimierung der .NET JIT Compiler in diesem Sinne macht, aber es gibt sehr große theoretische Vorteile, die man haben könnte.

    
Matthew Olenik 18.12.2009, 05:12
quelle
6

Die Antwort finden Sie unter MSDN

    
pipelinecache 18.12.2009 05:15
quelle
1

Erste Konvertierung von High-Level-Sprache und dann auf Maschinenebene, so ist die .Net-Plattform konzipiert. Die erste Schicht kümmert sich um Hochsprache MSIL und die zweite Ebene kann sich auf Hitch & amp; Glitch der Plattform, um von MSIL zu Maschinenebenencode zu konvertieren. Es unterstützt hauptsächlich die Sprachen-Interoperabilität und wird in naher Zukunft auch Cross-Platform-Unterstützung bieten, wenn Projekt wie Mono mehr Boden gewinnen wird.

    
Manoj Attal 18.12.2009 06:01
quelle
1
  • Eine ausführbare Datei ist nicht an die Plattform gebunden. Zum Beispiel zielt XNA beide PPC (Xbox360) und x86-Prozessoren. Einige Programme laufen auf Mono unter Linux oder OSX.

  • Damit können Sie die Zielmaschine besser optimieren oder fehlende Funktionen ersetzen:

    • Zum Beispiel kompiliert OSX & gt; = 10.5 in fehlenden GPU-Anweisungen zur Laufzeit mit OpenCL.
    • Nehmen wir an, Sie arbeiten an einer CPU ohne Gleitkommaunterstützung, dann können Sie sie mit dem JIT emulieren, ohne dass ein vollständiger Code neu geschrieben werden muss.
    • Irgendwann könnte es möglich sein, die Verarbeitung dynamisch in die GPU oder andere Ziele auszulagern (ich vermute, dass funktionale Sprachen dafür etwas besser geeignet sind).
Matt 18.12.2009 05:19
quelle

Tags und Links