【问题标题】:Can "experimental" Kotlin coroutines be used in production?可以在生产中使用“实验性”的 Kotlin 协程吗?
【发布时间】:2018-02-24 16:26:51
【问题描述】:

Kotlin 协程可以在生产中使用,它们的实验状态意味着什么?

【问题讨论】:

    标签: kotlin coroutine kotlin-coroutines


    【解决方案1】:

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

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

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

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

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

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

    kotlinx.coroutines 的当前版本专为生产使用而设计。它很好地覆盖了测试,很多东西已经优化,所有的改变都是考虑到与以前编译的代码向后兼容的问题。它确实可以作为各种基于协程的东西的测试平台,因此在相应函数和类的文档中,有一些部分被明确标记为“正在进行中”或“不稳定”。但是,默认情况下,kotlinx.coroutines 中的所有公共 API 都被认为是稳定的,并且会在需要时使用适当的迁移辅助工具进行改进。

    【讨论】:

    • 当我看到我们使用的函数上突出显示的警告时,我仍然感到担心,例如启动,声明The feature "coroutines" is experimental (see more here) 并链接到kotlinlang.org/docs/diagnostics/experimental-coroutines.html
    • 有点像 Catch-22,不是吗?如果没有人试用它们,它们将如何进行实战测试 :) 另一方面,我对 JetBrains 的“实验性”功能的体验远高于其他许多供应商的“生产质量”版本的体验。具体来说,我在协程的实现方面绝对零问题;我看到的唯一“故障”是关于静态类型系统处理它们的一些细节,这对运行时没有影响。他们在 Hazelcast Jet 中通过了相当严格的压力测试和基准测试,而且成绩斐然。
    • 这个答案的部分内容显然是错误的。 整个包是实验性的,而不是其中的某些部分。
    猜你喜欢
    • 2019-04-11
    • 2017-11-08
    • 1970-01-01
    • 2021-10-28
    • 2020-03-13
    • 2018-05-16
    • 2011-05-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多