আপনি যে সমস্যাটি বর্ণনা করছেন তা দ্বিগুণ।
- আপনি যে প্রোগ্রামটি লিখছেন তা বাইরে থেকে দেখার সময় সামগ্রিকভাবে অবিচ্ছিন্নভাবে আচরণ করা উচিত ।
- এটি করা উচিত নয় কল সাইট এ দৃশ্যমান একটি ফাংশন কল সম্ভাব্য নিয়ন্ত্রণ মানেনা থাকুক বা না থাকুক।
এটি অর্জনের বেশ কয়েকটি উপায় রয়েছে তবে তারা মূলত এটিকে সিদ্ধ করে দেয়
- একাধিক থ্রেড থাকা (বিমূর্তির কিছু স্তরে)
- ভাষা স্তরে একাধিক ধরণের ক্রিয়াকলাপ রয়েছে, যার সকলকেই এ জাতীয় বলা হয়
foo(4, 7, bar, quux)
।
(1) এর জন্য, আমি একসাথে একাধিক প্রক্রিয়া চালাচ্ছি এবং চালাচ্ছি, একাধিক কার্নেল থ্রেড তৈরি করছি এবং সবুজ থ্রেড বাস্তবায়ন যা ভাষা-রানটাইম স্তর থ্রেডগুলিকে কার্নেলের থ্রেডগুলিতে নির্ধারণ করে। সমস্যার দৃষ্টিকোণ থেকে, তারা একই। এই বিশ্বে কোনও ফাংশন কখনও তার থ্রেডের দৃষ্টিকোণ থেকে ছেড়ে দেয় বা নিয়ন্ত্রণ হারায় না । থ্রেড নিজেই কখনও কখনও নিয়ন্ত্রণ নেই এবং কখনও কখনও চলমান না হয় কিন্তু আপনি এই পৃথিবীতে আপনার নিজের থ্রেডের নিয়ন্ত্রণ ছেড়ে দিতে হবে না। এই মডেলটি ফিট করে এমন একটি সিস্টেমে নতুন থ্রেড ছড়িয়ে দেওয়ার বা বিদ্যমান থ্রেডগুলিতে যোগদানের ক্ষমতা থাকতে পারে। এই মডেলটি ফিট করে এমন একটি সিস্টেমে ইউনিক্সের মতো কোনও থ্রেড সদৃশ করার ক্ষমতা থাকতে পারে বা নাও থাকতে পারে fork
।
(2) আকর্ষণীয়। এটি ন্যায়বিচার করতে আমাদের পরিচিতি এবং নির্মূলকরণ ফর্মগুলি সম্পর্কে কথা বলা উচিত।
আমি দেখাব যে await
জাভাস্ক্রিপ্টের মতো ভাষায় পিছনের দিকে সামঞ্জস্যপূর্ণ উপায়ে কেন অন্তর্ভুক্ত করা যাবে না। মূল ধারণাটি হ'ল ব্যবহারকারীর কাছে প্রতিশ্রুতি প্রকাশ করা এবং সিঙ্ক্রোনাস এবং অ্যাসিনক্রোনাস প্রসঙ্গের মধ্যে পার্থক্য থাকার মাধ্যমে জাভাস্ক্রিপ্ট একটি বাস্তবায়ন বিশদ ফাঁস করেছে যা সিঙ্ক্রোনাস এবং অ্যাসিনক্রোনাস ফাংশনগুলি একত্রে পরিচালনা করতে বাধা দেয়। এমন await
একটি সত্যও আছে যে আপনি অ্যাসিঙ্ক ফাংশন বডিটির বাইরে কোনও প্রতিশ্রুতি দিতে পারবেন না । এই নকশাগুলি পছন্দগুলি "কলকের কাছে অদৃশ্য সংশ্লেষ তৈরি করার" সাথে বেমানান।
আপনি একটি ল্যাম্বডা ব্যবহার করে একটি সিঙ্ক্রোনাস ফাংশন প্রবর্তন করতে পারেন এবং একটি ফাংশন কল দিয়ে এটি নির্মূল করতে পারেন।
সিঙ্ক্রোনাস ফাংশন ভূমিকা:
((x) => {return x + x;})
সিঙ্ক্রোনাস ফাংশন নির্মূল:
f(4)
((x) => {return x + x;})(4)
আপনি এটি অ্যাসিনক্রোনাস ফাংশন ভূমিকা এবং নির্মূলকরণের সাথে বিপরীতে করতে পারেন।
অ্যাসিঙ্ক্রোনাস ফাংশন ভূমিকা
(async (x) => {return x + x;})
অ্যাসিঙ্কোনরাস ফাংশন নির্মূলকরণ (দ্রষ্টব্য: কেবল কোনও async
কার্যের মধ্যে বৈধ )
await (async (x) => {return x + x;})(4)
এখানে মূল সমস্যাটি হ'ল একটি অ্যাসিঙ্ক্রোনাস ফাংশন একটি প্রতিশ্রুতিবদ্ধ অবজেক্ট উত্পাদনকারী একটি সিঙ্ক্রোনাস ফাংশন ।
নোড.জেএস repl এ সিঙ্ক্রোনালি অ্যাসিক্রোনাস ফাংশন কল করার একটি উদাহরণ এখানে।
> (async (x) => {return x + x;})(4)
Promise { 8 }
অনুমানের সাথে আপনি এমন একটি ভাষা থাকতে পারেন, এমনকি একটি গতিশীল টাইপ করা ভাষাও যেখানে অ্যাসিঙ্ক্রোনাস এবং সিঙ্ক্রোনাস ফাংশন কলগুলির মধ্যে পার্থক্য কল সাইটে প্রদর্শিত হয় না এবং সম্ভবত সংজ্ঞা সাইটে প্রদর্শিত হয় না।
এর মতো একটি ভাষা নেওয়া এবং জাভাস্ক্রিপ্টে এটি কমিয়ে আনা সম্ভব, আপনাকে কেবল কার্যকরভাবে সমস্ত ফাংশনকে অবিচ্ছিন্ন করতে হবে।