为什么 Kotlin 中没有并发关键字?

Why there are no concurrency keywords in Kotlin?

为什么 synchronization/concurrency 没有关键字?

到目前为止,我的研究给了我一个解决方案,你包装一些高级 类 并使用它们来处理并发。

给定一个纯 Kotlin 项目,如果需要一个高度优化的小型组件来处理并发等,该怎么办?

我的印象是,Kotlin 是 Java 的辅助语言,90% 的代码都用 Kotlin 编写,但有一些 java 代码无法用 Kotlin 表达。

这样对吗?这就是它的本意吗?

Kotlin 1.1 with Coroutines was released and it brings with it async..await! Read more about it in Kotlin reference docs, Kotlinx Coroutines library and this great in depth Couroutines by Example

在 Kotlin 协程之外,您有以下选择:

您拥有 Java 拥有的一切,甚至更多。你的短语"synchronization and locks"满足上面的列表,然后你有更多而且没有语言变化。任何语言特性只会让它更漂亮。

因此,您可以拥有 100% 的 Kotlin 代码,使用小型 Kotlin 运行时、来自 JDK 的 JVM 运行时,以及您想要使用的任何其他 JVM 库。不需要 Java 代码,只需要 Java(在 JVM 中)库。

一些功能的快速示例:

class SomethingSyncd {
    @Synchronized fun syncFoo() {
        
    }
    
    val myLock = Any()
    
    fun foo() {
        synchronized(myLock) {
            // ... code
        }
    }
    
    @Volatile var thing = mapOf(...)
}

我会回答我自己的问题,因为我的问题的实际答案在 kotlin 讨论的某个深处。

当时 Java 让我感到困惑的是,并发关键字不是语言关键字,它们是注释?对我来说,像同步这样的重要概念是通过注释来处理的,这似乎很奇怪,但现在它完全有意义了。 Kotlin 正朝着成为平台无关语言的方向发展,它不仅适用于 JVM,而且几乎适用于任何东西。因此 synchronized 和 volatile 是 JVM 特有的,例如 javascript 中可能不需要它们。

简而言之,Kotlin 拥有 Java 拥有的一切(包可见性除外),还有更多其他语言所没有的巨大差异是协程。但是在 Java 中没有什么是你在 Kotlin 中不能做的......(据我所知)