Kotlin में कोई संगामिति कीवर्ड क्यों नहीं हैं?


84

सिंक्रोनाइज़ेशन / कंसीडर के लिए कोई कीवर्ड क्यों नहीं हैं?

अब तक मेरा शोध मुझे एक समाधान देता है, आप कुछ उच्च स्तरीय कक्षाओं को लपेटते हैं और उन्हें संगामिति को संभालने के लिए उपयोग करते हैं।

शुद्ध कोटलिन में एक परियोजना को देखते हुए, यदि कोई छोटा सा अनुकूलित घटक है जो संगामिति आदि को संभालता है, तो क्या करना होगा?

मेरी धारणा है कि कोटलिन जावा के लिए एक सहायक भाषा है, कोटलिन में ९ ०% कोड लिखने के लिए लेकिन कुछ जावा कोड हैं जो कोटलिन के साथ व्यक्त करना संभव नहीं है।

क्या यह सही है? क्या यह इस तरह से होना चाहिए था?



24
कोटलिन के पास ब्लॉक ( 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 कक्षाओं का उपयोग कर सकता है। आप वास्तव में क्या ढूंढ रहे हैं?
जेबी निज़ेट

1
आपके यहां एक से अधिक प्रश्न हैं, आपको एक विषय पर ध्यान केंद्रित करना चाहिए। आपको क्या लगता है कि कौन सी समसामयिक बातें याद आ रही हैं, आप कुछ ऐसा निर्दिष्ट करते हैं जो मुझे लगता है कि यह गायब नहीं है। तब दूसरा प्रश्न वास्तव में एक एसओ प्रश्न नहीं है और यह राय आधारित है (और एक सही दावा नहीं है)।
जैसन माइनर

जवाबों:


143

कोटलीन के साथ कोटलिन 1.1 जारी किया गया था और यह अपने साथ लाता है async..await! कोटलिन संदर्भ डॉक्स , कोटलिन कॉरुटिंस लाइब्रेरी में इसके बारे में और अधिक पढ़ें और उदाहरण के लिए गहराई से कोर्टऑटाइन

कोटलिन कॉरआउट्स के बाहर, आपके पास ये विकल्प हैं:

आपके पास जावा और अधिक सब कुछ है। आपका वाक्यांश "सिंक्रनाइज़ेशन और लॉक" ऊपर दी गई सूची से संतुष्ट है, और फिर आपके पास भाषा परिवर्तन के बिना और भी अधिक है। किसी भी भाषा की विशेषताएँ केवल इसे थोड़ा प्रीतिकर बनाती हैं।

तो आपके पास 100% Kotlin कोड हो सकता है, छोटे Kotlin रनटाइम का उपयोग करके, JVK से JVM रनटाइम, और किसी भी अन्य JVM लाइब्रेरी का उपयोग करना चाहते हैं। जावा कोड की कोई आवश्यकता नहीं, बस जावा (जेवीएम के रूप में) पुस्तकालयों में।

कुछ विशेषताओं का एक त्वरित नमूना:

class SomethingSyncd {
    @Synchronized fun syncFoo() {

    }

    val myLock = Any()

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

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

1
कोई उदाहरण? क्योंकि अगर मैं लिखता हूं तो इसे सिर्फ
वॉन्टेड के

2
@vach मैंने अपने प्रश्न के तहत, अपनी टिप्पणी में लिंक दिए हैं। सिंक्रनाइज़ और अस्थिर एनोटेशन हैं।
जेबी निज़ेट

@ यदि आपके पास आपके द्वारा कोड किया गया कोड है, तो इसे किसी भी त्रुटि संदेश के साथ आपके प्रश्न में शामिल किया जाना चाहिए।
जैसन मिनार्ड

1
@JBNizet मैं अपने लिंक में विलय कर दिया
जेसन Minard

1
@vach ने इस प्रश्न से संबंधित एनोटेशन का एक त्वरित नमूना जोड़ा, CountDownLatchबस पोर्ट जावा के सैंपल या कॉवनेंट के लिए, डॉक्स को लिबास के लिए देखें।
जैसन मिनार्ड

3

मैं अपने स्वयं के प्रश्न का उत्तर दूंगा क्योंकि मेरे प्रश्न का वास्तविक उत्तर कोटलिन चर्चाओं में कहीं गहरा था।

जावा से आने के समय मुझे जो उलझन हुई वह यह थी कि संगामिति कीवर्ड भाषा के शब्द नहीं थे जो वे एनोटेशन थे? मुझे यह अजीब लग रहा था कि सिंक्रोनाइजेशन जैसी महत्वपूर्ण अवधारणाओं को गर्त में रखा गया था, लेकिन अब यह सही समझ में आता है। प्लेटिनम अज्ञेय भाषा की दिशा में कोटलिन जा रहा है, न केवल जेवीएम पर काम करने जा रहा है, बल्कि बहुत कुछ भी। तो सिंक्रनाइज़ और अस्थिर जेवीएम के लिए बहुत विशिष्ट थे, उदाहरण के लिए उन्हें जावास्क्रिप्ट में आवश्यकता नहीं हो सकती है।

संक्षेप में कोटलिन में सब कुछ जावा होता है (पैकेज विजिबिलिटी को छोड़कर) और भी बहुत कुछ, एक बहुत बड़ा अंतर जो किसी अन्य भाषा का नहीं है, वह है कॉउटिन। लेकिन कुछ भी नहीं है जो आप जावा में लिख सकते हैं कि आप कोटलिन में नहीं कर सकते हैं ... (जहाँ तक मुझे पता है)

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.