Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typo3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Compiler construction 机器代码需要运行时环境吗?MoSync SDK_Compiler Construction_Runtime_Cross Platform_Interpreter_Vm Implementation - Fatal编程技术网

Compiler construction 机器代码需要运行时环境吗?MoSync SDK

Compiler construction 机器代码需要运行时环境吗?MoSync SDK,compiler-construction,runtime,cross-platform,interpreter,vm-implementation,Compiler Construction,Runtime,Cross Platform,Interpreter,Vm Implementation,有人能解释一下MoSync的作用吗 VM核心不是问题所在。我认为这是一个在java虚拟机中运行的虚拟机,它逐行解释代码 但是重新编译核心是如何工作的呢?这是一种以本机代码在运行时编译应用程序的超前编译器吗?但是我不明白这张照片。或者我是否可能需要运行时的其他模块,甚至是机器代码 感谢重新编译核心看起来像一个典型的动态重新编译/JIT编译器,可以根据需要重新编译代码。显然,MoSync使用不同的内核,这取决于它运行的平台(VM core->Java ME,Generated core->IPhon

有人能解释一下MoSync的作用吗

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

但是重新编译核心是如何工作的呢?这是一种以本机代码在运行时编译应用程序的超前编译器吗?但是我不明白这张照片。或者我是否可能需要运行时的其他模块,甚至是机器代码


感谢

重新编译核心看起来像一个典型的动态重新编译/JIT编译器,可以根据需要重新编译代码。显然,MoSync使用不同的内核,这取决于它运行的平台(VM core->Java ME,Generated core->IPhone,Recompiler core->anything Other),与运行时系统接口作为每个内核的专用接口,尽管这对MoSync的用户来说应该是透明的。

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


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

我刚才看到Mattias已经回复了,但我忘了发布我的回复,但我还是会发布它,因为它进一步阐述了一些要点:)

首先,您的C/C++由GCC使用我们定制的GCC后端编译成MosyncIL(中间语言)。然后,对于一些平台(包括Android、Symbian和Windows Mobile),这个IL被输入到“管道工具”中,这是一个汇编程序/链接器/优化器,可以为不同的平台做不同的事情。以下是一些变体:

对于JavaME和即将发布的Blackberry输出,pipe工具生成MoSync字节码,这是一种二进制、紧凑、基于寄存器的表示。此字节码与包含虚拟机的MoSync运行时打包在一起。当应用程序启动时,它将字节码读入内存并开始解释它

对于Android、Symbian、Windows Mobile等,过程类似,但运行时核心所做的不是解释代码,而是遍历整个代码,并在设备上重新编译为ARM机器代码。完成后,is开始执行刚刚创建的ARM代码

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

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

当人们问我们“MySyc允许java程序在iPhone上运行吗?”或者“它能使C++程序在Windows Phone 7上运行吗?”答案总是“是”。p> 如果我们添加对Java作为输入语言的支持,它将自动在MoSync支持的每个平台上工作

当我们添加对WindowsPhone7的支持时,MoSync支持的任何输入语言都将自动适用于该平台


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

关于MoSync的一个鲜为人知的事实是,它不仅仅是为了有利于CPU, 这也是一个很好的转换到其他语言的过程,例如,一位MoSync工程师的平台运行在Javascript/html5.0中

根据您使用的平台的不同,会发生不同的情况,因此MoSync会根据最适合目标平台的情况转换为其中间语言

还有4种不同口味的MoSync IL,它们彼此兼容, 但是,它们的建模利用了不同的处理器体系结构

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

顺便说一句,MoSync字节码与MoSync IL不同,后者的元数据非常丰富

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