2011-09-19 4 views
28

De l'image ci-dessous, Windows 8 Platform et des outils. Je sais que cela signifie que je peux utiliser C++, C# ou JavaScript pour Metro App App. Je regarde aussi la keynote de certains builds et j'ai quelques questions ici.C++, C# et JavaScript sur WinRT

Windows 8 Platform and Tools http://www.windowsitpro.com/content/content/140554/windows8-platform-tools_2.jpg

  1. Est-ce qu'ils ont une différence en C++, C# et JavaScript sur WinRT, par exemple performance, fonctionnalité, capacité etc.
  2. Comment puis-je créer native Metro App en utilisant JavaScript, ai-je besoin d'utiliser la bibliothèque js de MS ou je peux utiliser tout ce que je connais, par exemple jQuery.
  3. Dans l'application de style Metro, System Services est uniquement WinRT, est-ce que cela signifie que je ne peux plus utiliser dll de bas niveau? Cela va-t-il avec le coût de la performance?
+1

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

Répondre

2
  1. différences mêmes comme ils l'ont toujours eu. Il n'y a pas de C# sans gestion automatique de la mémoire. Les langues gérées auront des frais généraux similaires comme toujours. S'il fonctionne sous Javascript, vous devriez pouvoir utiliser jQuery (qui est un javascript pur). Vous devrez peut-être appeler certaines fonctions MS pour l'initialisation, etc., mais les fonctions de script existantes doivent encore fonctionner.

  2. Les sources les plus fiables que j'ai vues ont indiqué que (au moins pour la plupart) WinRT se trouve au-dessus de Win32. Ce bloc "Windows Kernel Services" est le kernel32.dll de Win32. Certains trucs Win32 de niveau supérieur ne sont pas utilisés dans Metro, mais quelle application a déjà utilisé TOUS les Win32?

+0

Re "Vous devrez peut-être appeler certaines fonctions MS pour l'initialisation" - dans mes expériences, j'ai été capable de supprimer tous les fichiers .js d'un projet d'application Web Metro nouvellement créé, et de remplacer HTML par une page vierge. dans la mesure où il a été emballé, déployé et exécuté. Donc je pense que vous pouvez vous en sortir sans aucun appel WinRT. –

0

Suggestion:

  • Pourquoi ne pas télécharger l'aperçu du développeur et de regarder pour vous-même:

http://msdn.microsoft.com/en-us/windows/apps/br229516

Faits:

  • Bien sûr, vous serez toujours en mesure d'utiliser Win32 .dll (à un niveau ou un autre), tout comme vous pouvez avec .Net.

  • Windows 8 est officiellement sorti depuis plus d'un an: il est impossible de dire à ce stade quelles seront les "fonctionnalités" et les "capacités" spécifiques de la version finale.

+1

"Bien sûr, vous serez toujours en mesure d'utiliser Win32. Dll" - Non, vous ne pouvez pas –

3

1) Le point de permettre le choix de la langue est de vous permettre de choisir une langue pour les avantages intrinsèques de la langue et non pas parce qu'elle est la seule façon d'accéder à une API. Si vous aimez les langages dynamiques, choisissez JavaScript. Si vous aimez la saisie statique, mais que vous ne voulez pas gérer la mémoire, utilisez C#. Si vous voulez l'exécution la plus rapide (mais la plus grande capacité de vous tirer dans le pied), choisissez C++.

2) Cela dépend de ce que vous voulez dire par natif. Si vous voulez juste dire que vous voulez qu'ils ressemblent à des applications de style Metro, le meilleur moyen est d'utiliser les bibliothèques WinJS livrées avec le SDK preview.

3) WinRT vous permet d'écrire et d'appeler vos propres DLL C++ ou assemblages C# à partir de votre code JavaScript. La restriction est que vous devez exposer la DLL en tant qu'objet WinRT et que vous ne pouvez pas appeler des fonctions qui ne sont pas autorisées à être utilisées dans les applications de style Metro.

43

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#.

+0

C++/CX est l'ajout d'un calque supplémentaire, si elle traduit «HRESULT» en exceptions. Vraisemblablement, il y a aussi la possibilité d'utiliser du C++ natif, et d'utiliser WinRT comme n'importe quel autre objet COM, avec absolument aucune couche wrapper. –

2

D'autres personnes ont expliqué la différence entre les 3 puits d'options, donc je ne vais pas le répéter.

Cependant, je pense qu'il vient fait pour:

  • Choisissez ce que vous connaissez
  • Choisissez ce que vous permet de réutiliser le plus de code

Alors

  • Si vous sont un programmeur .net puis utilisez C# ou VB.Net
  • Si vous portez une application de Windows Phone utiliser C# ou VB.NET
  • Si vous avez une grande base de code C++, puis envisager d'utiliser C non géré ++ avec WinRT
  • Si vous avez un site Web et que vous souhaitez fournir une version hors ligne de celui-ci, vous pouvez obtenir un bon code (et compétences) réutiliser en utilisant JavaScript avec HTML
  • Si vous aimez comme JavaScript et HTML, mais n'aime pas .Net puis utiliser ....
  • Etc
Questions connexes