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

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Windows Discussion :

Microsoft unifie toutes les API Windows sous une seule bibliothèque Rust


Sujet :

Windows

  1. #1
    Chroniqueur Actualités

    Homme Profil pro
    Dirigeant
    Inscrit en
    Juin 2016
    Messages
    3 160
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Bénin

    Informations professionnelles :
    Activité : Dirigeant
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juin 2016
    Messages : 3 160
    Points : 66 257
    Points
    66 257
    Par défaut Microsoft unifie toutes les API Windows sous une seule bibliothèque Rust
    Microsoft unifie toutes les API Windows sous une seule bibliothèque Rust
    générée à partir de métadonnées

    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.

    Nom : 1a99000f-microsoft-rust.jpg
Affichages : 165525
Taille : 19,7 Ko

    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.

    Nom : CsWin32.gif
Affichages : 5740
Taille : 850,8 Ko

    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é
    Contribuez au club : corrections, suggestions, critiques, ... Contactez le service news et Rédigez des actualités

  2. #2
    Expert confirmé

    Inscrit en
    Août 2006
    Messages
    3 942
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 3 942
    Points : 5 654
    Points
    5 654
    Par défaut
    Bonjour,

    Enfin !!!

    Si les cons volaient, il ferait nuit à midi.

  3. #3
    Modérateur
    Avatar de Gugelhupf
    Homme Profil pro
    Analyste Programmeur
    Inscrit en
    Décembre 2011
    Messages
    1 320
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Analyste Programmeur

    Informations forums :
    Inscription : Décembre 2011
    Messages : 1 320
    Points : 3 741
    Points
    3 741
    Billets dans le blog
    12
    Par défaut
    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)
    N'hésitez pas à consulter la FAQ Java, lire les cours et tutoriels Java, et à poser vos questions sur les forums d'entraide Java

    Ma page Developpez | Mon profil Linkedin | Vous souhaitez me contacter ? Contacter Gokan EKINCI

  4. #4
    Membre averti
    Inscrit en
    Novembre 2006
    Messages
    128
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 128
    Points : 353
    Points
    353
    Par défaut
    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 :/
    Développeur / Formateur
    Tutoriels AngularJS / Node.js sur ma chaîne Youtube : http://www.youtube.com/user/DevDuFutur

  5. #5
    Membre extrêmement actif
    Homme Profil pro
    Technicien de maintenance / Developpeur PHP
    Inscrit en
    Mai 2015
    Messages
    428
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Technicien de maintenance / Developpeur PHP
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Mai 2015
    Messages : 428
    Points : 1 627
    Points
    1 627
    Par défaut
    ... 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 ?

  6. #6
    Membre averti
    Inscrit en
    Novembre 2006
    Messages
    128
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 128
    Points : 353
    Points
    353
    Par défaut
    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 😅
    Développeur / Formateur
    Tutoriels AngularJS / Node.js sur ma chaîne Youtube : http://www.youtube.com/user/DevDuFutur

  7. #7
    Expert confirmé

    Inscrit en
    Août 2006
    Messages
    3 942
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 3 942
    Points : 5 654
    Points
    5 654
    Par défaut
    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 😅
    L'éternel faites ce que je dis, pas ce que je fais.
    Si les cons volaient, il ferait nuit à midi.

  8. #8
    Expert éminent sénior

    Homme Profil pro
    pdg
    Inscrit en
    Juin 2003
    Messages
    5 750
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : pdg

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 750
    Points : 10 667
    Points
    10 667
    Billets dans le blog
    3
    Par défaut
    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.

  9. #9
    Membre expérimenté
    Profil pro
    Ingénieur système Linux N3
    Inscrit en
    Juillet 2008
    Messages
    419
    Détails du profil
    Informations personnelles :
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur système Linux N3

    Informations forums :
    Inscription : Juillet 2008
    Messages : 419
    Points : 1 527
    Points
    1 527
    Par défaut La fin de Win32
    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>

Discussions similaires

  1. Comment ajouter une chaîne dans une liste avec les API Windows ?
    Par DelphiCool dans le forum Codes sources à télécharger
    Réponses: 0
    Dernier message: 02/02/2013, 13h47
  2. Comment extraire une ressource de votre exe, en utilisant que les API windows ?
    Par DelphiCool dans le forum Codes sources à télécharger
    Réponses: 0
    Dernier message: 31/01/2013, 22h22
  3. Fusionner toutes les 4 lignes en une seule ligne
    Par mlaiti dans le forum Linux
    Réponses: 3
    Dernier message: 14/06/2012, 01h03
  4. Réponses: 1
    Dernier message: 22/10/2009, 12h51
  5. Réponses: 2
    Dernier message: 18/04/2007, 21h32

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo