Sujet n ° 1, le line-up serait à peu près comme suit:
JavaScript - plus haut-niveau, dynamiquement typé, GC. Vous ne pouvez utiliser HTML5/CSS pour votre INTERFACE utilisateur, le cadre XAML (Windows.UI.XAML
d'espace de noms) n'est pas disponible. Fournit une norme Api JS (en HTML5) en plus de la surface disponible de WinRT, comme le stockage local ou IndexedDB. Dynamiquement typé, lourd lié au PROCESSEUR de traitement est susceptible d'être plus lente que ce soit .NET ou C++, si le JS moteur est encore très rapide en raison d'être compilé par JIT et optimisés. Vous pouvez consommer C++ et .NET les composants WinRT, mais pas d'écrire votre propre en JS. Certains aspects de la langue de projection semblent être limitée en conséquence - par exemple, si loin que je peux voir, il n'y a aucun moyen de mettre en œuvre un WinRT interface en JS, par exemple. JS existant bibliothèques peuvent généralement être réutilisé avec peu ou pas d'effort, aussi longtemps qu'ils travaillent dans IE10.
.NET (C#/VB) - de mi-niveau, typé statiquement avec, en option, typage dynamique (dynamic
mot-clé, etc) et GC. INTERFACE utilisateur XAML cadre est celui par défaut pour l'INTERFACE utilisateur, mais vous pouvez également utiliser de l'HTML en utilisant WebView
contrôle. Fournit un accès complet à WinRT les bibliothèques, mais aussi une partie de sa propre sur le dessus de cette, qui sont parfois plus pratique à utiliser (par exemple, Stream
vs IInputStream
/IOutputStream
). Aussi, la seule qui comprend spécial de la langue de support au niveau des opérations asynchrones (async
et await
mots-clés), qui sont fortement utilisés lors de l'utilisation d'Api WinRT en raison de leur très à la conception asynchrone. En règle générale, la plupart sucre syntaxique - en dehors de async choses, vous obtenez LINQ to objects (qui fonctionne sur WinRT collections). Pouvez écrire vos propres composants WinRT, qui peut ensuite être utilisé à partir de JS ou C++/CX. Existant .NET bibliothèques peuvent ou peuvent ne pas être facilement réutilisables, en fonction de ce que les classes que dans .NET Framework ils dépendent; les composants écrits pour Silverlight ou WP7 sont les plus susceptibles d'être réutilisable avec peu ou pas de changements, tandis que les composants écrits pour .NET 4 ou Profil Client peut nécessiter des changements importants à exécuter.
C++/CX (Visual C++ Extensions de Composant) - bas/mi-niveau, statiquement typé, pas de GC - compteurs refcount seulement. Plus proche de "to the metal" en ce que son objet modèle est conçu pour mapper directement à WinRT sans adaptation d'impédance - d'où compteurs refcount - mais toujours de haut niveau suffisant pour éviter de passe-partout et d'être généralement sans danger à utiliser (par exemple, des exceptions plutôt que HRESULTs, chaînes vus comme des objets et non des poignées, dynamic_cast
plutôt que d' QueryInterface
etc). Aucun des couches supplémentaires, des objets proxy etc entre vous et WinRT, tous les appels sont directes. Dans la plupart des cas, le plus rapide de tous les trois, bien que la différence varie de façon significative selon la tâche spécifique, et peut être minuscule pour certains (par exemple, événementiel d'application avec peu ou pas de calcul), et considérable pour d'autres (par exemple, l'analyse lourds ou de mathématiques). INTERFACE utilisateur de l'histoire est la même que pour .NET. En outre, vous obtenez l'ensemble du C++ standard library à votre disposition, ainsi qu'un sous-ensemble de l'ATL. Pouvez écrire vos propres composants WinRT, qui peut ensuite être utilisé à partir de JS ou .NET. C++ existant bibliothèques peuvent ou peuvent ne pas être facilement réutilisables, selon l'Api qu'ils utilisent; celles qui s'appuie strictement sur le Standard C/C++ sera habituellement avec aucun changement, tandis que ceux qui appellent Win32 Api peut poser un problème si elles s'appuient sur des Api non disponible dans Metro application conteneur.
Sujet n ° 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 (dont je présume que ce "bas-niveau de la DLL" signifie) à partir d'applications Metro. Notez que bien que la vidéo est sur le C++, cela s'applique pleinement à C#, comme P/Invoke et COM Interop sont toujours là. Donc, si vous pouvez l'appeler à partir de C++, vous pouvez l'appeler à partir de C#.