28 votes

C ++, C # et JavaScript sur WinRT

À partir de l'image ci-dessous, Plate-forme Windows 8 et des outils. Je sais ce que cela signifie que je peux utiliser C++, C# ou JavaScript pour l'Application de style Metro. J'ai aussi regarder la construire la keynote et j'ai quelques questions ici.

Windows 8 Platform and Tools

  1. Ils n'ont pas toute différence de C++, C# et JavaScript sur WinRT, par exemple, la performance, la fonctionnalité, la capacité, etc.
  2. Comment puis-je créer natif de Métro Application à l'aide de JavaScript, ai-je besoin pour utiliser la bibliothèque js à partir de MS ou je peux utiliser ce que js que j'familier avec, par exemple jQuery.
  3. En Application de style Metro, les Services Système n'est WinRT, est-ce à dire que je ne peux pas utiliser de bas niveau de la dll de plus? Sera-ce de venir avec un coût de performances?

43voto

Pavel Minaev Points 60647

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

3voto

Steve Rowe Points 14688

1) Le point d'permettant de choix de la langue est de vous permettre de choisir une langue pour les avantages intrinsèques de la langue et non pas parce que c'est le seul moyen d'accéder à une API. Si vous aimez la dynamique des langues, choisissez JavaScript. Si vous aimez le typage statique, mais ne voulez pas avoir affaire avec la mémoire, l'utilisation de C#. Si vous voulez que le plus rapide l'exécution (mais la plupart capacité à se tirer dans le pied), choisissez C++.

2) ça dépend de ce Que tu veux dire par les indigènes. Si vous venez de dire que vous voulez qu'ils ressemblent Metro style apps, le meilleur moyen est d'utiliser WinJS bibliothèques fournis avec la developer preview du SDK.

3) WinRT vous donne la possibilité d'écrire et appeler vos propres C++ Dll ou C# Assemblées à partir de votre code JavaScript. La seule restriction est que vous avez à exposer la DLL en tant que WinRT objet et vous ne pouvez pas appeler toutes les fonctions qui ne sont pas autorisés à être utilisés dans le Metro style apps.

2voto

Ben Voigt Points 151460
  1. Même les différences comme ils l'ont toujours eu. Il n'y a pas une telle chose comme C# sans gestion automatique de la mémoire. Géré langues seront semblables pour les frais généraux, comme toujours.

  2. Si elle s'exécute le Javascript, vous devriez être en mesure d'utiliser jQuery (qui est un pur javascript). Vous aurez besoin de faire appel de certaines fonctionnalités MS pour l'initialisation, etc., mais des fonctions de script doit encore exécuter.

  3. Les sources les plus fiables que j'ai vu ont indiqué que (au moins pour la plupart) WinRT se trouve sur le dessus de Win32. Que "le Noyau de Windows Services" bloc est Win32 l' kernel32.dll. Certains haut-niveau Win32 choses n'est pas utilisé dans le Métro, mais ce que demande jamais utilisé TOUS Win32?

2voto

Ian Ringrose Points 19115

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

Cependant, je pense qu'il vient de faire pour:

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

Donc

  • Si vous êtes un .net programmeur puis utiliser le C# ou VB.Net
  • Si vous êtes portage d'une application sur le windows phone utiliser le C# ou VB.NET
  • Si vous avez un gros code C++ de base, puis envisager d'utiliser le C++ avec WinRT
  • Si vous avez un site et souhaitez fournir une version hors-ligne, vous pouvez obtenir le code de bonne (et des compétences) de la réutilisation par l'utilisation de JavaScript avec le HTML
  • Si vous aimez le JavaScript et le HTML, mais n'aime pas .Net alors que l'utilisation....
  • Etc

1voto

kingster Points 16

Cette vidéo montre comment appeler votre propre code C ++ à partir de JScript:

http://channel9.msdn.com/posts/Raman-Sharma-Building-Metro-Style-Apps-with-C-and-JavaScript

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X