WinRT上的C++,C#和JavaScript

Ano*_*ous 29 javascript c# c++ windows-8 windows-runtime

从下图,Windows 8平台和工具.我知道这意味着我可以将C++,C#或JavaScript用于Metro风格的App.我还看了一些构建的主题演讲,我在这里有几个问题.

Windows 8平台和工具http://www.windowsitpro.com/content/content/140554/windows8-platform-tools_2.jpg

  1. 他们在WinRT上的C++,C#和JavaScript有什么不同,例如性能,功能,功能等.
  2. 如何使用JavaScript 创建本地 Metro App,我是否需要使用MS中的js库,或者我可以使用我熟悉的任何js,例如jQuery.
  3. 在Metro风格的App中,System Services只是WinRT,这是否意味着我不能再使用低级别的dll了?这会带来性能成本吗?

Pav*_*aev 44

关于#1,阵容大致如下:

JavaScript - 最高级别,动态类型的GC.您只能为您的UI使用HTML5/CSS,XAML框架(Windows.UI.XAML命名空间)不可用.除WinRT的可用表面外,还提供一些标准JS API(由HTML5指定),例如本地存储或IndexedDB.作为动态类型,大量CPU绑定处理可能比.NET或C++慢,尽管由于JIT编译和大量优化,JS引擎仍然非常快.您可以使用C++和.NET WinRT组件,但不能在JS中编写自己的组件.语言投影的某些方面似乎相应地受到限制 - 例如,据我所知,例如,没有办法在JS中实现WinRT接口.只要它们在IE10中工作,现有的JS库通常可以在没有或只需要很少工作的情况下重复使用.

.NET(C#/ VB) - 中级,静态类型,可选动态类型(dynamic关键字等)和GC.XAML UI框架是UI的默认框架,但您也可以使用WebView控件来使用HTML .提供对WinRT库的完全访问权限,但也有其自身的一些权限,有时使用起来更方便(例如Streamvs IInputStream/ IOutputStream).此外,唯一一个包含对异步操作(asyncawait关键字)的特殊语言级支持,由于其高度异步设计,在使用WinRT API时会大量使用.一般来说,提供大多数语法糖 - 除了异步的东西,你得到LINQ到对象(它在WinRT集合上工作).可以编写自己的WinRT组件,然后可以从JS或C++/CX中使用.现有的.NET库可能很容易重用,也可能不容易重用,具体取决于它们所依赖的.NET Framework中的哪些类; 为Silverlight或WP7编写的组件最有可能是可重用的,没有或只有很少的更改,而为.NET 4 Full或Client Profile编写的组件可能需要进行重大更改才能运行.

C++/CX(Visual C++组件扩展) - 低/中级,静态类型,无GC - 仅计数引用.最接近"金属",因为它的对象模型被设计为直接映射到WinRT而没有阻抗不匹配 - 因此引用计数 - 但仍然高到足以避免样板并且通常可以安全使用(例如异常而不是HRESULT,看到的字符串作为对象而不是句柄,dynamic_cast而不是QueryInterface等).您和WinRT之间没有其他图层,代理对象等,所有通话都是直接的.在大多数情况下,三者中最快,尽管确切的差异根据具体任务而有很大差异,对于某些人来说可能是微不足道的(例如,没有或很少计算的事件驱动应用程序),而对其他人来说则相当大(例如解析或重数学) ).UI故事与.NET相同.此外,您可以获得整个C++标准库,以及ATL的子集.可以编写自己的WinRT组件,然后可以从JS或.NET使用它们.现有的C++库可能很容易重用,也可能不容易重用,具体取决于它们使用哪些API; 严格依赖标准C/C++的那些通常不会有任何变化,而那些调用Win32 API的人如果依赖Metro app容器中不可用的API则可能会出现问题.


关于#3,这个视频 - http://channel9.msdn.com/Events/BUILD/BUILD2011/TOOL-789C - 应该回答你关于Win32使用的大部分问题(我认为"低级DLL"意味着什么来自Metro应用程序.请注意,虽然视频是关于C++的,但这也完全适用于C#,因为P/Invoke和COM Interop仍然存在.因此,如果您可以从C++调用它,则可以从C#调用它.


Ben*_*igt 2

  1. 与他们一直以来的差异相同。没有自动内存管理就没有 C# 之类的东西。托管语言将一如既往地具有类似的开销。

  2. 如果它运行 Javascript,您应该能够使用 jQuery(这是纯 javascript)。您可能需要调用一些 MS 函数进行初始化等,但现有的脚本函数应该仍然运行。

  3. 我见过的最可靠的来源表明(至少大部分)WinRT 位于 Win32 之上。“Windows 内核服务”块是 Win32 的kernel32.dll. Metro 中没有使用一些上层 Win32 的东西,但是哪个应用程序曾经使用过 Win32 的全部内容呢?