Microsoft commence à parler de son langage de programmation de nouvelle génération, C# pour la programmation système

Icône de temps de lecture 3 minute. lis


Les lecteurs aident à prendre en charge MSpoweruser. Nous pouvons recevoir une commission si vous achetez via nos liens. Icône d'info-bulle

Lisez notre page de divulgation pour savoir comment vous pouvez aider MSPoweruser à soutenir l'équipe éditoriale En savoir plus

Joe Duffy, architecte et développeur d'un système d'exploitation de recherche chez Microsoft, a blogué sur le langage de programmation de nouvelle génération sur lequel ils ont travaillé au cours des deux dernières années. Microsoft décrit maintenant ce langage à venir comme des extensions de "programmation système" à C#. Microsoft essaie de présenter ce langage comme un croisement entre le C#, Java, etc. centré sur la sécurité et la productivité et le C++ centré sur les performances.

Voici les 6 caractéristiques importantes du langage,

) Compréhension à vie. C++ a RAII, destruction déterministe et allocation efficace des objets. C # et Java incitent tous les deux les développeurs à s'appuyer trop sur le tas GC et n'offrent qu'un support "lâche" pour la destruction déterministe via IDisposable. Une partie de ce que mon équipe fait consiste à convertir régulièrement des programmes C# dans ce nouveau langage, et il n'est pas rare que nous rencontrions 30 à 50 % de temps passé en GC. Pour les serveurs, cela tue le débit ; pour les clients, cela dégrade l'expérience, en injectant de la latence dans l'interaction. Nous avons volé une page de C++ - dans des domaines tels que les références rvalue, la sémantique de déplacement, la destruction, les références/emprunts - tout en conservant les éléments de sécurité nécessaires et en les fusionnant avec des idées de langages fonctionnels. Cela nous permet d'empiler de manière agressive des objets, d'allouer des objets, de les détruire de manière déterministe, etc.

2) Compréhension des effets secondaires. C'est l'évolution de ce que nous avons publié dans OOPSLA 2012, vous donnant des éléments de C++ const (mais encore une fois avec sécurité), ainsi qu'une immuabilité et un isolement de première classe.

3) Programmation asynchrone à grande échelle. La communauté a été 'rond et 'rond sur celui-ci, à savoir s'il faut utiliser des coroutines de passage de continuation ou de blocage léger. Cela inclut C # mais aussi à peu près toutes les autres langues de la planète. L'innovation clé ici est un système de type composable qui est agnostique au modèle d'exécution et peut mapper efficacement à l'un ou l'autre. Il serait arrogant de prétendre que nous avons la seule bonne façon d'exposer ce genre de choses, mais ayant de l'expérience avec de nombreuses autres approches, j'adore où nous avons atterri.

4) Programmation de systèmes de type sécurisé. Il est communément admis que la sécurité de type s'accompagne d'une perte de performances inhérente. Il est vrai que la vérification des limites n'est pas négociable et que nous préférons la vérification par débordement par défaut. Il est surprenant de voir ce qu'un bon compilateur d'optimisation peut faire ici, par rapport à la compilation JIT. (Et il suffit de vérifier avec désinvolture certains bulletins de sécurité récents pour voir pourquoi ces fonctionnalités ont du mérite.) D'autres domaines incluent la possibilité de faire plus sans allouer. Comme avoir des API basées sur lambda qui peuvent être appelées sans allocations (plutôt que les deux habituelles : une pour le délégué, une pour l'affichage). Et être capable de découper facilement des sous-tableaux et des sous-chaînes sans allouer.

5) Modèle d'erreur moderne. C'est un autre sujet sur lequel la communauté n'est pas d'accord. Nous avons choisi ce que je pense être le point idéal : des contrats partout (préconditions, postconditions, invariants, assertions, etc.), le fail-fast comme politique par défaut, des exceptions pour les rares défaillances dynamiques (parsing, I/O, etc.), et les exceptions typées uniquement lorsque vous avez absolument besoin d'exceptions riches. Tous intégrés dans le système de type de manière 1ère classe, de sorte que vous obteniez tout le comportement de sous-typage approprié nécessaire pour le rendre sain et sauf.

6) Cadres modernes. Il s'agit d'un compartiment fourre-tout qui couvre des éléments tels que LINQ asynchrone, une prise en charge améliorée des énumérateurs qui rivalise avec les itérateurs C++ en termes de performances et ne nécessite pas de répartition à double interface pour extraire des éléments, etc. Pour être tout à fait honnête, c'est le domaine que nous avons la plus grande liste de "fonctionnalités conçues mais pas encore implémentées", couvrant des éléments tels que void-as-a-1st-class-type, non-null types, traits, 1st class effect typing, et plus encore. Je m'attends à ce que nous en ayons quelques-uns à notre point de contrôle de la mi-2014, mais pas tous.

En savoir plus sur le lien ici.

En savoir plus sur les sujets : c#, mobiles, microsoft