C ++, C # y JavaScript en WinRT

De la image a continuación, la plataforma y las herramientas de Windows 8. Sé que esto significa que puedo usar C ++, C # o JavaScript para la aplicación de estilo Metro. También miro la nota key de algunas construcciones y tengo un par de preguntas aquí.

Plataforma y herramientas de Windows 8 http://img.javascriptes.com/c%23/windows8-platform-tools_2.jpg

  1. ¿Tienen alguna diferencia en C ++, C # y JavaScript en WinRT, por ejemplo, performance, function, capacidad, etc.
  2. ¿Cómo puedo crear la aplicación Metro nativa usando JavaScript? Necesito usar la biblioteca js de MS o puedo usar cualquier js con el que esté familiarizado, por ejemplo jQuery.
  3. En la aplicación de estilo Metro, los services del sistema son solo WinRT, ¿significa esto que ya no puedo usar dll de bajo nivel? ¿Esto vendrá con un costo de performance?

Con respecto al n. ° 1, la alignment sería aproximadamente la siguiente:

JavaScript: GC de alto nivel, con tipado dynamic. Solo puede usar HTML5 / CSS para su UI, el marco XAML (espacio de nombres Windows.UI.XAML ) no está disponible. Proporciona algunas API JS estándar (especificadas por HTML5) además de la superficie disponible de WinRT, como almacenamiento local o IndexedDB. Al estar tipeado dinámicamente, es probable que el procesamiento pesado de CPU sea más lento que .NET o C ++, aunque el motor JS todavía es muy rápido debido a que está comstackdo por JIT y está muy optimizado. Puedes consumir los componentes C ++ y .NET WinRT, pero no escribir los tuyos en JS. Algunos aspectos de la proyección del lenguaje parecen estar limitados de manera correspondiente; por ejemplo, hasta donde puedo ver, no hay forma de implementar una interfaz WinRT en JS, por ejemplo. Las bibliotecas JS existentes normalmente se pueden reutilizar sin esfuerzo o con un mínimo esfuerzo, siempre que funcionen en IE10.

.NET (C # / VB) – nivel medio, tipado estáticamente con tipado dynamic opcional (palabra key dynamic etc.) y GC. XAML UI framework es el pnetworkingeterminado para UI, pero también puede usar HTML utilizando el control WebView . Proporciona acceso completo a las bibliotecas WinRT, pero también algunas propias, que a veces son más cómodas de usar (por ejemplo, Stream vs IInputStream / IOutputStream ). Además, es el único que incluye soporte especial a nivel de idioma para operaciones asíncronas (palabras key async y await ), que se usan mucho cuando se utilizan API WinRT debido a su layout altamente asynchronous. En términos generales, proporciona la mayoría del azúcar sintáctico: aparte de las cosas asincrónicas, obtienes LINQ para los objects (que funciona sobre las collections WinRT). Puede escribir sus propios componentes de WinRT, que luego se pueden usar desde JS o C ++ / CX. Las bibliotecas .NET existentes pueden o no ser fácilmente reutilizables, dependiendo de las classs de .NET Framework en las que confían; es probable que los componentes escritos para Silverlight o WP7 sean reutilizables sin cambios o con cambios mínimos, mientras que los componentes escritos para .NET 4 Full o Client Profile pueden requerir cambios significativos para ejecutarse.

C ++ / CX (Extensiones de componentes de Visual C ++): nivel bajo / medio, estáticamente estátizado, sin GC: recuento solamente. Más cercano "al metal" en que su model de object está diseñado para mapear directamente a WinRT sin impedancia, por lo tanto refutar, pero aún de alto nivel para evitar repeticiones y ser generalmente seguro de usar (por ejemplo, excepciones en lugar de HRESULT, cadenas vistas como objects y no controlleres, dynamic_cast lugar de QueryInterface etc.). Sin capas adicionales, objects proxy, etc. entre usted y WinRT, todas las llamadas son directas. En la mayoría de los casos, el más rápido de los tres, aunque la diferencia exacta varía significativamente dependiendo de la tarea específica, y puede ser minúscula para algunos (por ejemplo, aplicación impulsada por events con poca o ninguna computación) y considerable para otros (por ejemplo, análisis sintáctico o matemática pesada) ) La historia de UI es la misma que para .NET. Además, tiene a su disposition toda la biblioteca estándar de C ++, así como un subset de ATL. Puede escribir sus propios componentes de WinRT, que luego se pueden usar desde JS o .NET. Las bibliotecas existentes de C ++ pueden o no ser fácilmente reutilizables, dependiendo de qué API usen; aquellos que dependen estrictamente del Estándar C / C ++ generalmente funcionarán sin cambios, mientras que aquellos que llaman a las API de Win32 pueden plantear un problema si dependen de API que no están disponibles en el contenedor de la aplicación Metro.


Con respecto al n. ° 3, este video – http://channel9.msdn.com/Events/BUILD/BUILD2011/TOOL-789C – debería responder la mayoría de sus preguntas sobre el uso de Win32 (que supongo que significa "DLL de bajo nivel"). ) de aplicaciones Metro. Tenga en count que aunque el video trata sobre C ++, esto también se aplica completamente a C #, ya que P / Invoke y COM Interop siguen ahí. Entonces, si puede llamarlo desde C ++, puede llamarlo desde C #.

1) El objective de permitir la elección del idioma es permitirle elegir un idioma para las ventajas intrínsecas del idioma y no porque sea la única forma de acceder a una API. Si le gustan los idiomas dynamics, elija JavaScript. Si te gusta el tipado estático, pero no quieres manejar la memory, utiliza C #. Si desea la ejecución más rápida (pero la mayor capacidad para dispararse en el pie), elija C ++.

2) Eso depende de lo que quieras decir con nativo. Si solo quiere decir que quiere que se vean como las aplicaciones de estilo Metro, la mejor manera es usar las bibliotecas WinJS que se entregan con el SDK de vista previa del desarrollador.

3) WinRT le da la capacidad de escribir y llamar a sus propias DLL C ++ o ensamblajes C # desde su código JavaScript. La restricción es que debe exponer el file DLL como un object WinRT y no puede llamar a ninguna function que no esté permitida en las aplicaciones de estilo Metro.

  1. Las mismas diferencias que siempre han tenido. No hay tal cosa como C # sin gestión de memory automática. Los idiomas administrados tendrán una sobrecarga similar a la habitual.

  2. Si ejecuta Javascript, debería poder usar jQuery (que es javascript puro). Es posible que necesite llamar a algunas funciones de MS para la initialization, etc., pero las funciones de script existentes aún deben ejecutarse.

  3. Las fonts más confiables que he visto han indicado que (al less en su mayoría) WinRT se sienta encima de Win32. Ese bloque "Windows Kernel Services" es Kernel32.dll de Win32. Algunas cosas de Win32 de nivel superior no se usan en Metro, pero ¿qué aplicación alguna vez utilizó TODO Win32?

Otras personas han explicado la diferencia entre los 3 pozos de opciones, por lo que no lo repetiré.

Sin embargo, creo que se trata de hacer lo siguiente:

  • Elige lo que sabes
  • Elija lo que le permite reutilizar el mayor código

Asi que

  • Si eres progtwigdor de .net, utiliza C # o VB.Net
  • Si está portando una aplicación desde el teléfono de Windows use C # o VB.NET
  • Si tiene una gran base de código C ++, entonces considere usar C ++ no administrado con WinRT
  • Si tiene un website y desea proporcionar una versión fuera de línea, puede get una buena reutilización de código (y habilidad) utilizando JavaScript con HTML.
  • Si le gusta JavaScript y HTML, pero no le gusta .Net, use …
  • Etc

Este video muestra cómo llamar a su propio código C ++ desde JScript:

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

Sugerencia:

  • ¿Por qué no descargas la vista previa del desarrollador y lo buscas tú mismo?

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

Hechos:

  • Por supuesto, todavía podrá usar Win32 .dll (en un nivel u otro), al igual que con .Net.

  • Windows 8 oficialmente ha pasado más de un año: no hay forma de decir en este punto qué características y capacidades específicas habrá en la versión final.