可以在生产中使用“实验性” Kotlin协程吗?


Answers:


112

更新:从Kotlin 1.3开始,Kotlin协程不再具有实验性。

Kotlin协程可以并且应该在生产中使用。这是在Kotlin 1.1中正式发布它们的主要原因。在发布它们之后,JetBrains团队致力于保持向后兼容性,以随着次版本的发展而对次版本中引入的任何更改保持一致,同时允许人们在复杂的生产应用中安全地进行尝试。

简而言之,“实验”功能和“普通”功能之间的区别在于,对于普通Kotlin功能,由于具有“完全兼容性”保证,因此不能在次要更新中添加新内容,而对于实验功能,可以添加新内容,但不能删除任何内容(因为向后兼容保证)。

实验性协程使用单独的kotlin.coroutines.experimental程序包名称,因此当协程设计最终确定并移至kotlin.coroutines程序包时,旧的已编译代码不会中断,但会通过单独的支持库继续工作。

关于它们为什么是“实验性的”以及这意味着什么的进一步讨论(长期阅读)可以在Andrey Breslav的论坛帖子中找到。

相同的问题适用于协程支持库。

当前版本kotlinx.coroutines是供生产使用的。它涵盖了相当多的测试,已经对许多事情进行了优化,所有更改都考虑到了与先前编译的代码的向后兼容性问题。它当然可以作为各种基于协程的事物的试验台,因此在相应功能和类的文档中,有些部分被明确标记为“进行中”或“不稳定”。但是,默认情况下,所有公共APIkotlinx.coroutines都被认为是稳定的,并在需要时借助适当的迁移工具进行了改进。


5
当我看到我们使用的功能上的突出警告时,例如启动,声明The feature "coroutines" is experimental (see more here)并链接到kotlinlang.org/docs/diagnostics/experimental-coroutines.html
— Elye,

4
这有点像Catch-22,不是吗?如果没有人尝试,它们将如何经受考验:)另一方面,我对JetBrains的“实验”功能的体验比许多其他供应商发布的“生产质量”的体验要高得多。具体来说,我对协程的执行绝对没有零问题;我看到的唯一“毛刺”是关于静态类型系统对它们的处理的一些细节,这些细节对运行时没有影响。他们在Hazelcast Jet中通过了相当严格的压力测试和基准测试,色彩鲜艳。
— Marko Topolnik,

此答案的某些部分显然是错误的。的整个包是实验性的,不是它的一些部分。
— Jean de Klerk '18
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.