Подтвердить что ты не робот

С++, С# и JavaScript на WinRT

Из изображения ниже, Windows 8 Platform и инструментов. Я знаю, это означает, что я могу использовать С++, С# или JavaScript для приложения Metro style. Я также наблюдаю за сборкой, и у меня есть пара вопросов.

Платформа и инструменты Windows 8 http://www.windowsitpro.com/content/content/140554/windows8-platform-tools_2.jpg

  • Есть ли у них какая-либо разница в С++, С# и JavaScript на WinRT, например. производительность, функциональность, возможности и т.д.
  • Как я могу создать native приложение Metro с помощью JavaScript, мне нужно использовать js-библиотеку из MS или я могу использовать все js, с которыми я знаком, например jQuery.
  • В приложении Metro style системные службы - это только WinRT, значит ли это, что я больше не могу использовать DLL низкого уровня? Будет ли это связано с производительностью?
4b9b3361

Ответ 1

Что касается №1, состав будет примерно следующим:

JavaScript - высокоуровневый, динамически типизированный, GC. Вы можете использовать HTML5/CSS только для вашего пользовательского интерфейса, инфраструктура XAML (пространство имен Windows.UI.XAML) недоступна. Предоставляет некоторые стандартные JS API (указанные HTML5) в дополнение к доступной поверхности WinRT, например, локальному хранилищу или IndexedDB. Будучи динамически типизированным, тяжелая обработка с привязкой к процессору, вероятно, будет медленнее, чем .NET или С++, хотя механизм JS все еще очень быстр из-за того, что JIT-скомпилирован и сильно оптимизирован. Вы можете использовать компоненты С++ и .NET WinRT, но не писать свои собственные в JS. Некоторые аспекты языковой проекции кажутся ограниченными соответственно. насколько я вижу, нет способа реализовать интерфейс WinRT в JS, например. Существующие JS-библиотеки обычно могут быть повторно использованы без каких-либо или минимальных усилий, если они работают в IE10.

.NET(С#/VB) - средний уровень, статически типизированный с возможностью динамического ввода (dynamic ключевое слово и т.д.) и GC. Рамка пользовательского интерфейса XAML является стандартным для пользовательского интерфейса, но вы также можете использовать HTML с помощью элемента управления WebView. Обеспечивает полный доступ к библиотекам WinRT, но также и некоторые из них, которые иногда более удобны в использовании (например, Stream vs IInputStream/IOutputStream). Кроме того, единственная, которая включает специальную поддержку на уровне языка для асинхронных операций (ключевые слова async и await), которые сильно используются при использовании WinRT API из-за их асинхронного дизайна. Вообще говоря, обеспечивает большинство синтаксического сахара - кроме асинхронных вещей, вы получаете LINQ для объектов (которые работают над коллекциями WinRT). Можно написать свои собственные компоненты WinRT, которые затем могут быть использованы из JS или С++/CX. Существующие библиотеки .NET могут или не могут быть легко повторно использованы, в зависимости от того, на каких классах в .NET Framework они полагаются; компоненты, написанные для Silverlight или WP7, скорее всего, будут повторно использоваться без каких-либо или минимальных изменений, тогда как компоненты, написанные для .NET 4 Full или Client Profile, могут потребовать значительных изменений для запуска.

С++/CX (Visual С++ Component Extensions) - низко/среднеуровневый, статически типизированный, без GC-refcounting. Ближайшее "к металлу" в том, что его объектная модель предназначена для непосредственной привязки к WinRT без несоответствия импеданса - следовательно, для пересчета - но все еще достаточно высокого уровня, чтобы избежать шаблона и быть в целом безопасным для использования (например, исключения, а не HRESULT, строки, видимые как объекты, а не ручки, dynamic_cast, а не QueryInterface и т.д.). Никаких дополнительных уровней, прокси-объектов и т.д. Между вами и WinRT, все вызовы являются прямыми. В большинстве случаев, самый быстрый из всех трех, хотя точная разница значительно варьируется в зависимости от конкретной задачи и может быть незначительной для некоторых (например, приложение с ведомым событием без каких-либо или небольших вычислений) и значительным для других (например, синтаксический анализ или тяжелая математика). История пользовательского интерфейса такая же, как и для .NET. Кроме того, вы получаете всю стандартную библиотеку С++, доступную для вас, а также подмножество ATL. Можно написать свои собственные компоненты WinRT, которые затем могут использоваться из JS или .NET. Существующие библиотеки С++ могут или не могут быть легко повторно использованы в зависимости от того, какие API они используют; те, которые полагаются строго на стандарт C/С++, обычно работают без изменений, в то время как те, которые вызывают API Win32, могут представлять проблему, если они полагаются на API, недоступные в контейнере приложений Metro.


Что касается №3, это видео - http://channel9.msdn.com/Events/BUILD/BUILD2011/TOOL-789C - должно отвечать на большинство ваших вопросов относительно использования Win32 (что я предполагаю, что "низкоуровневая DLL" означает) из приложений Metro. Обратите внимание, что, хотя видеоролик о С++, это также полностью относится к С#, поскольку P/Invoke и COM Interop все еще существуют. Поэтому, если вы можете вызвать его из С++, вы можете вызвать его из С#.

Ответ 2

1) Цель выбора языка - позволить вам выбрать язык для внутренних преимуществ языка, а не потому, что это единственный способ получить доступ к API. Если вам нравятся динамические языки, выберите JavaScript. Если вам нравится статическая типизация, но вы не хотите иметь дело с памятью, используйте С#. Если вам нужно самое быстрое исполнение (но самое умение стрелять в ногу), выберите С++.

2) Это зависит от того, что вы имеете в виду на родном. Если вы просто хотите, чтобы вы хотели, чтобы они выглядели как приложения в стиле Metro, лучший способ - использовать библиотеки WinJS, которые поставляются с SDK предварительного просмотра разработчика.

3) WinRT дает вам возможность писать и вызывать собственные С++ DLL или С# Assemblies из вашего кода JavaScript. Ограничение заключается в том, что вы должны открыть DLL как объект WinRT, и вы не можете вызывать любые функции, которые иначе не разрешены для использования в приложениях стиля Metro.

Ответ 3

  • Те же различия, что и у них всегда. Нет такой вещи, как С# без автоматического управления памятью. Управляемые языки будут иметь схожие накладные расходы, как всегда.

  • Если он запускает Javascript, вы можете использовать jQuery (который является чистым javascript). Возможно, вам придется вызвать некоторые функции MS для инициализации и т.д., Но существующие функции script должны выполняться.

  • Самые надежные источники, которые я видел, показали, что (по крайней мере, в основном) WinRT сидит поверх Win32. Этот блок "Службы Windows Kernel" - это Win32 kernel32.dll. Некоторые элементы Win32 верхнего уровня не используются в Metro, но какое приложение когда-либо использовало ВСЕ Win32?

Ответ 4

Другие люди объясняют разницу между 3-мя вариантами скважин, поэтому я не буду повторять его.

Однако я думаю, что это происходит:

  • Выберите, что вы знаете
  • Выберите, что позволяет вам повторно использовать самый код

Итак,

  • Если вы являетесь программистом .net, используйте С# или VB.Net
  • Если вы переносите приложение с телефона Windows, используйте С# или VB.NET
  • Если у вас есть большая база кода на С++, рассмотрите возможность использования неуправляемого С++ с WinRT
  • Если у вас есть веб-сайт и вы хотите предоставить его автономную версию, вы можете получить повторное использование кода (и навыка) с помощью JavaScript с HTML
  • Если вы, как JavaScript и HTML, но не нравится .Net, то используйте....
  • Etc

Ответ 6

Предложение:

  • Почему вы не загружаете предварительный просмотр разработчика и не смотрите сами:

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

Факты:

  • Конечно, вы все равно сможете использовать Win32.dll(на том или другом уровне), как вы можете с .Net.

  • Windows 8 официально выходит за рамки года: в этом случае нет возможности сказать, какие конкретные "функции" и "возможности" будут в финальной версии.