可以在生产中使用“实验性” 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.