写点什么

Meta 将百万行代码从 Java 移植到 Kotlin

  • 2022-11-24
    北京
  • 本文字数:1161 字

    阅读完需:约 4 分钟

Meta将百万行代码从Java移植到Kotlin

Meta 一直在将他们的Android代码库从Java移植到Kotlin。Meta 的工程师 Omer Strulovich 解释说,在这个过程中,他们学到了许多有趣的经验教训,并积累了一些有用的方法。


Meta 之所以决定采用 Kotlin 开发 Android 应用,是因为他们看到了Kotlin相对于 Java 的优势,包括可空性和函数式编程支持、更简短的代码,以及创建特定领域语言的可能性。Kotlin 工程师还清楚地知道,他们必须将尽可能多的 Java 代码库移植到 Kotlin,以防止 Java 空指针问题潜入 Kotlin 代码库,并减少需要维护的 Java 代码。这不是一件容易的事,从一开始就需要做相当多的调研工作。


Meta 工程师必须克服的第一个障碍是,Meta 使用的几个内部优化工具无法与 Kotlin 正常兼容。例如,Meta 必须更新ReDex Android字节码优化器和语法高亮显示工具 Pygments 的词法分析器组件,并构建一个Kotlin符号处理(KSP)API,用于创建 Kotlin 编译器插件。


在代码转换方面,Meta 工程师选择使用 Kotlin 官方转换器 J2K,它可以作为编译器插件使用。除了一些特定的框架(包括 JUnit)之外,这种方法工作得非常好。但对于特定的框架,这个工具缺乏足够的知识,无法进行正确的转换。


我们已经遇到了很多需要进行小修复的情况。有些很容易做到(比如替换 isEmpty),有些需要做一些研究工作才能搞清楚(与 JUnit 规则的情况一样),还有一些是针对 J2K 本身的 bug 的变通方法,这些 bug 可能会导致出现任何问题——从构建时错误到运行时行为。


处理这种情况的正确方法包括三个步骤:首先是准备好 Java 代码,然后在 headless 模式的 Android Studio 实例中自动运行 J2K,最后对生成的文件进行后续处理,进行所有所需的重构和修复。Meta 已经开源了许多重构工具,以帮助其他开发人员完成相同的任务。


这些自动化转换过程并不能解决所有的问题,但我们能够优先解决最常见的问题。我们针对模块运行转换脚本(我们贴切地称之为 Kotlinator),优先考虑活跃和简单的模块。然后我们观察生成的代码:它们可以通过编译吗?它们是否可以顺利通过我们的持续集成管道?如果可以,我们就提交它们。如果不可以,我们就研究问题,并设计新的自动重构过程来修复它们。


Meta 已经通过这种方式移植了超过 1000 万行 Kotlin 代码,让大多数的 Meta Android 工程师切换到Kotlin来完成他们的日常工作。这个过程也验证了许多预期的结果,包括更短的生成代码和不变的执行速度。但是,从消极的方面来看,Kotlin 编译器比 Java 编译器慢得多。使用 KSP 来处理注解,改进 Java 存根生成和编译时间,这为优化带来了新的可能性,不过仍然需要持续的努力。


如果你对完整的细节感兴趣,请不要错过 Meta 的这篇关于迁移到 Kotlin 的文章。


原文链接

https://www.infoq.com/news/2022/11/meta-port-java-kotlin/


相关阅读:

Kotlin Multiplatform Mobile 进入 Beta 测试

又一巨头从 Java 迁移到 Kotlin:关键应用全部开始切换、安卓代码库超过千万行 Kotlin 代码

2022-11-24 08:0011721

评论

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

深耕智能边缘研究和应用,英特尔中国研究院、南京英麒联合探索算力前沿

科技热闻

不会PS没关系,AI拼图技术已能以假乱真|斯坦福研究

Openlab_cosmoplat

开源社区 ps

开心档之Go 语言环境安装

雪奈椰子

理性探讨AIGC未来的发展方向

加入高科技仿生人

人工智能 低代码 AIGC

亚信科技AntDB数据库荣获互联网周刊金i奖“2022年度产品”

亚信AntDB数据库

数据库 AntDB 国产数据库 AntDB数据库 企业号 4 月 PK 榜

软件测试/测试开发丨做web自动化时,定位元素常用方法有哪些?

测试人

软件测试 自动化测试 测试开发 Web自动化测试

苹果电脑删除磁盘分区及双系统分区的办法

互联网搬砖工作者

卡奥斯赋能发展引擎,“工赋山东”再加“数”!

Openlab_cosmoplat

工业互联网 开源社区

亮相数字化转型大会!卡奥斯助力两化融合工业转型!

Openlab_cosmoplat

工业互联网 开源社区

迪士尼的“元宇宙梦”醒了

Openlab_cosmoplat

开源社区 元宇宙

让ChatGPT手把手教我们学操作系统是一种怎样的体验?

Java全栈架构师

程序员 AI 后端 操作系统 计算机

智慧公厕解决方案,光明源方案揭秘

光明源智慧厕所

智慧城市

喜报:旺链科技成为龙芯生态重要合作伙伴

旺链科技

区块链 生态合作

ChatGPT已能操控机器人,工程师连代码都不用写,网友:微软在搞天网?

Openlab_cosmoplat

人工智能 机器人 开源社区 ChatGPT

开心档之Go 错误处理

雪奈椰子

如何通过Java代码在PowerPoint 幻灯片中插入公式

在下毛毛雨

PowerPoint 公式 java‘

Feast on Amazon 解决方案

亚马逊云科技 (Amazon Web Services)

人工智能

你的留言,我们都收到了

OceanBase 数据库

数据库 oceanbase

软件测试/测试开发丨4步,用 Docker搭建测试用例平台 TestLink

测试人

Docker 软件测试 自动化测试 测试开发 testlink

阿里云加入“一云多芯”应用创新计划,首批通过金融专有云能力评估

云布道师

混合云

The Foundry Modo 16 Mac版(专业的三维建模软件)

Rose

mac软件下载 Foundry Modo 三维建模软件

国内外低代码开发平台优劣势一览

YonBuilder低代码开发平台

靠近用户侧和数据,算网融合实现极致协同

阿里云CloudImagine

云计算 边缘计算 边缘云

前端培训学习的就业前景怎么样

小谷哥

一次偶然机会发现的MySQL“负优化”

做梦都在改BUG

Java MySQL 数据库 性能优化

格式塔理论

Data 探险实验室

可视化 大屏可视化 可视化看板 大屏布局 仪表板

Double-check 技术:Golang 中多线程编程的必备技能

Jack

golang 设计模式

如何当个优秀的文档工程师?从 TC China 看技术文档工程师的自我修养

NebulaGraph

技术文档

Mac OS如何显示隐藏文件和文件扩展名

互联网搬砖工作者

YonTalk 大咖论道:YonBuilder 低代码开发平台能力解析

YonBuilder低代码开发平台

焱融科技荣获爱分析·信创产品及服务创新奖

焱融科技

#高性能 #分布式文件存储 #文件存储 #全闪存储 #容器存储

Meta将百万行代码从Java移植到Kotlin_语言 & 开发_Sergio De Simone_InfoQ精选文章