আমাকে প্রথমে বলি যে আমার কাছে জাভা অভিজ্ঞতা রয়েছে তবে আমি সম্প্রতি কার্যকরী ভাষায় আগ্রহী হয়েছি। সম্প্রতি আমি স্কালার দিকে তাকাতে শুরু করেছি যা দেখতে খুব সুন্দর একটি ভাষা বলে মনে হচ্ছে।
যাইহোক, আমি স্কালায় প্রোগ্রামিংয়ে স্কালার অভিনেতার কাঠামোটি সম্পর্কে পড়ছি , এবং একটি জিনিস আমি বুঝতে পারি না। ৩০.৪ অধ্যায়ে বলা হয়েছে যে reactপরিবর্তে receiveব্যবহার করা থ্রেডগুলি পুনরায় ব্যবহার করা সম্ভব করে তোলে যা কার্য সম্পাদনের পক্ষে ভাল, যেহেতু জেভিএমের মধ্যে থ্রেড ব্যয়বহুল।
এর অর্থ কি, যতক্ষণ না আমি reactতার পরিবর্তে কল receiveকরতে পারি, আমি যতটা অভিনেতাকে পছন্দ করি তা শুরু করতে পারি? স্কালা আবিষ্কার করার আগে, আমি এরলংয়ের সাথে খেলছিলাম, এবং প্রোগ্রামিং এরলংয়ের লেখক ঘাম না ভেঙে 200,000 এরও বেশি প্রক্রিয়া তৈরি করার বিষয়ে গর্বিত করেছেন। আমি জাভা থ্রেড দিয়ে এটি করতে ঘৃণা করব। এরালং (এবং জাভা) এর তুলনায় আমি স্কালায় কোন ধরণের সীমা দেখছি?
এছাড়াও, স্ক্যালায় এই থ্রেডটি কীভাবে পুনরায় ব্যবহার করবে? ধরা যাক, সরলতার জন্য, আমার কেবল একটি থ্রেড রয়েছে। আমি যে সমস্ত অভিনেতা আমি ধারাবাহিকভাবে এই থ্রেডে চালানো শুরু করব, বা কোনও ধরণের টাস্ক-স্যুইচিং ঘটবে? উদাহরণস্বরূপ, যদি আমি দুটি অভিনেতা শুরু করি যা একে অপরকে বার্তা দেয়: তারা যদি একই থ্রেডে শুরু হয় তবে আমি কি অচলতার ঝুঁকি নেব?
প্রোগ্রামিং ইন স্ক্যালাল অনুসারে , অভিনেতাদের লেখার জন্য লেখাগুলি লেখার reactচেয়ে বেশি কঠিন receive। এটি প্রশংসনীয় শোনায়, যেহেতু reactফিরে আসে না। যাইহোক, বইটি আপনি কীভাবে reactএকটি লুপ ব্যবহার করে কোনও লুপের ভিতরে রাখতে পারেন তা দেখিয়ে চলেছে Actor.loop। ফলস্বরূপ, আপনি পান
loop {
react {
...
}
}
যা আমার কাছে দেখতে অনেকটা মিল
while (true) {
receive {
...
}
}
যা বইতে আগে ব্যবহৃত হয়েছে। তবুও, বইটি বলেছে যে "অনুশীলনে, প্রোগ্রামগুলি কমপক্ষে কয়েক'র প্রয়োজন হবে receive"। তাহলে আমি এখানে কী মিস করছি? কি করতে receiveযে কি react, পারব না প্রত্যাবর্তন ব্যতীত? আর আমি কেন যত্ন করব?
অবশেষে, আমি যা বুঝতে পারি না তার মূলে এসে: বইটি উল্লেখ করে রাখে যে কীভাবে reactথ্রেডটি পুনরায় ব্যবহারের জন্য কল স্ট্যাকটি বাতিল করা সম্ভব করে। ওটা কিভাবে কাজ করে? কেন কল স্ট্যাক বাতিল করা প্রয়োজন? এবং কোনও ফাংশন ব্যতিক্রম ( react) ছুঁড়ে দিয়ে শেষ হয়ে গেলে কল স্ট্যাকটি কেন বাতিল করা যেতে পারে , তবে এটি ( receive) ফেরার মাধ্যমে বন্ধ হয়ে গেলে নয় ?
আমার ধারণা আছে যে স্কালায় প্রোগ্রামিং এখানে কিছু মূল বিষয় নিয়ে চকচকে করছে, যা লজ্জাজনক, কারণ অন্যথায় এটি সত্যই একটি দুর্দান্ত বই।