我正在用Tianium Mobile 1.0构建一个iPhone应用程序,我看到它可以编译成原生的iPhone二进制文件.这是怎么回事?似乎要分析JavaScript代码并直接翻译成Objective-C,而不需要像280 North的Objective-J和Cappuccino这样的超集语言,需要很多繁重的工作.
我正在用Tianium Mobile 1.0构建一个iPhone应用程序,我看到它可以编译成原生的iPhone二进制文件.这是怎么回事?似乎要分析JavaScript代码并直接翻译成Objective-C,而不需要像280 North的Objective-J和Cappuccino这样的超集语言,需要很多繁重的工作.
Tianium获取Javascript代码,对其进行分析和预处理,然后将其预编译为一组符号,这些符号根据应用程序对Tianium API的使用进行解析.从这个符号层次 struct 中,我们可以构建一个符号依赖关系矩阵,该矩阵映射到底层的钛库符号,以了解应用程序具体需要哪些API(以及相关的依赖关系、框架等).我以半通用的方式使用符号这个词,因为它在语言上有点不同.在iPhone中,符号映射到一个真正的C符号,最终映射到一个已编译的C符号.o为ARM/i386体系 struct 编译的文件.对于Java来说,这或多或少是一个问题.类文件等.一旦前端能够理解您的依赖关系矩阵,我们就会调用SDK编译器(即,iPhone的GCC,Android的Java),然后将您的应用程序编译成最终的本机二进制文件.
所以,一个简单的方法是,你的JS代码几乎是一对一地编译成nativeland中的代表性符号.仍然有一个解释器在解释模式下运行,否则动态代码之类的东西就无法工作.然而,它的速度更快, struct 更紧凑,并且尽可能接近纯本机映射.
显然,我们仍有很大的空间来改进这一点,并在这方面努力.到目前为止,在我们最新的1.0测试中,它几乎无法与同一个objective-c直接代码区分开来(因为在大多数情况下,它完全映射到该代码).然而,从CompSci的Angular 来看,我们现在可以开始优化人类确实无法轻松做到的事情——就像GCC编译器现在已经做的那样.