腾讯亿级用户规模自研业务的上云实践解读,立即报名 了解详情
写点什么

meta将百万行代码从java移植到kotlin-天生赢家 一触即发首页

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

    阅读完需:约 4 分钟

meta 一直在。meta 的工程师 omer strulovich 解释说,在这个过程中,他们学到了许多有趣的经验教训,并积累了一些有用的方法。


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


meta 工程师必须克服的第一个障碍是,meta 使用的几个内部优化工具无法与 kotlin 正常兼容。例如,meta 必须更新和语法高亮显示工具 pygments 的,并构建一个,用于创建 kotlin 编译器插件。


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


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


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


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


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


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


原文链接



相关阅读:



2022-11-24 08:00781

评论

发布
暂无评论
  • julia创造性地利用了llvm的即时编译功能,这使得它同时拥有了动态类型语言的灵活性和静态类型语言的高性能。

    2020-07-22

  • 为什么linkedin最终选择了kotlin语言?

  • java最黑科技的玩法是字节码编程,从而使得java这门静态语言在运行时可以进行各种动态的代码修改。

    2018-07-03

  • 据谷歌产品经理james lau称,自从谷歌宣布支持kotlin作为android开发的一级开发语言6个月以来,kotlin的使用量翻倍,并且目前超过17%的android studio 3.0项目采用kotlin。

  • 在android平台上使用clojure进行开发,在过去几年中取得了长足的进步,让开发人员可以把它用于完整的应用,比如swiftkey的clarity keyboard。在本文中,我们将检阅当前在android平台上支持clojure的工具的情况。

  • kotlin是jetbrains开发的现代编程语言,可运行于jvm环境同时也能用来开发android应用。它的1.0beta版本已经发布,这里是新版本的特性列表;

  • ibm创建了eclipse omr,一个用于为任何语言创建运行时环境的开源虚拟机工具包。omr旨在让各种语言都能利用虚拟机技术的一般改进,像垃圾收集或硬件集成。为此,ibm正在推广自己名为j9的jvm。

  • saikoa的技术总监eric lafortune,dexguard的创造者,在安卓5.0修订版1(api 21.1)的sdk中发现了一些新的工具,主要是名为jack和jill的两个编译器。这些工具旨在简化安卓的编译流程。

  • jetbrains 正式宣布kotlin 的第一个稳定版本,其基于jvm 并兼容android的新语言。jetbrains 表示,kotlin 打算作为一个“好工具”,驱动设计决策向实用性和互操作性前进。kotlin 希望解决java 中只能通过类库和外部工具来修复的许多问题。

  • 前段时间,第一届kotlinconf召开,宣布[kotlin要支持ios和web开发,infoq记者就此消息,联系到kotlin负责开发者支持的副总裁hadi hariri,了解到了一些进一步信息。

  • 这节课,我们来学习一下go语言的代码生成的玩法。

    2021-01-14

  • 在今天这篇文章中,我和你说了 clang 做了什么,以及提供了什么能力。

    2019-03-28

  • 上周,michael ramirez发布了使用python编写的actionscript 3解析器——asdox 1.0 alpha 2的版本。该解析器建立于针对java的qdox的基础上,它能够从源文件中提取比如类/接口、import语句、javadoc标签和成员声明等一些特定信息。为了对该解析器进行更深入的了解,infoq就此采访了ramirez。

  • 本文来自美团点评技术文章系列。

  • 2019-05-15

  • substratevm的设计初衷是提供一个高启动性能、低内存开销,和能够无缝衔接c代码的java运行时。它是一个独立的运行时,拥有自己的内存管理等组件。

    2018-10-12

  • 本文包含了最新发布的buck和xctool的细节,这是两种facebook内部用于本地android和ios应用程序的构建工具。

  • uber开源自动删除旧代码工具piranha,帮助开发人员解决技术债问题。

  • 根据近期scala路线图所公布的信息来看,scala从版本2.12开始,只能运行在java 8及之后的版本上。infoq找到了adriaan moors(typesafe的scala技术主管)和json zaugg(typesafe工程师),了解到更多关于这个改动的内容,以及scala将如何利用java 8的lambda表达式的细节。

  • kotlin是一门与swift类似的静态类型jvm语言,由jetbrains设计开发并开源。与java相比,kotlin的语法更简洁、更具表达性,而且提供了更多的特性,比如,高阶函数、操作符重载、字符串模板。它与java高度可互操作,可以同时用在一个项目中。

发现更多内容
网站地图