3

任何人都可以解释MoSync的The Runtime Architecture机器代码是否需要运行时环境? MoSync SDK

VM核心不是问题所在。我认为它是一个运行在java虚拟机中的虚拟机,并逐行解释代码。

但是Recompiler Core是如何工作的?这是一种在运行本机代码时编译应用程序的前期编译器吗?但后来我不明白这张照片。或者是否有可能需要运行系统的其他模块,即使它是机器代码?

由于

回答

9

我刚才看到马蒂亚斯已经答复,而我忘记而我的答复,但我只是张贴也无妨,因为它进一步阐述一些看法:)

首先,你的C/C++被编译到MoSync IL (中级语言),使用我们自定义的GCC后端。然后,对于某些平台(包括Android,Symbian和Windows Mobile),这个IL被送入“管道工具”,这是一个汇编器/链接器/优化器,可以为不同平台做不同的事情。这里有几个变种:​​对于JavaME和我们即将发布的Blackberry输出,管道工具生成MoSync字节码,这是一种二进制紧凑的基于寄存器的表示形式。该字节码与包含虚拟机的MoSync运行时一起打包。当你的应用程序启动时,它将字节码读入内存并开始解释它。

对于Android,Symbian,Windows Mobile等,过程与此类似,但运行时核心并不是解释代码,而是贯穿整个代码,并将其重新编译为设备上的ARM机器代码。一旦完成,就开始执行刚创建的ARM代码。

对于iOS设备,这个故事还是有点不同 - 不是将MoSync IL转换为MoSync字节码,而是将代码转换为C源代码,并创建了xcode项目。做这件事有很多原因。一种是,对于iOS来说,动态生成ARM机器码是不可能的,我们也不允许动态加载代码,因为虚拟机运行是毫无意义的。此外,在法律方面,我们希望确保应用程序的生产方式完全符合Apple的规则和准则。

MoSync的主要优势之一就是灵活性;通过使用简化的中间表示法,即任何输入语言最终被转换为以及任何平台的结果二进制总是从中派生而来,我们获得输入和输出之间的单一接触点。这使得我们可以添加新的输入语言,而不依赖于支持哪些平台,相反,可以独立于输入语言添加对新平台的支持。

当人们问我们“MoSync是否允许Java程序在iPhone上运行?”或者“它能让C++程序在Windows Phone 7上运行吗?”答案总是“是”。

如果我们添加对Java的支持作为输入语言,它将自动在MoSync支持的每个平台上工作。

当我们添加对Windows Phone 7的支持时,无论使用何种输入语言MoSync都支持该平台。

我知道,这是很难相信,但这是事实:)

1

得到补偿核心看起来像一个典型的动态重新编译程序/ JIT编译器,根据需要,其重新编译的代码。显然,MoSync根据运行的平台(VM核心 - > Java ME,生成的核心 - > IPhone,重新编译核心 - >其他)使用不同的核心,与运行时系统交互作为适用于每个核心的应用程序,尽管应该对MoSync的用户来说大多是透明的。

1

Recompiler Core是基本核心+ AOT编译器,其中基本核心是MoSync系统调用的实现。应用程序第一次启动时,AOT编译器通过MoSync字节代码并将其转换为本地代码,例如臂。在转换期间,所有MoSync的系统调用都直接映射到基本内核的函数。该应用程序最终通过跳转到转换后的代码段的开头来执行。

关于模块。与相应的库链接时,应用程序框架嵌入在字节码中。系统调用和内部扩展是基本核心的一部分,它们又依赖于资源系统。

3

一个关于MoSync小知道的事实是,它不只是建有利于CPU的, 它也是好的转换到其他例如,MoSync的其中一名工程师使用Javascript/HTML 5.0运行平台。

取决于您使用的平台会发生不同的事情,因此MoSync会根据最适合目标平台的内容转换为中间语言。

也有4种不同口味的MoSync IL,它们全都相互兼容, ,但它们被建模为有利于不同的处理器体系结构。

IL系统有128个寄存器,其中6个是全局的,其余的是局部的函数。

BTW,MoSync字节码与MoSync IL不同,IL在元数据方面非常丰富。

我很乐意讨论更精细的细节或架构,只是发布您的问题。

相关问题