Kotlinに同時実行キーワードがないのはなぜですか?


84

同期/並行性のキーワードがないのはなぜですか?

これまでのところ、私の調査では1つの解決策が得られました。いくつかの高レベルのクラスをラップし、それらを使用して並行性を処理します。

純粋なKotlinでのプロジェクトを考えると、並行性などを処理する高度に最適化された小さなコンポーネントが必要な場合はどうすればよいでしょうか。

私の印象では、KotlinはJavaの支援言語であり、コードの90%をKotlinで記述しますが、Kotlinでは表現できないJavaコードがいくつかあります。

これは正解?これは意図された方法ですか?



24
Kotlinには、同期ブロック(kotlinlang.org/api/latest/jvm/stdlib/kotlin/synchronized.html)、同期メソッド(kotlinlang.org/api/latest/jvm/stdlib/kotlin.jvm/-synchronized)、揮発性フィールド(kotlinlang.org/api/latest/jvm/stdlib/kotlin.jvm/-volatile/…)。また、java.util.concurrentクラスを使用できます。あなたは正確に何を探していますか?
JB Nizet 2016

1
ここに複数の質問があります。1つのトピックに焦点を当てる必要があります。どのような並行性が欠けていると思いますか、欠けていないように私に聞こえるものを指定します。次に、他の質問は実際にはSOの質問ではなく、意見に基づいています(そして正しい主張ではありません)。
ジェイソンミナード2016

1
Kotlinコルーチンの更新についてはgithub.com/Kotlin/kotlinx.coroutinesを参照してください
Jayson Minard

回答:


143

コルーチンを備えたKotlin1.1がリリースされ、それがもたらされましたasync..await!でより多くのそれについて読むKotlinのリファレンスドキュメントKotlinxコルーチンライブラリと深さで、この偉大な例によるCouroutines

Kotlinコルーチン以外には、次のオプションがあります。

Javaが持つすべてのものとそれ以上のものがあります。「同期とロック」というフレーズは上記のリストで満たされ、言語を変更せずにさらに多くのことができます。どの言語機能でも、少しだけきれいになります。

したがって、小さなKotlinランタイム、JDKのJVMランタイム、および使用するその他のJVMライブラリを使用して、100%Kotlinコードを作成できます。Javaコードは必要ありません。Java(JVMのように)ライブラリだけが必要です。

いくつかの機能の簡単なサンプル:

class SomethingSyncd {
    @Synchronized fun syncFoo() {

    }

    val myLock = Any()

    fun foo() {
        synchronized(myLock) {
            // ... code
        }
    }

    @Volatile var thing = mapOf(...)
}

1
例はありますか?cosもし私がメソッドで同期を書くなら、それはそれを受け取らないでしょう...揮発性と同じです...
vach 2016

2
@vachあなたの質問の下で、コメントにリンクを付けました。SynchronizedとVolatileは注釈です。
JB Nizet 2016

@vach試したコードがある場合は、エラーメッセージとともに質問に含める必要があります。
ジェイソンミナード2016

1
@JBNizet私はあなたのリンクに統合しました
Jayson Minard

1
@vachCountDownLatchポートジャバのサンプルなど、この質問に関連するアノテーションの簡単なサンプルを追加しました。Kovenantの場合は、ライブラリのドキュメントを表示します。
ジェイソンミナード2016

3

私の質問に対する実際の答えはコトリンの議論のどこか深いところにあったので、私は自分の質問に答えます。

Javaから来たときに私を混乱させたのは、並行性キーワードが言語キーワードではなく、注釈であるということでしたか?同期のような重要な概念が注釈を介して処理されるのは奇妙に思えましたが、今では完全に理にかなっています。Kotlinは、プラットフォームにとらわれない言語になる方向に進んでいます。jvmだけでなく、ほとんど何でも機能します。したがって、同期および揮発性はjvmに非常に固有であり、たとえばjavascriptでは必要ない場合があります。

一言で言えば、kotlinにはjavaが持つすべてのもの(パッケージの可視性を除く)があり、他の言語にはない大きな違いはコルーチンです。しかし、Javaで書くことができ、kotlinではできないことは何もありません...(私が知る限り)

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.