我正在用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编译器现在已经做的那样.

Objective-c相关问答推荐

来自 NSDate 的日期名称?

将 Objective-C 指针类型NSString *转换为 C 指针类型CFStringRef(又名const struct __CFString *)需要桥接转换

UISearchbar 键盘搜索按钮操作

改变 setContentOffset:animated: 的速度?

NSInternalInconsistencyException: '无效参数不满足: !stayUp || CLClientIsBackgroundable(内部->fClient)'

观察 UIDatePicker 的变化

Objective-C 的 Eclipse 插件?

在 iOS 和 Mac OS X 应用程序中使用 C++

带有 AVPlayer 的多个视频

iOS 7 - 键盘动画

如何在iphone的objective-c中以编程方式调整图像大小

Objective-C:块 vs. Select 器 vs. 协议

反转 NSString 文本

在 Objective C 中,你能判断一个对象是否具有特定的属性或消息吗?

无法在导航栏中心设置titleView,因为返回按钮

UICollectionView 自动调整高度

为什么我们不能在当前队列上使用 dispatch_sync?

如何在不管理 UDID 和重新编译的情况下无线分发 ios 应用程序

如何将 UITableView 滚动到特定位置

UITableViewCell中的文本居中对齐问题