Die Microsoft Corporation hat die Veröffentlichung der offenen Plattform .NET 9 bekannt gegeben, die durch die Vereinheitlichung der Produkte .NET Framework, .NET Core und Mono entstanden ist. Auf der Grundlage von .NET 9 können plattformübergreifende Anwendungen für Browser, Cloud-Systeme, Desktop, IoT-Geräte und mobile Plattformen erstellt werden, wobei einheitliche Bibliotheken und ein gemeinsamer Build-Prozess verwendet werden, der unabhängig vom Anwendungstyp ist. Die Builds des .NET SDK 9, des .NET Runtime 9 und des ASP.NET Core Runtime 9 sind für Linux, macOS und Windows verfügbar. Das .NET Desktop Runtime 9 wird ausschließlich für Windows bereitgestellt. Die mit dem Projekt verbundenen Entwicklungen werden unter der MIT-Lizenz veröffentlicht.
.NET umfasst die Runtime mit dem JIT-Compiler RyuJIT, API-Spezifikationen, WPF-Bibliotheken, Windows Forms, WinUI und das Entity Framework, die Befehlszeilenschnittstelle dotnet sowie Werkzeuge zur Entwicklung von Microservices, Bibliotheken, serverseitigen, grafischen und Konsolenanwendungen. Separat erhältlich sind der Stack für die Entwicklung von Webanwendungen ASP.NET Core 9.0, die ORM-Schicht Entity Framework Core 9.0 (inklusive Treiber für SQLite und PostgreSQL), die WPF-Bibliothek 9 (Windows Presentation Foundation), das Windows Forms 9-Framework zur GUI-Entwicklung, die Aspire 9-Plattform zur Erstellung von Cloud-Native-Anwendungen, das MAUI 9-Framework zur Entwicklung plattformübergreifender Benutzeroberflächen sowie die Releases der Sprachen C# 13 und F# 9. Unterstützung für .NET 9.0 und C# 13 ist im kostenlosen Code-Editor Visual Studio Code enthalten.
Besonderheiten der neuen Version:
- Über tausend Änderungen zur Optimierung der Leistung und Verbesserung der Qualität des generierten Codes wurden vorgenommen. Der Garbage Collector wurde aktualisiert und verwendet standardmäßig einen dynamischen Anpassungsmechanismus an die Größe der Anwendung (der Garbage Collector richtet sich nicht nach den verfügbaren Ressourcen des Systems, sondern danach, wie viel Speicher die Anwendung benötigt). Der neue Modus ermöglicht eine bessere Effizienz auf Systemen mit einer hohen Anzahl von Prozessorkernen, wenn die Anwendung relativ wenig Speicher verwendet oder wenn sich der Speicherbedarf während des Betriebs erheblich ändert.
Im JIT-Compiler wurden neue Optimierungen auf Basis von Profiling (PGO) eingeführt, die Verarbeitung von Schleifen, Inline-Ausrollungen und Grenzkontrollen wurden verbessert. In der .NET-Laufzeitumgebung wurde die Nutzung von Vektorinstruktionen ausgeweitet, und die Unterstützung für Arm64 SVE und Intel AVX10 hinzugefügt. Der Code zur Verarbeitung von Ausnahmen wurde um 50 % beschleunigt. Bei Code mit Typumwandlungsoperationen, wie etwa «(IFoo)myFoo» und «myFoo is IFoo», wurde eine Leistungssteigerung von bis zu 70 % festgestellt. Die Leistung einiger Methoden in der Language-Integrated Query (LINQ), wie Take und DefaultIfEmpty, stieg um das Zehnfache bei der Arbeit mit leeren Arrays und Sammlungen.
Die Leistung und Effizienz der Methode System.Text.Json wurde erheblich gesteigert. In der Methode JsonProperty.WriteTo wurde die Möglichkeit zur direkten Ausgabe von UTF8-Zeichenfolgen implementiert, wodurch überflüssige Speicherallokationen vermieden werden. Die Resize-Operationen des JsonObject wurden optimiert. Bei den TechEmpower-Tests zur Bewertung der Effizienz von JSON-Anfrageverarbeitungscode wurde im Vergleich zu .NET 8 eine Leistungssteigerung von 15 % und eine Reduzierung des Speicherverbrauchs um 93 % festgestellt.
- In Runtime wurde ein neues Attributmodell zur Aktivierung und Beschränkung von Funktionen in Bibliotheken eingeführt.
- In C# 13 wurden die Möglichkeiten zur Verwendung des Modifikators „params“ erweitert, bei dem neben Arrays auch Sammlungen angegeben werden dürfen. Bei der Initialisierung von Arrays ist die Verwendung des Operators „^“ für die Angabe des Indexes von hinten erlaubt (zum Beispiel wird „buffer = { [^1] = 0, [^2] = 1, ….}“ 0 im letzten Element und 1 im vorletzten speichern). In Iteratoren und asynchronen Methoden sind die Ausdrücke ref und unsafe erlaubt. Eine neue Escape-Sequenz „\e“ wurde hinzugefügt. Es ist erlaubt, Interfaces für „ref struct“-Typen zu definieren und „ref struct“-Typen als Argumente in generischen Funktionen zu verwenden. Ein neuer Typ Lock wurde vorgeschlagen, um Sperren in Multithread-Anwendungen zu setzen. Lock myLock = new(); void Concat<T>(params List<T> items) { lock (myLock) Console.WriteLine(string.Join(„\e[1mItem: \e[0m“, items)); }
- In F# 9 gibt es Unterstützung für Typen, die null annehmen können. In Unionen wurden automatisch generierte Eigenschaften „.Is*“ (z. B. person.contact.IsEmail) implementiert, die zur Überprüfung der Zugehörigkeit von Werten zu Mengen verwendet werden können. Es wurde Unterstützung für leere Berechnungsausdrücke hinzugefügt („let xs = seq { }“). In Direktiven, die mit „#“ beginnen, dürfen nicht-stringbasierte Werte angegeben werden (z. B. kann man #nowarn 0070 statt #nowarn „0070“ schreiben). In die Module List, Array und Seq wurden Funktionen zum zufälligen Auswählen oder Mischen von Elementen hinzugefügt. Listen (list und set) dürfen nun mit Sammlungsoperationen umgehen.
- Die Funktionen des .NET Aspire-Stacks wurden erweitert, der eine Sammlung von Komponenten für die Erstellung von in Cloud-Umgebungen ausgeführten Anwendungen bereitstellt. Neue Möglichkeiten zur Verwaltung von Ressourcen und dem Lebenszyklus von Anwendungen wurden hinzugefügt. Die Instrumente zur Telemetrieerfassung wurden erweitert.
- Ein neuer Satz von Abstraktionen in C# für die Entwicklung von KI-Anwendungen wurde vorgeschlagen, einschließlich der Nutzung großer Sprachmodelle, des Zugriffs auf Vektor-Repositories und der Interaktion mit KI-Diensten. Ein neuer Typ 'Tensor' und eine Sammlung von Methoden für Berechnungen und die Manipulation multidimensionaler Daten wurden vorgestellt. Erweiterungen für KI werden in Form der Pakete System.Numerics.Tensors, Microsoft.Extensions.AI und Microsoft.Extensions.VectorData bereitgestellt. Das Framework ML.NET, das für die Integration von Machine-Learning-Modellen in Anwendungen gedacht ist, wurde aktualisiert. Zusätzlich wurde die Bibliothek Microsoft.ML.Tokenizers eingeführt, um Text in Tokens zu kodieren und zu dekodieren.
- Im Stack für die Entwicklung von Webanwendungen wurde die Unterstützung der Vorabkompilierung (ahead-of-time) in ASP.NET Core erweitert, die Überwachungs- und Nachverfolgungsfähigkeiten wurden verbessert, die Startzeit verkürzt und der Speicherverbrauch reduziert. Zudem wurde die Arbeit mit statischen Dateien optimiert. Eine neue API für Authentifizierung und Autorisierung wurde hinzugefügt. In Blazor, der Plattform zur Erstellung von Webanwendungen in C#, wurden neue Vorlagen für hybride und Web-Anwendungen realisiert.
- Die Funktionen des MAUI-Frameworks für die Entwicklung plattformübergreifender Benutzeroberflächen wurden erweitert. Die Leistung wurde optimiert. Die Integration mit Desktop- und mobilen Anwendungen wurde verstärkt. Neue Benutzeroberflächenelemente wie TitleBar und HybridWebView wurden hinzugefügt.
- In WPF (Windows Presentation Foundation) wurde die Unterstützung für Design-Themen erweitert und die Unterstützung für Akzentfarben hinzugefügt.
Quelle: opennet.ru
