11 月 19 - 20 日 Apache Pulsar 社区年度盛会来啦,立即报名! 了解详情
写点什么

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

  • 2015-06-29
  • 本文字数:846 字

    阅读完需:约 3 分钟

据 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 工程师作出了以下几项基本选择:

  • 函数式编码风格,这意味着“原始数据对象会默认转换成可变视图模型。”
  • 单向数据流,包括“即发即弃(fire-and-forget)的变化和方法,用于计算特定视图所需的视图模型”。
  • 缓存,“用于避免重复计算没有变化的中间结果”,性能分析显示这是合理的。

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

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

查看英文原文: Facebook’s Moments App Does C++ for Cross-Platform Development

2015-06-29 06:412204
用户头像

发布了 1008 篇内容, 共 346.6 次阅读, 收获喜欢 330 次。

关注

评论

发布
暂无评论
发现更多内容

架构师训练营0期开营

刁架构

架构师

Nginx 基础原理和命令行的真相

子杨

nginx 运维

产业区块链:产业是本质,区块链是工具

CECBC

新基建 CECBC 区块链技术 中国电子

阿里巴巴为什么让初始化集合时必须指定大小?

王磊

Java 性能

10分钟了解Flink

代码诗人

奈学干货分享:分布式CAP实践分析

奈学教育

分布式

Mysql常用删除方式比较

云也退

MySQL

我们可能都误解了什么是情商

董一凡

情绪

ARTS_20200529

凌轩

Java ARTS 打卡计划

Spring源码

云淡风轻

spring 源码

Vol.10 Java 25岁了!

pyfn2030

Java jdk 编程语言 Java25周年

神经网络中为什么不能将权重初始值设置为一样的值

王坤祥

神经网络 学习

Weex开发:页面跳转以及Android端多应用选择窗口的处理

dstweihao

android Vue 大前端 跨平台 Weex

Nginx 入门及命令行操作

子杨

nginx 运维

工厂模式(三)泛型工厂的概念以及示例代码

LSJ

为什么你要学习 Go?

司徒公子

编程语言 谷歌Google Go 语言

Android 通过opencv实现人脸识别,追踪

sar

android OpenCV 人脸识别

幂等问题及解决方案

Joker

幂等 解决方案

图片与标题的Ken Burns动效

寇云

CSS css3

kudmp介绍和安装

唯爱

基于 Markdown 的中文文档排版规范

Murphy

markdown 排版规范 GitHub GFM 物联网学前班

备案问题汇总

云也退

网站 备案

终于找到了一篇文章!通俗地讲解计算机工作原理

图灵社区

cpu 存储器 编译器 计算机工作原理

卧槽,接到一个阎王的需求

码农神说

程序员

你有信息焦虑症吗?

Neco.W

学习 创业 知识体系

Django ListView DetailView等基于类的视图如何添加装饰器?

BigYoung

Python django LiveView 装饰器

GrowingIO 大数据多维分析自动化测试实践

GrowingIO技术专栏

大数据 自动化测试 parewise

从位图到布隆过滤器

王坤祥

位图 布隆过滤器

「首度揭秘」大规模HPC生产环境 IO 特征

焱融科技

sds io 高性能 存储 焱融科技

2020智源-京东多模态对话挑战赛开战 产学研联合推动AI技术发展

DT极客

Cassandra可调一致性的使用及原理

老任物联网杂谈

大数据 分布式 Cassandra 可调一致性

Facebook应用Moments使用C++实现跨平台代码共享_Facebook_Sergio De Simone_InfoQ精选文章