En ce qui concerne # 1, la gamme serait à peu près comme suit:
JavaScript - plus haut niveau, typé dynamiquement, GC. Vous ne pouvez utiliser que HTML5/CSS pour votre interface utilisateur, l'infrastructure XAML (Windows.UI.XAML
namespace) n'est pas disponible. Fournit des API JS standard (spécifiées par HTML5) en plus de la surface disponible de WinRT, telle que le stockage local ou IndexedDB. En étant dynamiquement typé, le traitement lourd lié au CPU est susceptible d'être plus lent que .NET ou C++, bien que le moteur JS soit toujours très rapide en raison de sa compilation JIT et de son optimisation poussée. Vous pouvez consommer des composants C++ et .NET WinRT, mais pas écrire les vôtres dans JS. Certains aspects de la projection de la langue semblent être limités en conséquence - par ex. Pour autant que je puisse le voir, il n'y a aucun moyen d'implémenter une interface WinRT dans JS, par exemple. Les bibliothèques JS existantes peuvent généralement être réutilisées sans effort ou sans effort, tant qu'elles fonctionnent dans IE10.
.NET (C#/VB) - niveau intermédiaire, typé statiquement avec typage dynamique facultatif (dynamic
mot-clé, etc.) et GC. Le cadre d'interface utilisateur XAML est celui par défaut pour l'interface utilisateur, mais vous pouvez également utiliser le code HTML à l'aide du contrôle WebView
. Fournit un accès complet aux bibliothèques WinRT, mais aussi certaines de ses propres bibliothèques, qui sont parfois plus pratiques à utiliser (par exemple Stream
par rapport à IInputStream
/IOutputStream
). En outre, le seul qui inclut un support de niveau langage spécial pour les opérations asynchrones (mots-clés async
et await
), qui sont fortement utilisés lors de l'utilisation des API WinRT en raison de leur conception hautement asynchrone. D'une manière générale, fournit le plus de sucre syntaxique - en dehors des trucs asynchrones, vous obtenez LINQ aux objets (qui fonctionne sur les collections WinRT). Peut écrire vos propres composants WinRT, qui peuvent ensuite être utilisés depuis JS ou C++/CX. Les bibliothèques .NET existantes peuvent ou non être facilement réutilisables, selon les classes de .NET Framework sur lesquelles elles s'appuient; Les composants écrits pour Silverlight ou WP7 sont les plus susceptibles d'être réutilisables sans ou avec des modifications minimales, tandis que les composants écrits pour .NET 4 Full ou Client Profile peuvent nécessiter des modifications importantes pour s'exécuter.
C++/CX (Extensions de composants Visual C++) - niveau bas/moyen, typés statiquement, pas de comptage de la table de conversion. Le plus proche "du métal" en ce que son modèle d'objet est conçu pour mapper directement à WinRT sans incompatibilité d'impédance - donc refcounting - mais toujours assez haut niveau pour éviter la mise en place et être généralement sûrs à utiliser (par exemple exceptions HRESULTs, cordes vues comme des objets et non des poignées, dynamic_cast
plutôt que QueryInterface
etc). Pas de couches supplémentaires, d'objets proxy etc entre vous et WinRT, tous les appels sont directs. Dans la plupart des cas, le plus rapide des trois, bien que la différence exacte varie significativement selon la tâche spécifique, et peut être minuscule pour certains (par exemple application axée sur les événements avec peu ou pas de calcul), et considérable pour les autres (par exemple). L'histoire de l'interface utilisateur est la même que pour .NET. En outre, vous disposez de toute la bibliothèque standard C++, ainsi que d'un sous-ensemble d'ATL. Peut écrire vos propres composants WinRT, qui peuvent ensuite être utilisés à partir de JS ou .NET. Les bibliothèques C++ existantes peuvent ou non être facilement réutilisables, en fonction des API utilisées. ceux qui reposent strictement sur le standard C/C++ fonctionneront généralement sans modification, tandis que ceux qui appellent les API Win32 peuvent poser problème s'ils s'appuient sur des API non disponibles dans le conteneur d'applications Metro.
En ce qui concerne # 3, cette vidéo - http://channel9.msdn.com/Events/BUILD/BUILD2011/TOOL-789C - devrait répondre à la plupart de vos questions concernant l'utilisation de Win32 (que je suppose que ce « DLL faible niveau ») à partir d'applications Metro. Notez que, bien que la vidéo parle de C++, cela s'applique également entièrement à C#, car P/Invoke et COM Interop sont toujours présents. Donc, si vous pouvez l'appeler à partir de C++, vous pouvez l'appeler à partir de C#.
En ce qui concerne # 2 ils ont dit lors de la keynote qui jquery est pris en charge et (IIUC) seront expédiés avec VS. – CAFxX