加入收藏 | 设为首页 | 会员中心 | 我要投稿 河北网 (https://www.hebeiwang.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 建站 > 正文

大局限回收 Kotlin 更换 Java?我们应该知道这些利弊

发布时间:2019-09-01 12:40:49 所属栏目:建站 来源:小小CTO
导读:当大局限回收一门新说话时,有很多差异的身分必要思量,由于工作也许会产生庞大的变革。对付很多人来说,选择一门说话可以说是取决于小我私人偏好,但在 LinkedIn,我们有一个基本团队,认真评估这些根基技能决定的影响。最近,我们经验了评估 Android 开拓语
副问题[/!--empirenews.page--]

当大局限回收一门新说话时,有很多差异的身分必要思量,由于工作也许会产生庞大的变革。对付很多人来说,选择一门说话可以说是取决于小我私人偏好,但在 LinkedIn,我们有一个基本团队,认真评估这些根基技能决定的影响。最近,我们经验了评估 Android 开拓说话的进程。从移动基本办法团队的角度来看,我想与你分享一下,我们在评估说话时所采纳的步调,以及为什么我们最终选择了 Kotlin 说话。

大局限回收 Kotlin 更换 Java?我们应该知道这些利弊

要领

大局限回收移动说话有很多差异的身分必要思量。这样一个抉择会对开拓职员的出产力、雇用、培训本钱以及最终产物发生庞大的影响。譬喻,你也许会进步开拓职员的出产力,并可以或许交付更多的成果,可是必需支付应用措施巨细增进的价钱,这最终会影响用户的下载。为了更好地领略回收特定说话的投资和回报,我们以为,合理的技能说明是我们做出抉择的基本。一旦做出了客观的评估,我们就可以拟定一个最得当整个公司移动开拓的蹊径图。

技能说明

在 Linkedin,Android 开拓超过了差异情势和局限的团队——从开拓大型应用措施的大型团队,到开拓多此中小型应用措施的小型团队,再到只专注于构建器材和基本办法的团队。为了尽也许全面地执行评估,我们创立了一个委员会,由每个应用措施团队的高级开拓职员、基本办法团队和构建器材团队的代表构成。在 LinkedIn 的 Android 开拓配景下,这些是我们研究的规模。

说话特征

当谷歌公布将 Kotlin 作为 Android 开拓的官方支持编程说话时,我们都很是感动。Kotlin 作为一门说话,具有很多 Java 天下中没有的新特征,好比空值安详(null-safety)、扩展、数据类、协程等等。固然我们享受了这些新特征带来的全部甜头,可是 Kotlin 还在计划时删除了某些 Java 特征,好比直接原始范例、静态成员、搜查非常等等。在我们的说明中,我们深入相识了说话计划决定背后的设法,并研究了反编译代码来领略每个特征。这有助于我们未来拟定指导目的,并对我们宣布的代码布满信念。

兼容性

在 LinkedIn 的局限下,假如我们抉择迁徙到一种新的说话,迁徙将是一个很长的进程,尤其是对付包括数百万行代码的代码库。正如领略每种说话的特征很重要一样,思量互操纵性也同样重要。荣幸的是,Kotlin 和 Android Studio 之间的集成常常提供提议并辅佐你重构代码。然而,归根结底,它们是两种差异的说话,让它正常事变只是一个开始。在此进程中,你必定但愿构建一些加强成果。譬喻,我们碰着的一些题目是为静态成员添加 JVM 注解,并确保 Java API 把单一抽象要领(SAM)转换 参数放在最后,这样 Kotlin 编译器就可以行使拖尾 lambda 语法 。

扩展性

构建时刻是移动工程师最优先思量的题目之一。行使 Kotlin,我们估量构建时刻会增进。LinkedIn 的移动开拓从数千行代码到数百万行代码不等;因此,构建时刻的增进也许有很大差别。这也许不会当即引起留意,但跟着时刻的推移,我们会亲近存眷转向 Kotlin 所导致的时刻增进,尤其是 LinkedIn 的局限下。为了测试构建时刻的黑白,我们行使Android Studio Poet 建设了包括差异模块数目、差异 Kotlin 和 Java 代码行的 Android 项目作为模仿,同时保持相同的项目巨细和依靠相关图。我们行使Gradle Profiler 丈量了破除构建和增量构建,以相识构建时刻花在那边。

思量到该项目标局限,它有也许影响从开拓到出产的很多差异方面。运行机遇能是该说明的另一个要害规模。我们在 Kotlin 和 Java 中实现了几种算法作为测试器材,并在物理装备上运行它们。为了使尝试越发真实,我们还在这些测试中启用了ProGuard 。研究功效与“Kotlin 和 Java 在 Android 运行时上的机能评估 ”功效同等。风趣的是,Kotlin 中的大部门开销来自空安值全特征,该特征使要领的每个挪用都具有非可选参数,都不能被编译器映射到根基范例。这就导致了对 Intrinsics.checkParameterIsNotNull 的挪用,它要为我们尝试中的大部门开销认真。

应用措施的巨细是由很多身分造成的。凭证谷歌的说法 ,初始的 Kotlin 尺度库导入将使应用措施的巨细增进约莫 1MB,跟着时刻的推移,更多的 Java 代码被转换成 Kotlin,因为 Kotlin 字节码要领的增进,应用措施将变得更大。荣幸的是,ProGuard 可以或许从 Kotlin 天生的代码中去除并大大镌汰未行使的要领。我们建设了示例应用措施,并将它们从 Java 转换为纯 Kotlin,以相识要领数目和应用措施巨细的开销。

说话进级

移动开拓的远景在不绝变革,相识进级进程很是重要。在已往,我们看到说话进级陪伴着不兼容的变动、构建失败和很多不测错误,这些错误最终迫使我们锁定骨干,乃至执行说话进级。JetBrains 理睬为 Kotlin 提供两种情势的向后兼容性:

新编译器仍将可以行使旧二进制文件(可是旧编译器也许无法辨认新二进制文件,好比 javac 1.6,它无法读取由 javac 1.8 编译的类)。

旧二进制文件将可以在运行时继承和新二进制文件一路事变,而新代码也许必要新依靠项。

在源代码兼容性方面,Kotlin 遵循 API 弃用告诫的模式,一旦进级到新的编译器版本,该告诫就会逐渐变为错误。在已往,我们看到进级凡是会给社区足够的时刻来顺应这些变动。譬喻,KT-21515 中的说话举动变革被标志为告诫,并在接下来的 1.2.x 补丁版本中得以保存,直到 Kotlin 1.3。然而,值得留意的是,JetBrains 并没有声明将在首要版本变动中提供哪种范例的兼容性。

开拓者生态体系

Kotlin 可以或许垂手可得地与 Android Studio 搭配行使并不稀疏,由于 JetBrains 是这两款产物背后的首要孝顺者。大大都(假如不是所有的话)Android Studio 器材都可以无缝地与 Kotlin 一路事变,包罗调试器、内存说明器、Android 说明器等等。值得一提的 Kotlin 特征包罗 Kotlin 自动转换和 Kotlin 反编译器。后者让你深入相识 Kotlin 代码的底层事变机制。

LinkedIn 行使 Gradle 作为 Android 和 Java 产物的现实构建体系。借助 Kotlin- Android Gradle 插件,Kotlin 在 Gradle 中可以顺畅地事变。Gradle 企业版提供长途缓存办理方案。Kotlin 1.2.21 应承 Kotlin 项目行使构建缓存。详细来说,对付 Gradle 构建缓存,它还必要行使 Kotlin Gradle Plugin 1.2.20 和 Gradle 4.3 或更高版本。总的来说,因为回收 Kotlin 而引起的构建器材的变革很少。然而,我们的说明首要齐集在 Gradle 上,也许不合用于其他构建体系,好比 Buck。

(编辑:河北网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读