据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

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

  1. Qt将鼠标移动范围限定在某个区域内QCursor跨平台代码

    不用ClipCursor(),直接上跨平台代码: void MyMainWindow::leaveEvent(QEvent * event) {// Get the window geometry & ...

  2. android 共享代码,Android团队成员间的代码共享!(Git+Github版)

    原创,转载请说明出处. 一. 这篇文章要解决什么问题,能学习到什么? 在android团队的开发中,少不了与队员之间的合作.为了避免我们傻瓜式地复制粘贴对方的负责的那部分功能代码,我们可以用svn或者 ...

  3. 包r语言_R语言代码共享:制作R包

    作者:黄天元,复旦大学博士在读,热爱数据科学与开源工具(R),致力于利用数据科学迅速积累行业经验优势和科学知识发现,涉猎内容包括但不限于信息计量.机器学习.数据可视化.应用统计建模.知识图谱等,著有& ...

  4. ArcGIS Engine代码共享-可以直接移植到你的工程中

    以前写ArcGIS Engine程序,都是一些代码积累,基本上都是静态变量,如果有基础的一看就明白了,我也没有时间来总结这一块了,大家自己消化吧,好多东西应该可以直接移植到其他地方. ArcGIS E ...

  5. 微信小程序自定义组件4 —— 代码共享behaviors

    behaviors 用于实现组件间代码共享 每个behavior可以包含一组属性.数据.生命周期函数和方法.组件引用behavior时,它的属性.数据.和方法会被合并到组件中 每个组件可以引用多个be ...

  6. 350 个在家办公的人,创造了估值 10 亿美元的代码共享平台

    [CSDN编者按]每一年都有无数的科技公司前往硅谷创业,梦想着一夜暴富.人生翻盘,但鲜少有人能不走弯路.本文中分享了一个经典的故事:9个人想出了一个绝佳的计划--他们仅用了三年时间就让员工人数达到了3 ...

  7. 美通社企业新闻汇总 | 2019.2.1 | 迪士尼推出猪年限定产品;阿联酋航空与南航签订代码共享协议...

    要闻 和睦家健康选礼指南:春节如何为长辈买好礼 迪士尼贺新春,推出猪年限定产品 阿联酋航空与中国南方航空签订代码共享协议 索理思和巴斯夫已完成造纸和水处理化学品业务的合并 JNA珠宝设计大赛2018/ ...

  8. 阿联酋航空与中国南方航空签订代码共享协议

    总部位于迪拜的国际航空公司阿联酋航空(IATA代码:EK)和总部位于广州的中国南方航空公司(IATA代码:CZ)近日正式签署了一份合作谅解备忘录,以达成全面互惠的代码共享合作协议,为从中国前往中东和非 ...

  9. 03 | 微服务反模式与缺陷:代码共享反模式

    译者简介:ASCE1885, <Android 高级进阶>作者. 本文首发于Source Code Chain开发者社区,欢迎使用我的专属邀请链接加入一起交流. 微服务被称为"无 ...

最新文章

  1. [Gdal-dev] GCP's, Warping and Source Data Projections
  2. php7和php8内核有区别吗,不要在PHP7中踩这些坑
  3. Java 面向对象语言基础
  4. Python 可变数据类型和不可变数据类型 - Python零基础入门教程
  5. dedecms 5.7 站点文件从本地子目录上传到远程根目录后找不到模板的解决方案
  6. 33款创意的二维码名片设计作品欣赏
  7. 改变button中文字的对齐方式
  8. C++——EOF是个什么东西?
  9. 刨根系列之volatile详解 (二)
  10. 性能服务器阵列,存储性能101:服务器、阵列与网络架构基础
  11. 一个exe文件怎么运行起来的
  12. 系统架构演变:SOA、微服务架构的区别和联系
  13. html中怎么做扇形菜单,CSS3实现扇形动画菜单流程详解
  14. 代理ip/ip代理的含意 代理IP/IP代理有什么用?
  15. Babylonjs PointerEventTypes.POINTERMOVE 获取不到模型信息
  16. 全网最全fiddler使用教程和fiddler如何抓包(fiddler手机抓包)-笔者亲测
  17. 一起做激光反光板(三)-EKF建图公式推导
  18. 超级炫酷夜场酒吧KTV宣传视频模板 镂空文字故障闪屏特效PR模板
  19. lenovo小新 win10系统装ubuntu经验总结
  20. 计算机应用基础知识点.pdf,计算机应用基础教学知识点.pdf

热门文章

  1. Python简单试题3
  2. windows配置solr5.5.2(不通过tomcat,使用内置jetty)
  3. Python学习总结15:时间模块datetime time calendar (二)
  4. 服务端架构中的“网关服务器”
  5. 高性能网站建设的最佳实践(二)
  6. RHEL6   Kickstart 无人值守安装
  7. Adb安装程序出现TimeOut错误
  8. SQLSERVER中的自旋锁
  9. linux系统远程教程,Linux下实现远程协助
  10. 解决Ubuntu系统中文乱码显示问题