Microsoft beginnt, über seine Programmiersprache der nächsten Generation, C# für die Systemprogrammierung, zu sprechen

Symbol für die Lesezeit 3 Minute. lesen


Leser unterstützen MSpoweruser. Wir erhalten möglicherweise eine Provision, wenn Sie über unsere Links kaufen. Tooltip-Symbol

Lesen Sie unsere Offenlegungsseite, um herauszufinden, wie Sie MSPoweruser dabei helfen können, das Redaktionsteam zu unterstützen Lesen Sie weiter

Joe Duffy, ein Architekt und Entwickler eines Forschungsbetriebssystems bei Microsoft, hat über die Programmiersprache der nächsten Generation gebloggt, an der sie in den letzten Jahren gearbeitet haben. Microsoft beschreibt diese kommende Sprache jetzt als „Systemprogrammierung“-Erweiterungen zu C#. Microsoft versucht, diese Sprache als Kreuzung zwischen sicherheits- und produktivitätszentriertem C#, Java usw. und leistungszentriertem C++ darzustellen.

Hier sind die 6 wichtigen Merkmale der Sprache,

) Lebenslanges Verständnis. C++ verfügt über RAII, deterministische Zerstörung und effiziente Zuordnung von Objekten. Sowohl C# als auch Java überreden Entwickler, sich zu stark auf den GC-Heap zu verlassen, und bieten nur „lockere“ Unterstützung für die deterministische Zerstörung über IDisposable. Mein Team konvertiert regelmäßig C#-Programme in diese neue Sprache, und es ist nicht ungewöhnlich, dass wir 30–50 % der Zeit in GC verbringen. Bei Servern tötet dies den Durchsatz; Für Kunden verschlechtert es die Erfahrung, indem es Latenz in die Interaktion einbringt. Wir haben eine Seite von C++ gestohlen – in Bereichen wie rvalue-Referenzen, Move-Semantik, Zerstörung, Referenzen/Borrowing – und dennoch die notwendigen Sicherheitselemente beibehalten und sie mit Ideen aus funktionalen Sprachen zusammengeführt. Dies ermöglicht es uns, Objekte aggressiv zu stapeln, zuzuweisen, deterministisch zu zerstören und mehr.

2) Verständnis der Nebenwirkungen. Dies ist die Weiterentwicklung dessen, was wir in OOPSLA 2012 veröffentlicht haben, und bietet Ihnen Elemente von C++ const (aber wieder mit Sicherheit) zusammen mit erstklassiger Unveränderlichkeit und Isolation.

3) Asynchrone Programmierung im großen Maßstab. Die Community war in dieser Frage hin und her gerissen, nämlich, ob Coroutinen mit Continuation-Passing oder Lightweight-Blocking verwendet werden sollten. Dazu gehört C#, aber auch so ziemlich jede andere Sprache auf dem Planeten. Die Schlüsselinnovation hier ist ein zusammensetzbares Typsystem, das unabhängig vom Ausführungsmodell ist und beiden effizient zugeordnet werden kann. Es wäre arrogant zu behaupten, wir hätten den einen richtigen Weg, um dieses Zeug aufzudecken, aber da ich Erfahrung mit vielen anderen Ansätzen habe, liebe ich, wo wir gelandet sind.

4) Typsichere Systemprogrammierung. Es wird allgemein behauptet, dass mit Typsicherheit ein inhärenter Leistungsverlust einhergeht. Es ist wahr, dass die Überprüfung der Grenzen nicht verhandelbar ist und dass wir standardmäßig die Überprüfung des Überlaufs bevorzugen. Es ist überraschend, was ein guter optimierender Compiler hier im Vergleich zum JIT-Compiling leisten kann. (Und man muss nur beiläufig einige neuere Sicherheitsbulletins überprüfen, um zu sehen, warum diese Funktionen einen Wert haben.) Andere Bereiche beinhalten, dass Sie mehr tun können, ohne zuzuweisen. Wie Lambda-basierte APIs, die ohne Zuweisungen aufgerufen werden können (anstelle der üblichen zwei: eine für den Delegaten, eine für die Anzeige). Und in der Lage zu sein, Sub-Arrays und Sub-Strings ohne Zuweisung einfach herauszuschneiden.

5) Modernes Fehlermodell. Dies ist ein weiterer Punkt, über den die Community nicht einverstanden ist. Wir haben ausgewählt, was meiner Meinung nach der optimale Punkt ist: Verträge überall (Vorbedingungen, Nachbedingungen, Invarianten, Behauptungen usw.), Fail-Fast als Standardrichtlinie, Ausnahmen für den seltenen dynamischen Fehler (Parsing, I/O usw.), und typisierte Ausnahmen nur dann, wenn Sie unbedingt umfassende Ausnahmen benötigen. Alles auf erstklassige Weise in das Typsystem integriert, so dass Sie das richtige Subtyping-Verhalten erhalten, das erforderlich ist, um es sicher und solide zu machen.

6) Moderne Frameworks. Dies ist ein Auffangbehälter, der Dinge wie asynchrones LINQ, verbesserte Enumeratorunterstützung, die in der Leistung mit C++-Iteratoren konkurriert und keinen Versand mit doppelter Schnittstelle zum Extrahieren von Elementen usw. abdeckt. Um ganz ehrlich zu sein, ist dies der Bereich, den wir haben die größte Liste von „entworfenen, aber noch nicht implementierten Funktionen“, die Dinge wie void-as-a-1st-class-type, Nicht-Null-Typen, Traits, 1st-class-Effekttypisierung und mehr umfasst. Ich gehe davon aus, dass wir einige davon in unserem Kontrollpunkt Mitte 2014 haben werden, aber nicht alle.

Lesen Sie mehr unter dem Link hier.

Mehr zu den Themen: c#, Entwickler, Microsoft