[关闭]
@lsmn 2015-06-28T21:50:06.000000Z 字数 1106 阅读 3419

Facebook应用Moments使用C++实现跨平台代码共享

Facebook 移动 Monments C++ 跨平台


摘要

据Facebook工程师Ashwin Bharambe、Zack Gomez及Will Ruben报道,作为Facebook最新应用之一的Moments正使用C++实现跨iOS和Android平台共享业务逻辑。这里,我们将回顾一下Facebook工程师给出的选择C++的理由和结果。

正文

据Facebook工程师Ashwin Bharambe、Zack Gomez及Will Ruben报道,作为Facebook最新应用之一的Moments正使用C++实现跨iOS和Android平台共享业务逻辑。这里,我们将回顾一下Facebook工程师给出的选择C++的理由和结果。

对于Moments应用,为了“只关注客户端以及尽可能地缩短开发-运行-测试周期”,Facebook工程师决定将服务器端逻辑移到客户端。这种选择的缺点是代码量的增加,他们不得不为他们起初针对的两个平台iOS和Android编写代码。

跨平台共享代码有许多可选方案,Facebook工程师决定,“用特定于平台的代码编写UI,使用C++共享代码编写业务逻辑”。虽然缺少高级抽象使程序员不得不自行处理内存管理,但C++被认为是一种可以提供高性能的语言。而且,借助std::shared_ptr、lambda表达式和auto声明等现代C++特性,Facebook程序员“能够快速实现性能高且内存安全的代码”。

为了尽力保持C++层API的简洁,Facebook工程师作出了以下几项基本选择:

在Android平台上还有一个额外的问题,就是生成特定平台代码的绑定。为此,Facebook工程师使用Dropbox的Djinni将视图模型从C++转换到Java。为了更好地匹配他们的函数式方式及优化垃圾收集,他们还重写了Djinni代码生成器。在iOS上,可以使用Objective-C++实现与C++代码的无缝集成。

这种方法已经使他们可以跨iOS和Android平台共享Moments的大部分业务逻辑,共享代码约占每个平台代码库的三分之一。最后,Facebook工程师指出,借助这种方法,他们“能够创建新特性,而且工作量更小、Bug更少”,并且还“可以在这两个平台之间更灵活地分配工程时间,实现在两个平台上同步交付”。

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注