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的迁移道路是正确的。”
好文章,需要你的鼓励
树莓派工程师托尼·罗伯茨通过定制喷漆和更换键帽,将树莓派500+打造成经典BBC Micro电脑的外观。他拆解设备外壳,使用底漆和米色面漆进行改装,并从Signature Plastics购买了与原版风格相近的键帽。这个项目展示了如何轻松改造键盘一体机,唤起人们对家用电脑黄金时代的怀旧情怀,总投资约260美元。
马萨诸塞大学研究团队通过对11个不同领域的大规模实验发现,AI模型存在"新兴偏差"现象:在特定领域学习的错误行为会意外扩散到无关任务中。研究揭示了"后门触发机制"的工作原理,77.8%的测试域出现显著偏差增加。这项发现为AI安全敲响警钟,提醒开发者和用户注意隐藏的安全风险。
在超级碗前夕,AI竞争对手Anthropic和OpenAI就产品广告问题展开激烈交锋。Anthropic发布系列广告抨击ChatGPT即将引入的广告模式,宣称"广告正在进入AI,但不会进入Claude"。OpenAI CEO阿尔特曼回击称广告让产品更易获取,强调不会像Anthropic描述的那样投放广告。OpenAI计划在聊天答案底部展示相关赞助内容,并承诺广告将明确标注且不影响回答质量。
南京大学等机构联合研究团队针对AI视频生成中的"越生成越偏"问题,提出了路径测试时校正技术。该方法通过在视频生成过程中设置智能校准点,参考初始画面进行实时纠偏,无需重新训练模型即可将稳定生成时长从数秒延长至30秒以上。实验显示该技术在保持视觉质量的同时显著降低了计算成本,为长视频AI生成开辟了新路径。