2009-12-18 9 views
7

Der erste .NET-Code wird nach MSIL kompiliert und anschließend von JIT in maschinenabhängigen Code konvertiert. Kann jemand mir erklären, was alle Vorteile wegen der 2-Schritt-Compilation bekommen. DankeWarum .NET-Code zu MSIL kompiliert?

+2

Nun, Java tat das vor Jahren, bevor .NET geboren wurde. Ich denke einfach, dass .NET diese Idee kopiert hat. :) –

+1

Nun, UCSD Pascal tat das in den 1970ern und Java (und viele andere) "kopierten" es. Komm schon! :-) – CesarGon

Antwort

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.

Durch eine sprachunabhängige Zwischensprache können Sie auch viele höhere Programmiersprachen (C#, VB.NET, Python usw.) verwenden, die alle auf in anderen Sprachen geschriebene Assemblys verweisen. Da sie alle zu einer Einheit zusammengefügt sind, 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.

+2

Cross-Plattform gilt nicht wirklich viel für das .NET-Framework, da es nur unter Windows ausgeführt werden sollte, aber immer noch einen gültigen Punkt. +1 –

+8

Wirklich? Dann erkläre Mono. :) –

+0

@Matt können Sie bitte erklären, wie kann ich es möglich machen, meinen .net-Code auf verschiedenen Plattformen laufen zu lassen? Bedeutet, wenn ich meine .net-Anwendung auf Linux ausführen möchte? Ist es möglich? – Siddiqui

1
  • Eine ausführbare an die Plattform gebunden ist, nicht gefunden werden. Zum Beispiel zielt XNA beide PPC (Xbox360) und x86-Prozessoren. Einige Programme laufen auf Mono unter Linux oder OSX.

  • Es ermöglicht Ihnen, besser für die Zielmaschine zu optimieren oder fehlende Funktionen ersetzen:

    • Zum Beispiel OSX> = 10.5 kompiliert in GPU Anweisungen zur Laufzeit mit OpenCL fehlt.
    • Angenommen, 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 zu verschieben (ich vermute, dass funktionale Sprachen dafür etwas besser geeignet sind).
+0

Sie haben Recht mit der funktionalen Sprachen Assertion. GPUs sind wirklich mächtig für * bestimmte * Situationen. Funktionale Sprachen erleichtern der Infrastruktur die Entscheidung, wann diese Situation eintritt. –

+0

Ich denke, Zukunft wird wahrscheinlich eine Mischung aus beiden sein, FP + massiv parallelen Thread-Code (GPGPU). – Stringer

1

Erste Konvertierung von High-Level-Sprache und dann auf Maschinenebene, ist dies, wie .NET-Plattform entwickelt wird. Die erste Schicht kümmert sich um Hochsprache MSIL und die zweite Ebene kann sich auf & Glitch der Plattform von MSIL auf Maschinenebene Code zu konvertieren konzentrieren. 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.