Facebook母公司Meta的工程师们,对多年以来将众多Android应用代码库从Java转换成Kotlin的体会做了一番认真总结。
对于Meta这样一家坐拥成千上万开发人员和多款大型Android应用程序(包括Facebook、Instagram、Messenger、Portal以及Quest VR头显)的企业来说,这无疑是一项艰巨的任务。
Facebook公司软件工程师Omer Strulovich指出:“把这些用Java开发的Android应用全面转换为Kotlin,确实不是件容易的事。”
但向Kotlin的迁移仍在进行当中,目前Meta公司的Android应用repo中已经包含上千万行Kotlin代码。
Strulovich解释称:“如今,我们的Facebook、Messenger以及Instagram等Android应用各自拥有超过100万行Kotlin代码,而且转换率仍在不断提升。我们Android代码库中的Kotlin代码总规模已经超过1000万行。”
Java是当前世界三大编程语言之一,在企业级应用程序领域处于主导地位;相比之下,Kotlin的人气显然无法与之相比,但也稳居榜单前二十。鉴于Meta自身的业务规模与极具份量的应用程序组合,这波从Java到Kotlin的Android应用转型不啻为一个里程碑。
尽管迁往Kotlin有种种好处,但Strulovich也列举了此番计划的一些显著缺点,至少对大型应用程序来讲确实存在不少风险。
首先,Java和Kotlin之间的人气水平仍有巨大差距,导致后者生态中的可用工具较少。另外,这些工具还必须考虑到Kotlin与Java之间的互操作性,这就让情况变得更为复杂。尽管两种语言间号称有100%的互操作性,但Meta还是发现自己不得不继续保留部分Java代码。
Strulovich指出:“Kotlin也是种流行语言,但跟Java相比,其流行度还远达不到同样的量级。Java是目前全球第二或第三大流行语言(具体取决于衡量标准),所以Kotlin的可用工具数量根本不可能与Java相提并论。更糟糕的是,所有Kotlin工具还要保证能跟Java实现互操作,这就让整个实现过程变得更加复杂。”
Meta还有另一个大问题需要关注:相较于Java,Kotlin的构建速度要慢得多。
“我们从一开始就知道Kotlin的构建速度不及Java。这不光是因为Kotlin及其生态系统更加复杂,还因为Java在编译器优化方面领先了20年。由于我们拥有多个大型应用程序,所以更慢的构建速度肯定会对我们的开发者体验产生负面影响。”
最后还有一点,Strulovich称HTTP客户端项目OkHttp在2019年完成了从Java到Kotlin的迁移。这是个体量很小的项目,只有24000行Kotlin代码。但即使如此,它的Java版本编译时长仅为2.4秒,而Kotlin版本则需要10.2秒。
Meta工程师决定将几乎所有代码全部转换为Kotlin,而没有选择保留大部分Java代码,只是用Kotlin编写新增代码。顺带一提,Linux内核项目和Android开源项目倒是选择了通过增量形式引入Rust代码的方式。
但Meta已经在GitHub上发布了好几款内部Kotlin转换工具,可供其他人直接使用,或者至少能激励大家积极寻求自己的自动化转换方案。这对整个Kotlin生态系统的健康发展和吸引力肯定不是坏事。
Facebook工程师们去年曾介绍称,虽然Kotlin并不难上手,但大规模采用也绝非易事。Facebook拥有自己的Buck构建系统,IntelliJ/Android Studio IDE使用的则是Gradle。
Strulovich还具体介绍了Meta贡献的几款开源Kotlin工具,例如能够让Kotlin获得“与Java对等开发体验”的Pygments库。Meta还开发了Ktfmt,一款面向IntelliJ和Android Studio的插件,能提供“符合google-java-format代码理念的决定性Kotlin格式化程序”。
Strulovich指出,截至目前,Meta的代码库体积平均缩小了11%。Google Home团队则报告称,在将新功能开发迁移至Kotlin之后,其应用程序的代码库也成功瘦身了33%。
Strulovich提到,“我们从网上看到的数字还要更高,但估计不同项目对应的具体瘦身比例可能有很大差异。但无论如何,我们对这个数字感到满意,因为里面删除的行通常是样板代码,Kotlin在这部分代码上确实比Java更优。”
Kotlin最初由JetBrains负责开发,即IntelliJ等开发者工具/IDE的开发商。自2017年以来,Google就一直使用Kotlin构建Android应用程序,并从2018年起联合JetBrains建立起了Kotlin基金会。
2019年,Google Android团队开始采用“Kotlin优先”方法。Google目前拥有70多个部分或全部由Kotlin构建的Android应用,包括Google Maps、Google Home、Google Play、Google Drive以及Google Messages。相较于Java,Google称Kotlin的效率更高、代码安全性更强、代码库体量更小,而且能跟Java实现100%互操作——这大大降低了两种代码的共存难度与旧代码转换门槛。
Google Kotlin产品经理James Ward对Meta的决定表示欢迎,“三年以来,Android一直是Kotlin开发的先行者,也带来了最出色的开发者体验,同时牢牢植根于Java及其生态的互操作性之上。所以,我们很高兴看到Meta能够迁移至Kotlin,并获得初步成功。不少Google团队也经历过类似的从Java到Kotlin的迁移之旅,涵盖Android到服务器端等领域,最终积累起超1100万行Kotlin代码(截至2022年10月)。Meta的案例,再次证明我们选择的这条从Java到Kotlin的迁移道路是正确的。”
好文章,需要你的鼓励
施耐德电气以“新质服务+产业向‘新’行”为主题,第六次参会,展示全新升级的“新质服务体系”,围绕创新驱动、生态协同和行业赋能三大核心领域,以全新升级的“新质服务体系”,助力中国产业向高端化、智能化、绿色化迈进。
香港中文大学联合上海AI实验室推出Dispider系统,首次实现AI视频"边看边聊"能力。通过创新的三分式架构设计,将感知、决策、反应功能独立分离,让AI能像人类一样在观看视频过程中进行实时交流,在StreamingBench测试中显著超越现有系统,为教育、娱乐、医疗、安防等领域的视频AI应用开启新可能。
甲骨文正在成为大规模基础设施供应商的可靠选择。该公司通过AI技术推动应用开发,构建GenAI模型并将智能代理集成到应用套件中。CEO萨弗拉·卡茨透露,公司剩余履约义务达4553亿美元,同比增长4.6倍,并预测OCI收入将从2026财年的180亿美元增长至2030财年的1440亿美元。甲骨文正积极布局AI推理市场,凭借其作为全球最大企业私有数据托管方的优势地位,有望在云计算领域实现重大突破。
Atla公司发布Selene Mini,这是一个仅有80亿参数的AI评估模型,却在11个基准测试中全面超越GPT-4o-mini。通过精心的数据筛选和创新训练策略,该模型不仅能准确评判文本质量,还能在医疗、金融等专业领域表现出色。研究团队将模型完全开源,为AI评估技术的普及和发展做出贡献。