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

任何人都可以解释MoSync的运行时架构吗? VM Core不是问题。我认为这是一个在java vm中运行的虚拟机,并逐行解释代码。 但是Recompiler Core如何工作?这是一种在本机代码中运行时编译应用程序的Ahead-Of-Time编译器吗?但后来我不明白这张照片。或者我是否可能需要运行时的其他模块甚至是机器代码? 谢谢     
已邀请:
我刚刚看到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支持的任何输入语言都可用于该平台。 我知道,很难相信,但这是真的:)     
关于MoSync的一个鲜为人知的事实是,它不仅仅是为了对CPU有益, 它也很好地转换为其他语言,例如,其中一位MoSync工程师拥有在Javascript / HTML 5.0中运行的平台。 根据您使用的平台,会发生不同的事情,因此MoSync会根据目标平台的最佳用途转换为其中间语言。 还有4种不同风格的MoSync IL,它们都相互兼容, 但是被建模以利用不同的处理器架构。 IL系统有128个寄存器,其中6个是全局的,其余的是函数的本地寄存器。 BTW,MoSync字节码与MoSync IL不同,IL的元数据非常丰富。 我很乐意讨论更精细的细节或架构,只需发布​​您的问题。     
Recompiler Core看起来像典型的动态重编译器/ JIT编译器,它根据需要重新编译代码。显然,MoSync使用不同的核心,具体取决于它运行的平台(VM核心 - > Java ME,生成核心 - > IPhone,重新编译器核心 - >其他任何内容),与运行时系统连接,适用于每个核心,尽管应该对MoSync的用户来说几乎是透明的。     
Recompiler Core是基础核心+ AOT编译器,其基础核心是MoSync系统调用的实现。应用程序第一次启动时,AOT编译器会通过MoSync字节代码并将其转换为本机代码,例如:臂。在转换过程中,所有MoSync的系统调用都直接映射到基本核心中的函数。应用程序最终通过跳转到转换后的代码部分的开头来执行。 关于模块。当您链接到相应的库时,应用程序框架嵌入在字节代码中。系统调用和内部扩展是基本核心的一部分,它们又依赖于资源系统。     

要回复问题请先登录注册