मुझे पहले बताएं कि मुझे जावा का काफी अनुभव है, लेकिन अभी हाल ही में कार्यात्मक भाषाओं में दिलचस्पी हुई है। हाल ही में मैंने स्काला को देखना शुरू किया है, जो बहुत अच्छी भाषा की तरह लगती है।
हालाँकि, मैं स्कैला में प्रोग्रामिंग में स्काला के अभिनेता ढांचे के बारे में पढ़ रहा हूं , और एक बात है जो मुझे समझ नहीं आ रही है। अध्याय 30.4 में यह है कि का उपयोग कर कहते हैं reactके बजाय receiveबनाता है यह फिर से उपयोग धागे, जो प्रदर्शन के लिए अच्छा है, क्योंकि सूत्र JVM में महंगे हैं करने के लिए संभव।
क्या इसका मतलब यह है कि जब तक मुझे reactइसके बजाय कॉल करने की याद है receive, मैं जितने चाहे उतने अभिनेता शुरू कर सकता हूं? स्काला की खोज करने से पहले, मैं एरलांग के साथ खेल रहा हूं, और प्रोग्रामिंग एरलांग के लेखक ने बिना पसीने के 200,000 से अधिक प्रक्रियाओं के बारे में बताया है। मैं जावा धागे के साथ ऐसा करने से नफरत करता हूँ। एरलांग (और जावा) की तुलना में स्काला में मैं किस तरह की सीमाएं देख रहा हूं?
इसके अलावा, यह धागा स्कैला में फिर से कैसे काम करता है? चलो मान लेते हैं, सादगी के लिए, कि मेरे पास केवल एक धागा है। क्या सभी कलाकार जो मैं इस धागे में क्रमिक रूप से चलना शुरू कर दूंगा, या किसी प्रकार का कार्य-स्विचन होगा? उदाहरण के लिए, यदि मैं दो अभिनेताओं को पिंग-पोंग संदेश देता हूं जो एक-दूसरे को संदेश देते हैं, तो क्या मैं एक ही धागे में शुरू होने पर गतिरोध का जोखिम उठाऊंगा?
स्काला में प्रोग्रामिंग के अनुसार , अभिनेताओं का उपयोग reactकरने की तुलना में लिखना अधिक कठिन है receive। यह प्रशंसनीय लगता है, क्योंकि reactवापस नहीं आता है। हालांकि, पुस्तक यह दिखाने के लिए जाती है कि आप reactएक लूप का उपयोग करके अंदर कैसे डाल सकते हैं Actor.loop। नतीजतन, आप प्राप्त करते हैं
loop {
react {
...
}
}
जो, मेरे लिए, के समान सुंदर लगता है
while (true) {
receive {
...
}
}
जिसका उपयोग पुस्तक में पहले किया गया है। फिर भी, पुस्तक कहती है कि "व्यवहार में, कार्यक्रमों को कम से कम कुछ receiveकी आवश्यकता होगी "। तो मैं यहाँ क्या याद कर रहा हूँ? वापसी के अलावा receiveवह क्या कर सकता है react? और मुझे क्यों परवाह है?
अंत में, जो मुझे समझ में नहीं आता है उसके मूल में आना: पुस्तक reactयह उल्लेख करती है कि थ्रेड को फिर से उपयोग करने के लिए कॉल स्टैक को त्यागना कैसे संभव है। वह कैसे काम करता है? कॉल स्टैक को त्यागना क्यों आवश्यक है? और जब फ़ंक्शन एक अपवाद ( react) को फेंककर समाप्त हो जाता है, तो कॉल स्टैक को क्यों खारिज किया जा सकता है , लेकिन जब यह वापस लौटने ( receive) द्वारा समाप्त नहीं होता है ?
मुझे आभास है कि स्काला में प्रोग्रामिंग यहाँ कुछ प्रमुख मुद्दों पर चमक रहा है, जो शर्म की बात है, क्योंकि अन्यथा यह वास्तव में एक उत्कृष्ट पुस्तक है।