Ahead-of-time compilation
কম্পিউটার বিজ্ঞানে, সময়ের আগে সংকলন (এওটি সংকলন) হল একটি প্রোগ্রাম সম্পাদনের আগে একটি (প্রায়শই) উচ্চ-স্তরের প্রোগ্রামিং ভাষাকে একটি (প্রায়শই) নিম্ন-স্তরের ভাষায় সংকলন করার কাজ, সাধারণত নির্মাণ-সময়ে, যাতে রান টাইমে সম্পাদন করার জন্য প্রয়োজনীয় কাজের পরিমাণ হ্রাস করা যায়। প্রায়শই, এটি একটি উচ্চ-স্তরের প্রোগ্রামিং ভাষা যেমন সি বা সি + +, বা জাভা বাইটকোড বা. নেট ফ্রেমওয়ার্ক কমন ইন্টারমিডিয়েট ল্যাঙ্গুয়েজ (সিআইএল) কোডের মতো একটি মধ্যবর্তী উপস্থাপনাকে একটি নেটিভ (সিস্টেম-নির্ভর) মেশিন কোডে সংকলন করার কাজের সাথে যুক্ত করা হয় যাতে ফলস্বরূপ বাইনারি ফাইলটি একটি স্ট্যান্ডার্ড নেটিভ কম্পাইলারের মতো স্থানীয়ভাবে কার্যকর করতে পারে। এই নির্দিষ্ট প্রসঙ্গে ব্যবহার করার সময়, এটি প্রায়শই জাস্ট-ইন-টাইম (জেআইটি) সংকলনের বিপরীত হিসাবে দেখা হয়। আরও সাধারণভাবে বলতে গেলে, একটি এওটি সংকলনের লক্ষ্য ভাষাগুলি অপরিহার্যভাবে স্থানীয় মেশিন কোডের জন্য নির্দিষ্ট নয়, বরং নির্বিচারে সংজ্ঞায়িত করা হয়। কিছু একাডেমিক গবেষণাপত্র এই শব্দটি ব্যবহার করে জাভা বাইটকোডকে সি-তে সংকলন করার কাজ বা অপ্টিমাইজেশন পাইপলাইন সম্পাদন করার সময়কে বোঝায়। একটি একাডেমিক প্রকল্প এই শব্দটি ব্যবহার করে যা ভি8 (জাভাস্ক্রিপ্ট ইঞ্জিন)-এর জন্য একটি মেশিন-নির্ভর অপ্টিমাইজড আইআর এবং জাভাস্ক্রিপ্টকোরের জন্য একটি মেশিন স্বাধীন বাইটকোডে জাভাস্ক্রিপ্টকে প্রাক-সংকলন করার কাজকে বোঝায়। কিছু শিল্প ভাষার বাস্তবায়ন (যেমনঃ ক্লোজুর এবং হার্মিস জাভাস্ক্রিপ্ট ইঞ্জিন) এই শব্দটি ব্যবহার করে উৎস ভাষাকে ভিএম নির্দিষ্ট বাইটকোডে প্রাক-সংকলন করার কাজ বোঝায়। কৌণিক (ওয়েব ফ্রেমওয়ার্ক) এই শব্দটি তার এইচটিএমএল টেমপ্লেট এবং টাইপস্ক্রিপ্টকে জাভাস্ক্রিপ্টে রূপান্তর করার জন্য ব্যবহার করে। প্রকৃতপক্ষে, যেহেতু সমস্ত স্থির সংকলন প্রযুক্তিগতভাবে সময়ের আগে সম্পাদিত হয়, তাই এই নির্দিষ্ট শব্দবিন্যাসটি প্রায়শই এই ধরনের প্রাক-সংকলনের কাজের তুলনায় কিছু ধরনের কার্য সম্পাদনের সুবিধার উপর জোর দেওয়ার জন্য ব্যবহৃত হয়। জাভা থেকে জাভা বাইটকোডে জাভা সংকলন করার কাজটি খুব কমই এওটি হিসাবে উল্লেখ করা হয় কারণ এটি সাধারণত একটি প্রয়োজনীয়তা, অপ্টিমাইজেশন নয়। একটি পরিচালিত কোড রানটাইম সহ কিছু প্রোগ্রামিং ভাষা যা একটি মধ্যবর্তী উপস্থাপনায় সংকলিত করা যেতে পারে জাস্ট-ইন-টাইম (জেআইটি) সংকলন ব্যবহার করে। মধ্যবর্তী কোডটি কার্যকর করার সময় এটি একটি স্থানীয় চালনার জন্য মেশিন কোডে সংক্ষিপ্তভাবে মধ্যবর্তী কোডটি সংকলন করে যা কোনও অ্যাপ্লিকেশনের কার্যকারিতা ধীর করে দিতে পারে। সময়ের আগে সংকলন করা এই পদক্ষেপের প্রয়োজনীয়তা কার্যকর করার সময় না হয়ে কার্যকর করার আগে ঘটে। গতিশীলভাবে টাইপ করা ভাষাগুলির জন্য নেটিভ মেশিন কোড বা অন্যান্য স্ট্যাটিক ভিএম বাইটকোডে সময়ের আগে সংকলন শুধুমাত্র সীমিত সংখ্যক ক্ষেত্রেই সম্ভব। উদাহরণস্বরূপ, উন্নত স্ট্যাটিক টাইপ পুনর্গঠন কৌশল এবং টাইপ অনুমানের কারণে এরলাং ভাষার জন্য হাই পারফরম্যান্স এরলাং প্রজেক্ট (হাইপিই) এওটি সংকলক এটি করতে পারে। সম্পূর্ণরূপে এওটি সংকলিত প্রোগ্রাম এবং লাইব্রেরির সাথে বেশিরভাগ পরিস্থিতিতে, রানটাইম পরিবেশের কিছু অংশ অপসারণ করা সম্ভব, এইভাবে ডিস্কের স্থান, মেমরি, ব্যাটারি লাইফ এবং স্টার্টআপের সময় (কোনও জেআইটি ওয়ার্মআপ পর্যায় নেই) ইত্যাদি সাশ্রয় করা সম্ভব। এই কারণে, এটি এমবেডেড বা মোবাইল ডিভাইসে কার্যকর হতে পারে। পারফরম্যান্স ট্রেড-অফ এ. ও. টি কম্পাইলারগুলি জটিল এবং উন্নত কোড অপ্টিমাইজেশন সম্পাদন করতে পারে যা জে. আই. টি-এর বেশিরভাগ ক্ষেত্রেই খুব ব্যয়বহুল বলে বিবেচিত হবে। এর বিপরীতে, এ. ও. টি সাধারণত জে. আই. টি-তে রানটাইম প্রোফাইল-গাইডেড অপ্টিমাইজেশন (পি. জি. ও), সিউডো-কনস্ট্যান্ট প্রোপাগেশন বা ইনডাইরেক্ট-ভার্চ্যুয়াল ফাংশন ইনলাইনিং-এর মতো সম্ভাব্য কিছু অপ্টিমাইজেশন সম্পাদন করতে পারে না। এওটি-কে অবশ্যই একটি টার্গেট আর্কিটেকচারে সংকলন করতে হবে যখন একটি জেআইটি কোডটি সংকলন করতে পারে যাতে এটি যে প্রকৃত সিপিইউতে চলছে তার সর্বোত্তম ব্যবহার করতে পারে, এমনকি সফ্টওয়্যারটি প্রকাশের কয়েক বছর পরেও। উপরন্তু, জে. আই. টি কম্পাইলারগুলি কোডের উপর অনুমান করে হট কোডকে অনুমানমূলকভাবে অপ্টিমাইজ করতে পারে। একটি অনুমানমূলক অনুমান পরে ভুল প্রমাণিত হলে উত্পন্ন কোডটি অপ্টিমাইজ করা যেতে পারে। এই ধরনের অপারেশন চলমান সফ্টওয়্যারের কার্যকারিতা ধীর করে দেয় যতক্ষণ না কোডটি আবার অভিযোজিত অপ্টিমাইজেশনের মাধ্যমে অপ্টিমাইজ করা হয়। একটি এ. ও. টি সংকলক এই ধরনের অনুমান করতে পারে না এবং সংকলনের সময় যতটা সম্ভব তথ্য অনুমান করা প্রয়োজন। এটির কম বিশেষায়িত কোড অবলম্বন করা প্রয়োজন কারণ এটি জানতে পারে না যে কোন ধরনের একটি পদ্ধতির মাধ্যমে যাবে। প্রোফাইল-নির্দেশিত অপ্টিমাইজেশনের মাধ্যমে এই ধরনের সমস্যাগুলি দূর করা যেতে পারে। কিন্তু এই ক্ষেত্রেও, জেনারেটেড কোডটি জে. আই. টি কম্পাইলারের মতো পরিবর্তনশীল রানটাইম প্রোফাইলে গতিশীলভাবে অভিযোজিত হতে পারে না। আরও দেখুন asm.js কম্পাইলার (জাভাস্ক্রিপ্ট) বার্টক (CIL) এক্সেলসিয়র জেইটি (জাভা) জাভা আইএল2সিপিইউ-এর জন্য জিএনইউ কম্পাইলার (CIL) নেটিভ ইমেজ জেনারেটর (CIL) রুবিমোশন (রুবি) রেফারেন্স বাহ্যিক লিঙ্ক গতিঃ এনজেন শক্তিশালী নতুন বৈশিষ্ট্যগুলির সাথে আপনার পারফরম্যান্সকে উন্নত করে-এমএসডিএন ম্যাগাজিন, এপ্রিল 2005 মোনো এওটি এক্সেলসিয়র জেইটি-জাভার জন্য এওটি কম্পাইলার জিএনইউ কম্পাইলারের সাথে প্রত্যয়িত জাভা এসই বাস্তবায়ন asm.js রিয়েল-টাইম জাভা, অংশ 2: সংকলন কৌশলগুলির তুলনা-আইবিএম ডেভেলপার ওয়ার্কস, এপ্রিল 2007 সুইং পারফরম্যান্সের উন্নতিঃ জেআইটি বনাম এওটি সংকলন-লিনাক্স