6 Stimmen

Sagen Sie mir noch einmal, warum wir sowohl .NET als auch Windows brauchen? Warum kann sich Windows nicht in die CLR verwandeln?

Genauso wie sich DOS in Windows verwandelt hat?

Es scheint, als ob wir am Ende drei Plattformen von Microsoft unterstützen und für sie entwickeln, und ich bin mir nicht sicher, wo die Grenzen liegen sollen.

Warum können die Vorteile der CLR (wie Typsicherheit, Speicherschutz usw.) nicht in Windows selbst integriert werden?

Oder in den Browser? Warum eine völlig andere virtuelle Maschine? (Mit wie vielen Ebenen der virtuellen Maschine haben wir es jetzt zu tun? Wir haben gerade Silverlight - und davor Flash - hinzugefügt, das innerhalb des Browsers läuft, der vielleicht innerhalb einer VM-Installation läuft...)

Ich kann rohes Windows für Server sehen, aber warum könnte es nicht eine CLR für Workstations geben, die direkt mit der Hardware spricht (oder zumindest nicht die ganze Windows-Legacy-Kugel und Kette)?

(ooppp - ich habe zwei Fragen hier. Zunächst einmal: Warum kann .net nicht in Windows integriert werden? Ich verstehe das mit der Abwärtskompatibilität - aber die Sicherheit von .NET könnte doch zumindest optional in Windows selbst sein, oder nicht? Es wäre nur ein weiterer Satz von vielen APIs).

Ich erinnere mich, dass eine der konkurrierenden Architekturen, die gegen MS-DOS auf dem IBM PC verkauft wurden, die UCSD-Pascal-Laufzeitumgebung war - eine VM.

3voto

CodingWithSpike Punkte 41513

Das größte Problem, das ich sehe, ist, dass die CLR auf einer VM läuft, und die VM ist als Abstraktionsschicht nützlich. Einige .NET-Anwendungen können unter Linux ausgeführt werden (siehe das Mono-Projekt, ich glaube, sie sind jetzt bis zur .NET-2-Kompatibilität), also wäre das alles weg. In C/C++ oder anderen Sprachen, die direkt mit der Hardware kommunizieren, müssen Sie Ihren Code für jedes Betriebssystem und jede Hardwarearchitektur in verschiedene Binärdateien neu kompilieren. Der Sinn der VM besteht darin, dies zu abstrahieren, so dass man den Code schreiben, kompilieren und überall genau dieselbe Binärdatei verwenden kann. Betrachtet man die Sache aus der Sicht von Java, so ist es ihnen viel besser gelungen, ihre VM als "write once run anywhere"-Modell zu nutzen. Die gleichen Java-Klassen laufen auf Windows, Mac und Linux ohne Neuaufbau (durch den Programmierer sowieso, technisch gesehen erledigt die VM diese Arbeit).

Ich denke, der Punkt Nr. 1 ist, dass .NET/CLR NICHT Windows-spezifisch ist, und IMO würde Microsoft der .NET-Suite von Sprachen nur helfen, wenn es sich ein wenig mehr Mühe mit der OS-übergreifenden Kompatibilität geben würde.

2voto

wasker Punkte 1919

Denn Microsoft hat ein riesiges Erbe, das sie nicht einfach so ablegen können. Das Unternehmen hat viel Geld in die Windows- und Win32-Software investiert, die es nicht einfach aufgeben kann.

1voto

xk0der Punkte 3620

CLR oder eine VM kann verwendet werden (VMs werden verwendet), um ein Betriebssystem darauf auszuführen. Aber dann stellt sich die Frage, was man für die Erstellung der VM verwenden sollte? Wahrscheinlich C/C++ oder eine andere ähnliche Sprache und (höchstwahrscheinlich) in einigen Fällen auch Assembly, um die Dinge zu beschleunigen.

Das würde bedeuten, dass die VM immer noch die Probleme hat, die Windows (oder jedes andere Betriebssystem) jetzt hat. Wie bereits von anderen erwähnt, können einige Teile des Betriebssystems und der zugehörigen Anwendungen portiert (oder, wie Sie sagten, gemorpht) werden, um über die VM zu laufen, aber das gesamte Betriebssystem auf eine VM zu packen, ist nicht sehr sinnvoll. Der Grund dafür ist, dass die VM dann das eigentliche Betriebssystem sein wird, das die Garbage Collection und andere Schutzmaßnahmen für das gemorphte Betriebssystem implementiert.

Das sind meine zwei Cents :)

0voto

doug65536 Punkte 6253

Welche Sprache würde die CLR selbst verwenden? Welche APIs würde sie aufrufen? Angenommen, es müsste eine Datei geöffnet, Speicher zugewiesen oder ein Prozess erstellt werden, glauben Sie, dass die CLR das tun wird? Die CLR ist auf nativem Code aufgebaut. Ein verwaltetes Betriebssystem würde Overhead erzeugen.

CLR ist für die App-Entwicklung, es ist da, um es einfach zu machen, Anwendungen zu machen, und einfach, weniger fehlerhafte Software zu machen. Sie verwendet einen Garbage Collector, und der kann die Leistung zerstören. Sie können auch großartig sein, aber in der Regel enden Sie mit irgendeiner Art von Leistungsproblemen während der Entwicklung, die durch Garbage Collection verursacht werden.

Sie müssen es abwärtskompatibel machen, also muss es eine Art natives API haben.

Wenn Sie sagen, lasst uns ein reines 100% verwaltetes Betriebssystem machen und die Abwärtskompatibilität vergessen oder später eine riesige Kompatibilität haben, dann sagen Sie eigentlich nur, dass wir allem einen Garbage Collector aufzwingen sollten, oder? Abgesehen von einem Garbage Collector und den Portabilitätsgarantien, die man erhält, wenn man CLI-kompatibel ist, was bekommt man dann noch? Die Algorithmen und alles andere werden immer noch in nativen Code kompiliert, wenn sie ausgeführt werden, der einzige wirklich signifikante Unterschied ist also die Speicherverwaltung.

0voto

zinking Punkte 5285

Ich habe tatsächlich Trends gesehen, dass die CLR tiefer in den Software-Stack eingepflanzt wird. Ich erinnere mich, sah die neueste Windows-Software-Stack, einige CLR verwandte Bibliothek in unteren Ebenen gepflanzt bekommen.

Aber CLR wird sich nicht in Windows verwandeln, denn wir wissen, dass Abwärtskompatibilität sehr wichtig für die Software-Ökologie ist.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X