IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)

Vous êtes nouveau sur Developpez.com ? Créez votre compte ou connectez-vous afin de pouvoir participer !

Vous devez avoir un compte Developpez.com et être connecté pour pouvoir participer aux discussions.

Vous n'avez pas encore de compte Developpez.com ? Créez-en un en quelques instants, c'est entièrement gratuit !

Si vous disposez déjà d'un compte et qu'il est bien activé, connectez-vous à l'aide du formulaire ci-dessous.

Identifiez-vous
Identifiant
Mot de passe
Mot de passe oublié ?
Créer un compte

L'inscription est gratuite et ne vous prendra que quelques instants !

Je m'inscris !

Microsoft unifie toutes les API Windows sous une seule bibliothèque Rust générée à partir de métadonnées

Le , par Bill Fassinou

429PARTAGES

11  0 
Il est clair que Rust a une grande popularité auprès de Microsoft, qui n'a de cesse de trouver de nouveaux cas d'utilisation pertinents du langage de programmation créé par Mozilla Research. Tout en utilisant le langage au sein de plusieurs de ces projets dans le cadre d'une bonne gestion de la mémoire, Microsoft a également fait le choix d'implémenter toutes les API Windows sous une seule bibliothèque Rust qu'il appelle "Rust for Windows". Rust for Windows fait partie d'un plus grand projet appelé "win32metadata" qui vous permet d'utiliser n'importe quelle API Windows directement et de manière transparente via la caisse Windows.

Rendre les API Win32 plus accessibles à un plus grand nombre de langages

Les API Win32, quésaco ? Les API Win32 offrent des fonctionnalités puissantes que tous les langages et frameworks ne prennent pas en charge eux-mêmes qui vous permettent de tirer le meilleur parti de Windows dans vos applications. Lors du développement pour Windows, les développeurs font souvent appel aux API Win32 pour accéder à ces fonctionnalités. Bien que ces API sont facilement accessibles aux développeurs C et C++, d'autres langages comme C# et Rust nécessitent des wrappers ou des bindings pour pouvoir y accéder. En C#, cela est communément appelé platform invoking ou P/Invoke.



Selon Microsoft, historiquement, cette façon de faire nécessite de redéfinir manuellement les API pour les rendre accessibles, ce qui est fragile et sujet à des erreurs. Ainsi, étant donné la forte demande d'appel d'API Win32 à partir de divers langages, des projets communautaires tels que"https://github.com/dotnet/pinvoke" (.NET) et "https://github.com/retep998/winapi-rs" (Rust) ont pris en charge la charge de fournir des signatures d'API fortement typées et validées pour leurs frameworks, mais les projets sont maintenus manuellement, ce qui est difficile à maintenir et rend difficile la fourniture d'une couverture API complète.

Pour simplifier et automatiser le processus, Microsoft a présenté ce 21 janvier son projet win32metadata, et quelques projections initiales du langage Win32. Ce projet vise à fournir des métadonnées pour les API Win32 de sorte que les projections idiomatiques et les projets puissent être générés pour tous les langages et frameworks de manière plus automatisée et avec une couverture API plus complète. Pour rappel, une projection de langage de programmation est un sous-système diversement décrit comme un ensemble de wrappers ou un adaptateur (adapter).

Ce sous-système favorise le développement en utilisant les API d'une plateforme (Win32 dans ce cas) de manière naturelle et familière pour le langage cible. « En tant que propriétaires du SDK Windows, nous voulions voir où nous pourrions apporter une valeur ajoutée unique, soulager la communauté et faire de la couverture large et durable des API dans les différents langages une réalité. Le résultat est notre projet win32metadata et les projections correspondantes du langage Win32 à présent en avant-première sur GitHub », a déclaré Microsoft jeudi dans un billet de blogue.

Microsoft ouvre les anciennes API Win32 à C# et à Rust, d'autres langages à venir

Selon Microsoft, le projet de métadonnées (win32metadata) facilite la création de projections de langage en fournissant une description complète de la surface de l'API Win32 afin qu'elle puisse être automatiquement projetée vers n'importe quel langage, ce qui améliore la précision et minimise la maintenance. Ainsi, ces descriptions de métadonnées ne sont pas destinées à être consommées directement par les développeurs, qui utiliseront plutôt les projections de langage qui, à leur tour, consomment les métadonnées et projettent les API dans les modèles naturels de langages spécifiques.

« Les API Win32 existent depuis longtemps, donc les décrire toutes avec précision demandera un peu d'itération », a expliqué Microsoft. « Nous allons développer cet outil de manière ouverte et nous accueillons les contributions de la communauté afin de garantir une représentation précise de la surface de l'API Win32 qui profitera à tous les langages ». En attendant, Microsoft a présenté en avant-première deux premières projections de langages :

  • C#/Win32

Construit en partenariat avec Andrew Arnott, le propriétaire du projet PInvoke pour .NET, C#/Win32 analyse les métadonnées et génère les wrappers P/Invoke nécessaires pour appeler les API qui vous intéressent. Il suffit d'ajouter une référence au paquet Microsoft.Windows.CsWin32 de NuGet.org et d'ajouter un fichier appelé NativeMethods.txt à la racine de votre projet avec une liste des fonctions Win32 que vous souhaitez appeler. Le fichier peut contenir une fonction par ligne ou même des jokers comme BCrypt.* pour inclure des modules entiers.



Une fois rempli, C#/Win32 générera les wrappers P/Invoke pour les fonctions que vous demandez et toutes leurs dépendances. Microsoft a déclaré que C#/Win32 n'est qu'un premier exemple de ce qui est possible avec des projections d'API Win32 créées dynamiquement. « Nous envisageons de telles projections pour de nombreux langages, tous exprimant des API Win32 selon les modèles idiomatiques que les développeurs du langage attendent », a déclaré la firme de Redmond.

  • Rust for Windows

D'après le billet de blogue de Microsoft, la projection du langage Rust s'inscrit dans la tradition établie par C++/WinRT de construire des projections de langage pour Windows en utilisant des langages et des compilateurs standard, offrant aux développeurs Rust un moyen naturel et idiomatique d'appeler les API Windows. La caisse Windows vous permet d'appeler n'importe quelle API Windows en utilisant du code généré à la volée directement à partir des métadonnées, ce qui vous permet d'appeler les API comme si elles n'étaient qu'un autre module Rust.

Elle (la projection du langage Rust) ne tente pas de partitionner les API Windows par technologie, mais fournit plutôt un moyen unique d'appeler n'importe quelle API Windows, quelle que soit la technologie sous-jacente. Vous pouvez utiliser de manière transparente les API basées sur des exportations de type C, des interfaces COM ou des types WinRT.

  • Autres langages

En plus de C# et de Rust, Microsoft travaille également sur une projection en C++ moderne dont les sources sont accessibles sur GitHub et invite les développeurs à le rejoindre pour peaufiner win32metadata. Ces projets sont des avant-premières et sont en cours de développement actif. Ils sont donc susceptibles d'être modifiés de manière significative à mesure que Microsoft absorbe les commentaires et qu'il progresse. L'entreprise a annoncé travailler avec la communauté pour soutenir d'autres langages en fonction de la demande, en s'associant à des projets communautaires existants le cas échéant. En créant davantage de projections de langages, la société a déclaré qu'elle suivrait ces principes :

  • les projections de langages doivent fournir une couverture API maximale ;
  • les projections de langages devraient fournir des adaptations conviviales des API et des types, le cas échéant ;
  • les projections de langages doivent fournir IntelliSense provenant de la documentation officielle ;
  • les projections de langages doivent permettre de filtrer les API disponibles en fonction de la version du SDK qu'un projet cible ;
  • les projections de langages devraient permettre aux développeurs de cibler un ensemble spécifique d'API et de lier ou d'inclure uniquement les artefacts nécessaires pour fournir un support à ces API.

Sources : Microsoft, Page GitHub de win32metadata

Et vous ?

Que pensez-vous du projet win32metadata ?

Voir aussi

Microsoft annonce Rust/WinRT, une projection du langage Rust pour les API Windows Runtime implémentée comme une bibliothèque basée sur des fichiers d'en-tête

Le langage Rust est la meilleure chance offerte à l'industrie informatique pour la mise sur pied d'applications système sécurisées, d'après Microsoft

Après Microsoft et Linux, c'est au tour d'Apple de montrer de plus en plus d'intérêt pour l'utilisation de Rust dans la programmation de bas niveau

L'équipe Microsoft Security Response Center recommande l'utilisation de Rust comme approche proactive pour un code plus sécurisé

Une erreur dans cette actualité ? Signalez-nous-la !

Avatar de Aurelien.Regat-Barrel
Expert éminent sénior https://www.developpez.com
Le 23/01/2021 à 21:47
Citation Envoyé par palnap Voir le message
En plus j'ai cru voir que la plupart des fonctions exposées sont unsafe :/
C'est le lot de tous les langages qui offrent un fonctionnement "safe" : créer un environnement (une bulle de sécurité en quelques sortes) avec diverses contraintes qui ont pour avantage d'empêcher tout un tas de problèmes. L'inconvénient étant que si ce dont tu as besoin n'est pas dans la bulle sécurisée, eh bien, tu es bloqué. En particulier au niveau de l'IHM que ça se ressent assez vite.

Il y a alors en général un mécanisme qui permet de s'échaper de la bulle, et concrètement ça consiste bien souvent à ouvrir une passerelle vers C / C++ qui sont les technos utilisées pour propulser les les couches basses (Win32 c'est du C). Tu te retrouves donc dans un monde qui n'est pas soumis aux mêmes restrictions, avec les risques que ça comporte. Mais aussi les avantages (souplesse / performance).

Ainsi en C# aussi il y a un mode "unsafe" pour aller taper des API écrites en C (Win32 ou autre). Dans d'autres langages sans un tel mode c'est beaucoup plus lourd de pouvoir accéder aux APIs système.
2  0 
Avatar de Gugelhupf
Modérateur https://www.developpez.com
Le 22/01/2021 à 15:35
Je pense que c'est une bonne chose pour Rust, un support "officiel" de Google (pour gRPC par exemple) serait bien aussi. Une chose qui pourrait réellement booster la popularité de Rust serait un support officiel de Rust pour les Cloud Functions (Google Cloud Platform, Microsoft Azure) ou "Lambda" (AWS)
1  0 
Avatar de palnap
Membre averti https://www.developpez.com
Le 23/01/2021 à 2:43
Citation Envoyé par defZero Voir le message

Ca arrive quand même à un moment ou MS parle de "deprecated" l'API Win32 au profit de WinRT, non ?
Je ne pense pas que Microsoft déprécie un jour les apis win32 sachant que toutes les features n'existent pas en winrt.

Par exemple si tu regardes le code source de power toys Windows 10 de Microsoft qui est Open Source, tu verras que win32 est encore utilisé en parallèle avec winrt. Par exemple pour afficher l'icône de l'appli dans la barre de tâches n'est supporté qu'en win32, rien de similaire n'existe dans winrt... C'est d'autant plus bizarre que Microsoft utilise la systray dans la plupart de ces apps maisons pour Windows 10 : onedrive, Skype, tout en nous conseillant de ne plus l'utiliser 😅
1  0 
Avatar de CaptainDangeax
Membre expérimenté https://www.developpez.com
Le 25/01/2021 à 13:36
Je crois que la première fois que j'ai entendu parler de la fin de Win32, c'est à la sortie de Vista en 2006. ça fait juste 15 ans. Même MS n'a pas les moyens de ré-écrire complètement tout ce qui a été créé en Win32 vers WPF ou WinRT. Alors Win32 survit. Et en prenant en charge les wrappers pour que ces API soient pris en charge MS assure la continuité de son environnement de développer <mode troll on> et maintient les développeurs captifs </mode troll off>
1  0 
Avatar de droggo
Expert confirmé https://www.developpez.com
Le 22/01/2021 à 14:08
Bonjour,

Enfin !!!

0  0 
Avatar de palnap
Membre averti https://www.developpez.com
Le 22/01/2021 à 18:33
Y avait la crate winapi qui faisait bien le taf pour les api win32 mais la c'est vrai qu'un support officiel c'est top.

Par contre c'est plus un générateur leur truc qu'une vraie lib directement utilisable. En plus j'ai cru voir que la plupart des fonctions exposées sont unsafe :/
0  0 
Avatar de defZero
Membre extrêmement actif https://www.developpez.com
Le 22/01/2021 à 21:04
... Par contre c'est plus un générateur leur truc qu'une vraie lib directement utilisable. En plus j'ai cru voir que la plupart des fonctions exposées sont unsafe :/
@palnap
Là dessus MS ne fait pas de miracle, il s'agit uniquement de génération automatisé à partir de méta donnés, pas de porter les API Win32 vers chaque langages.
Ca va vraiment dans le bon sens pour pour "Rust for Windows", mais pourquoi ça a mis autant de temps ?
Ca arrive quand même à un moment ou MS parle de "deprecated" l'API Win32 au profit de WinRT, non ?
0  0 
Avatar de droggo
Expert confirmé https://www.developpez.com
Le 23/01/2021 à 12:02
Bonjour,
Citation Envoyé par palnap Voir le message
C'est d'autant plus bizarre que Microsoft utilise la systray dans la plupart de ces apps maisons pour Windows 10 : onedrive, Skype, tout en nous conseillant de ne plus l'utiliser &#128517;
L'éternel faites ce que je dis, pas ce que je fais.
0  0