机器代码是否需要运行时环境?MoSync SDK

Spe*_*ter 3 compiler-construction interpreter cross-platform runtime vm-implementation

任何人都可以解释MoSync 的运行时架构吗?

VM Core不是问题.我认为这是一个在java vm中运行的虚拟机,并逐行解释代码.

但是Recompiler Core如何工作?这是一种在本机代码中运行时编译应用程序的Ahead-Of-Time编译器吗?但后来我不明白这张照片.或者我是否可能需要运行时的其他模块甚至是机器代码?

谢谢

小智 9

我刚刚看到Mattias在我忘记发布回复时回复了,但我还是会发布它,因为它进一步阐述了一些观点:)

首先,您的C/C++由GCC使用我们的自定义GCC后端编译为MoSync IL(中间语言).然后,对于某些平台(包括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支持的任何输入语言都可用于该平台.

我知道,很难相信,但这是真的:)