„.Net-Framework“ – Versionsunterschied

[ungesichtete Version][ungesichtete Version]
Inhalt gelöscht Inhalt hinzugefügt
Keine Bearbeitungszusammenfassung
Keine Bearbeitungszusammenfassung
Zeile 10: Zeile 10:
Zunächst versuchte Microsoft die von [[Sun]] entwickelte Java-Technologie für sich zu vereinnahmen und durch nicht-standardkonforme Java-Versionen die Java-Plattform zu ''verschmutzen'' und deren [[Plattformunabhängigkeit]] zu torpedieren. Als Sun dies unter anderem durch Gerichtsverfügung unterband, wechselte Microsoft die Strategie und versuchte die Java-Plattform durch ein eigenes Konkurrenzprodukt zu bekämpfen.
Zunächst versuchte Microsoft die von [[Sun]] entwickelte Java-Technologie für sich zu vereinnahmen und durch nicht-standardkonforme Java-Versionen die Java-Plattform zu ''verschmutzen'' und deren [[Plattformunabhängigkeit]] zu torpedieren. Als Sun dies unter anderem durch Gerichtsverfügung unterband, wechselte Microsoft die Strategie und versuchte die Java-Plattform durch ein eigenes Konkurrenzprodukt zu bekämpfen.
Das besteht aus der sehr javaähnlichen Programmiersprache [[Csharp|C#]] als Konkurrenz zur Sprache Java und der .NET-Initiative als Konkurrenz zur [[Java-Plattform]].
Das besteht aus der sehr javaähnlichen Programmiersprache [[Csharp|C#]] als Konkurrenz zur Sprache Java und der .NET-Initiative als Konkurrenz zur [[Java-Plattform]].
<font size="-2"><br/>[Anmerkung: Die Einleitung ist sehr subjektiv und pro Java geschrieben, außerdem ist die Zeitform in einer prosaähnlichen Form geschrieben. Daher sollte die Entstehungsgeschichte nochmal überarbeitet und ergänzt werden. TG 04.09.2003]</font>
<font size="-3"><b><br/>[Anmerkung: Die Einleitung ist sehr subjektiv und pro Java geschrieben, außerdem ist die Zeitform in einer prosaähnlichen Form geschrieben. Daher sollte die Entstehungsgeschichte nochmal überarbeitet und ergänzt werden, weil sie nur auf die Intentionen Microsofts eingeht, aber nicht auf die Entwicklung. TG 04.09.2003]</b></font>




Zeile 33: Zeile 33:
=== Laufzeitumgebung ===
=== Laufzeitumgebung ===


"Managed code" wird im Vergleich zu "unmanaged code" von einer Laufzeitumgebung (runtime environment) verwaltet - der Common Language Runtime (CLR). Diese virtuelle Maschine [[VM]] übernmimmt die Anforderung und Freigabe von Ressourcen ([[Garbage Collection]]) und stellt sicher, dass geschützte Speicherbereiche nicht direkt angesprochen oder überschrieben werden können.
"Managed code" wird im Vergleich zu "unmanaged code" von einer Laufzeitumgebung (runtime environment) verwaltet - der Common Language Runtime (CLR). Diese virtuelle Maschine ([[VM]]) übernmimmt die Anforderung und Freigabe von Ressourcen ([[Garbage Collection]]) und stellt sicher, dass geschützte Speicherbereiche nicht direkt angesprochen oder überschrieben werden können.
Auch Zugriffe auf Dienste, [[Dateisystem]]-Funktionen oder Geräte werden kontrolliert und können, sofern sie gegen Sicherheitsrichtlinien verstoßen, von der CLR abgelehnt werden ([[Sandbox]]-Prinzip).
Auch Zugriffe auf Dienste, [[Dateisystem]]-Funktionen oder Geräte werden kontrolliert und können, sofern sie gegen Sicherheitsrichtlinien verstoßen, von der CLR abgelehnt werden ([[Sandbox]]-Prinzip).


Zeile 45: Zeile 45:
=== Klassenbibliothek ===
=== Klassenbibliothek ===


[freiwillige vor]
[Freiwillige vor]





Version vom 4. September 2003, 11:27 Uhr


.NET (gesprochen: "dot-net") ist eine Entwicklungsplattform des Softwareherstellers Microsoft, die als Gegenpol zu Sun Microsystems Java eingeführt wurde, und neben einer virtuellen Laufzeitumgebung aus einem Rahmenwerk (Framework) von Klassenbibliotheken (API) und Diensten besteht, die als Basis für Eigenentwicklungen dienen.


Entstehung

Historisch gesehen ist die Motivation für diese Initiative am besten verständlich. Durch die immer weitere Verbreitung der plattformübergreifenden Java-Technologie zu Beginn des 21. Jahrhunderts sah Microsoft seine Dominanz im Bereich der PC-Kerntechnologien in Gefahr. Zunächst versuchte Microsoft die von Sun entwickelte Java-Technologie für sich zu vereinnahmen und durch nicht-standardkonforme Java-Versionen die Java-Plattform zu verschmutzen und deren Plattformunabhängigkeit zu torpedieren. Als Sun dies unter anderem durch Gerichtsverfügung unterband, wechselte Microsoft die Strategie und versuchte die Java-Plattform durch ein eigenes Konkurrenzprodukt zu bekämpfen. Das besteht aus der sehr javaähnlichen Programmiersprache C# als Konkurrenz zur Sprache Java und der .NET-Initiative als Konkurrenz zur Java-Plattform.
[Anmerkung: Die Einleitung ist sehr subjektiv und pro Java geschrieben, außerdem ist die Zeitform in einer prosaähnlichen Form geschrieben. Daher sollte die Entstehungsgeschichte nochmal überarbeitet und ergänzt werden, weil sie nur auf die Intentionen Microsofts eingeht, aber nicht auf die Entwicklung. TG 04.09.2003]


Konzept

Anders als bei Java, kann .NET verschiedene, von der Laufzeitumgebung unterstützte Programmiersprachen ausführen. Hierzu existiert die sogenannte Common Language Specification (CLS). Diese Spezifikation definiert einen vereinheitlichten Binärcode, der von der virtuellen Laufzeitumgebung (VM)interpretiert und ausgeführt werden kann. Somit ist es möglich, .NET mit verschiedenen, an die CLR angepassten Sprachen zu programmieren. Beispielsweise sind das, neben der von Microsoft für .NET favorisierten Sprache C# (gesprochen: C sharp), die Sprachen C++, das propietäre VisualBasic und das propietäre VisualJ (einer Java-ähnlichen Sprache). Weitere Sprachen werden von Drittanbietern zur Verfügung gestellt (z. B. Delphi von Borland). Hierbei sei aber anzumerken, dass lediglich die Syntax zu Teilen adaptiert wurde, bestehende Programme (z. B. VisualJ- oder C++-Quelltexte) aber ohne vorherige Anpassungen nicht kompiliert und ausgeführt werden können.

Nachdem ein Programm kompiliert wurde, liegt es gemäß der CLS in einer sprachneutralen Binärform vor. Hiermit wird gewährleistet, dass verschiedene unterstützte .NET-Programmiersprachen auf in anderen Sprachen geschriebenen Code zugreifen können. Dieser wiederverwendbare Code wird in sogenannten Assemblies zusammengefasst und bereitgestellt (vgl. mit Packages/Paketen in Java oder hierarchischen APIs in C und C++).

Neben dem sprach- und plattformneutralen Binärcode stellt .NET noch eine weitere Form von Code bereit, den sogenannten "unmanaged code". Dieser Code liegt in seiner kompilierten Form in einer maschinennahen Form vor und verwaltet die vom Betriebssystem bereitgestellten Ressourcen eigenverantwortlich.

Dies führt bei einer Sprache, die Sprach- und Plattformunabhängigkeit anstrebt, natürlich dazu, dass ein Programm, dass "unmanaged code" verwendet, auf verschiedenen Plattformen kein vorhersagbares Laufzeitverhalten garantiert. Ein weiterer Nachteil von "unmanaged code" ist, dass ungewollte Instabilitäten oder Sicherheitslecks innerhalb des Systems entstehen können.

Die angestrebte Plattformunabhängigkeit ist unter .NET leider bisher kaum gegeben, da der Hersteller Microsoft die .NET Plattform nur für seine eigene Produktlinie Windows anbietet. Eine Laufzeitumgebung (CLR, VM) für das Betriebssystem Linux (und deren Derivate) steht aber, dank CLS, in Form des Open Source-Projektes Mono zur Verfügung, das vom Hersteller Ximian initiiert wurde. Da sich dieses Projekt aber noch in der Entwicklung befindet (Stand: September 2003) und nicht alle Komponenten von .NET zur Verfügung stehen, ist mit einer hohen Verbreitung auf Windows-fremden Systemen nicht zu rechnen. Neben der fehlenden Betriebssystem-Unterstützung von Windows-fremden Systemen seitens Microsoft, fehlender (freier) Entwicklungsumgebungen sowie lizenzrechtlicher Probleme kann man Plattformunabhängigkeit in der Praxis deshalb nicht attestieren. Unter dem Aspekt der plattformübergreifenden Verfügbarkeit dominieren hier auch weiterhin Sprachen wie Java, Perl und PHP - sowie maschinennahe Sprachen wie C und C++.


Laufzeitumgebung

"Managed code" wird im Vergleich zu "unmanaged code" von einer Laufzeitumgebung (runtime environment) verwaltet - der Common Language Runtime (CLR). Diese virtuelle Maschine (VM) übernmimmt die Anforderung und Freigabe von Ressourcen (Garbage Collection) und stellt sicher, dass geschützte Speicherbereiche nicht direkt angesprochen oder überschrieben werden können. Auch Zugriffe auf Dienste, Dateisystem-Funktionen oder Geräte werden kontrolliert und können, sofern sie gegen Sicherheitsrichtlinien verstoßen, von der CLR abgelehnt werden (Sandbox-Prinzip).

Die automatische Ressourcenverwaltung und die erhöhte Sicherheit hat dabei auch ihren Preis - die Ausführung von "managed code" benötigt geringfügig mehr Zeit und hat einen erhöhten Bedarf an Ressourcen.

Ein Grund hierfür ist die "garbage collection" (engl. für Müllsammlung bzw. Müllabfuhr), die automatische Freigabe nicht mehr benötigter Ressourcen und Referenzen. Zu beachten ist hierbei, dass nicht mehr benötigte Ressourcen nicht direkt freigegeben werden, sondern der Garbage Collector der CLR entscheidet über den Zeitpunkt.

Daher werden auch weiterhin systemnahe Programmiersprachen benötigt (C, Assembler), wenn laufzeitkritische Programme benötigt werden (Animation, Simulation, Bildverarbeitung, direkte Zugriffe auf Dateisysteme und Geräte, Treiberprogrammierung, 3D-Spieleprogrammierung, KI-Anwendungen, sicherheitsrelevante Anwendungen wie Anlagensteuerungen, usw.). Dies hat das VM-basierte .NET auch mit Sprachen wie Java gemeinsam.


Klassenbibliothek

[Freiwillige vor]


Verfügbarkeit

Der Hersteller Microsoft bietet .NET in verschiedenen Formen an. Als reine Laufzeitumgebung samt benötigter Klassenbibliotheken (Framework), als kostenloses eingeschränktes SDK für Entwickler, als integrierte Entwicklungsumgebung (IDE) in Form des Microsoft Visual Studio .NET. Seit "Windows 2003 .NET" bietet Microsoft darüber hinaus Server-Betriebssysteme an, die eine bereits integrierte .NET Laufzeitumgebung bereitstellen. Bei Vorversionen muss die Laufzeitumgebung manuell installiert werden, sofern sie zu einer unterstützten Windows-Variante gehört. Unter Windows 3.1, Windows 95 und Windows NT ist .NET nicht lauffähig.

Zu erwähnen sei auch noch der mobile Ableger von Windows, Windows CE. Auch hierfür existierte eine abgespeckte Version der .NET Laufzeitumgebung in Form des Compact Frameworks. Leider lässt sich aber nur unter Verwendung des Visual Studio .NET 2003 hierfür entwickeln. Hier bietet die Sprache Java mit der Java Microedition (J2ME) zur Zeit wesentlich mehr, was auch zur hohen Verbreitung auf Kleingeräten wie Handhelds und Mobiltelefonen (Handies) geführt hat.