জ্যাভাকের মতো সংকলকগুলি যখন কোনও পদ্ধতি খাঁটি ফাংশন হয় তা সনাক্ত করার জন্য যথেষ্ট স্মার্ট।
এটি "স্মার্ট যথেষ্ট" কোনও প্রশ্ন নয়। একে বলা হয় পিউরিটি অ্যানালাইসিস এবং সাধারণ ক্ষেত্রে এটি অসম্ভব: এটি হ্যালটিং সমস্যা সমাধানের সমতুল্য।
এখন অবশ্যই, অপ্টিমাইজারগুলি সর্বদা অসম্ভব অসম্ভব কাজ করে, "সাধারণ ক্ষেত্রে অসম্ভব অসম্ভব" এর অর্থ এই নয় যে এটি কখনই কাজ করে না, এর অর্থ কেবল এটি সমস্ত ক্ষেত্রে কাজ করতে পারে না। সুতরাং, কোনও ফাংশন খাঁটি কিনা তা যাচাই করার জন্য বাস্তবে অ্যালগরিদম রয়েছে, এটি প্রায়শই প্রায়শই না হয় ফলাফল "আমি জানি না" হবে যার অর্থ নিরাপত্তা এবং নির্ভুলতার কারণে আপনাকে ধরে নিতে হবে এই বিশেষ ফাংশন নাপাক হতে পারে।
এমনকি এটি যেখানে কাজ করে সেখানেও অ্যালগরিদমগুলি জটিল এবং ব্যয়বহুল।
সুতরাং, এটি সমস্যা # 1: এটি কেবলমাত্র বিশেষ ক্ষেত্রে কাজ করে ।
সমস্যা # 2: গ্রন্থাগারগুলি । কোনও ফাংশনটি বিশুদ্ধ হওয়ার জন্য, এটি কেবল কখনও শুদ্ধ ফাংশনগুলি কল করতে পারে (এবং সেই ফাংশনগুলি কেবল খাঁটি ফাংশনগুলি কল করতে পারে, এবং আরও অনেক কিছু)। জাভাক স্পষ্টতই জাভা সম্পর্কে জানেন এবং এটি কেবল এটি কোড দেখতে পারে যা এটি দেখতে পারে। সুতরাং, যদি আপনার ফাংশনটি অন্য সংকলনের ইউনিটে কোনও ফাংশন কল করে, আপনি খাঁটি কিনা তা জানতে পারবেন না। যদি এটি অন্য ভাষায় লিখিত কোনও ফাংশনকে কল করে, আপনি জানতে পারবেন না। এটি যদি কোনও লাইব্রেরিতে কোনও ফাংশন কল করে যা এখনও ইনস্টল করা নাও হতে পারে তবে আপনি জানতে পারবেন না। ইত্যাদি।
এটি কেবল তখনই কার্যকর হয়, যখন আপনার পুরো প্রোগ্রাম বিশ্লেষণ থাকে, যখন পুরো প্রোগ্রামটি একই ভাষায় লেখা হয় এবং সমস্ত একবারে একবারে সংকলিত হয়। আপনি কোনও লাইব্রেরি ব্যবহার করতে পারবেন না।
সমস্যা # 3: সময়সূচী । একবার কোন অংশটি খাঁটি তা খুঁজে বের করার পরেও আপনাকে সেগুলি আলাদা আলাদা থ্রেডে নির্ধারণ করতে হবে। অথবা না. থ্রেড শুরু করা এবং বন্ধ করা খুব ব্যয়বহুল (বিশেষত জাভাতে)। এমনকি যদি আপনি কোনও থ্রেড পুল রাখেন এবং সেগুলি শুরু বা বন্ধ না করেন তবে থ্রেড প্রসঙ্গের স্যুইচিংও ব্যয়বহুল। আপনার অবশ্যই নিশ্চিত হওয়া দরকার যে গণনাটি সময়সূচী এবং প্রসঙ্গে স্যুইচ করতে সময় লাগে তার চেয়ে উল্লেখযোগ্যভাবে চলবে, অন্যথায় আপনি কর্মক্ষমতা হারাবেন , এটি অর্জন করবেন না।
আপনি এখনই অনুমান হিসাবে, গণনা কতক্ষণ সময় নেবে তা নির্ধারণ করা সাধারণ ক্ষেত্রে অসম্ভব অসম্ভব (এটি সুনির্দিষ্ট সময় লাগবে কি না, আমরা বুঝতে পারি না যে কতটা সময় ব্যয় করতে হবে) এমনকি কঠিন এবং ব্যয়বহুলও বিশেষ ক্ষেত্রে।
পাশে: জাভাক এবং অপ্টিমাইজেশন । নোট করুন যে জাভাকের বেশিরভাগ বাস্তবায়ন আসলে অনেকগুলি অপ্টিমাইজেশন সম্পাদন করে না। ওরাকল জাভ্যাকের বাস্তবায়ন, উদাহরণস্বরূপ, অনুকূলকরণ করতে অন্তর্নিহিত এক্সিকিউশন ইঞ্জিনের উপর নির্ভর করে । এটি আরও একটি সমস্যার দিকে নিয়ে যায়: বলুন, জাভাক সিদ্ধান্ত নিয়েছে যে কোনও নির্দিষ্ট ফাংশন খাঁটি এবং এটি যথেষ্ট ব্যয়বহুল, এবং তাই এটি আলাদা থ্রেডে চালিত করার জন্য এটি সংকলন করে। তারপরে, প্ল্যাটফর্মের অপ্টিমাইজার (উদাহরণস্বরূপ, হটস্পট সি 2 জেআইটি সংকলক) বরাবর আসে এবং পুরো ফাংশনটিকে অপ্টিমাইজ করে। এখন, আপনার খালি থ্রেড কিছুই করছে না। অথবা, আবার কল্পনা করুন, জাভ্যাক অন্য কোনও থ্রেডে কোনও ফাংশন নির্ধারণ করার সিদ্ধান্ত নিয়েছে এবং প্ল্যাটফর্ম অপ্টিমাইজারটি পারে এটি পুরোপুরি অপ্টিমাইজ করুন, এটি থ্রেড সীমানা জুড়ে ইনলাইনিং সম্পাদন করতে পারে না, এবং সুতরাং সম্পূর্ণরূপে অপ্টিমাইজ করা যেতে পারে এমন একটি ফাংশন এখন অকারণে কার্যকর করা হবে।
সুতরাং, এরকম কিছু করা কেবল তখনই বোধগম্য হয় যদি আপনার একক সংকলক একসাথে বেশিরভাগ অপটিমাইজেশন তৈরি করে থাকে, যাতে সংকলকটি বিভিন্ন স্তরের সমস্ত ভিন্নতর অপ্টিমাইজেশান এবং একে অপরের সাথে তাদের মিথস্ক্রিয়া সম্পর্কে জানতে পারে এবং তা কাজে লাগাতে পারে।
দ্রষ্টব্য, উদাহরণস্বরূপ, হটস্পট সি 2 জেআইটি সংকলক আসলে কিছু অটো-ভেক্টরাইজেশন সম্পাদন করে , যা স্বয়ং-সমান্তরালনেরও একটি রূপ।