Ahead-of-time compilation
کمپیوٹر سائنس میں، وقت سے پہلے تالیف (اے او ٹی تالیف) کسی پروگرام کو انجام دینے سے پہلے (اکثر) اعلی سطح کی پروگرامنگ زبان کو (اکثر) نچلی سطح کی زبان میں مرتب کرنے کا عمل ہے، عام طور پر بلڈ ٹائم پر، رن ٹائم پر انجام دینے کے لیے درکار کام کی مقدار کو کم کرنے کے لیے۔ اکثر، یہ ایک اعلی سطحی پروگرامنگ زبان جیسے C یا C + +، یا ایک انٹرمیڈیٹ نمائندگی جیسے جاوا بائٹ کوڈ یا. NET فریم ورک کامن انٹرمیڈیٹ لینگویج (CIL) کوڈ کو ایک مقامی (سسٹم پر منحصر) مشین کوڈ میں مرتب کرنے کے عمل سے وابستہ ہوتا ہے تاکہ نتیجے میں بائنری فائل ایک معیاری مقامی مرتب کی طرح مقامی طور پر انجام دے سکے۔ جب اس مخصوص سیاق و سباق میں استعمال کیا جاتا ہے، تو اسے اکثر جسٹ ان ٹائم (جے آئی ٹی) مرتب کرنے کے برعکس دیکھا جاتا ہے۔ زیادہ عام طور پر بات کرتے ہوئے، اے او ٹی تالیف کی ہدف زبانیں ضروری نہیں کہ مقامی مشین کوڈ کے لیے مخصوص ہوں بلکہ من مانی طور پر بیان کی جاتی ہیں۔ کچھ تعلیمی مقالے اس لفظ کا استعمال جاوا بائٹ کوڈ کو سی میں مرتب کرنے کے عمل یا آپٹیمائزیشن پائپ لائن انجام دینے کے وقت کے معنی میں کرتے ہیں۔ ایک تعلیمی پروجیکٹ اس لفظ کا استعمال V8 (جاوا اسکرپٹ انجن) کے لیے مشین پر منحصر مرضی کے مطابق IR اور جاوا اسکرپٹ کور کے لیے مشین سے آزاد بائٹ کوڈ کے لیے جاوا اسکرپٹ کو پہلے سے مرتب کرنے کے عمل کے لیے کرتا ہے۔ کچھ صنعتی زبان کے نفاذ (مثال کے طور پر۔ کلوجر اور ہرمیس جاوا اسکرپٹ انجن) اس لفظ کا استعمال ماخذ زبان کو VM مخصوص بائٹ کوڈ میں پہلے سے مرتب کرنے کے عمل کے معنی میں کرتے ہیں۔ کونیی (ویب فریم ورک) اس لفظ کو اپنے ایچ ٹی ایم ایل ٹیمپلیٹ اور ٹائپ اسکرپٹ کو جاوا اسکرپٹ میں تبدیل کرنے کے لیے استعمال کرتا ہے۔ درحقیقت، چونکہ تمام جامد تالیف تکنیکی طور پر وقت سے پہلے انجام دی جاتی ہے، اس لیے یہ مخصوص الفاظ اکثر اس طرح کے پہلے سے مرتب کرنے کے عمل پر کسی قسم کے کارکردگی کے فوائد پر زور دینے کے لیے استعمال ہوتے ہیں۔ جاوا کو جاوا بائٹ کوڈ میں مرتب کرنے کے عمل کو اس لیے شاذ و نادر ہی اے او ٹی کہا جاتا ہے کیونکہ یہ عام طور پر ایک ضرورت ہوتی ہے، اصلاح نہیں۔ کم رن ٹائم اوور ہیڈ کچھ پروگرامنگ زبانیں جن میں منظم کوڈ رن ٹائم ہوتا ہے جسے انٹرمیڈیٹ کی نمائندگی کے لیے مرتب کیا جا سکتا ہے وہ جسٹ ان ٹائم (جے آئی ٹی) مرتب کا استعمال کرتی ہیں۔ یہ مختصر طور پر انٹرمیڈیٹ کوڈ کو مشین کوڈ میں مقامی رن کے لیے مرتب کرتا ہے جب کہ انٹرمیڈیٹ کوڈ پر عمل درآمد ہوتا ہے جو کسی ایپلی کیشن کی کارکردگی کو سست کر سکتا ہے۔ وقت سے پہلے مرتب کرنا اس مرحلے کی ضرورت کو ختم کرتا ہے جو عمل کے دوران ہونے کے بجائے عمل سے پہلے ہوتا ہے۔ متحرک طور پر ٹائپ کی گئی زبانوں کے لیے مقامی مشین کوڈ یا دیگر جامد وی ایم بائٹ کوڈ پر پہلے سے مرتب کرنا صرف محدود تعداد میں ہی ممکن ہے۔ مثال کے طور پر، ایرلانگ زبان کے لیے ہائی پرفارمنس ایرلانگ پروجیکٹ (ہائی پی ای) اے او ٹی مرتب جدید جامد قسم کی تعمیر نو کی تکنیکوں اور قسم کے قیاس آرائیوں کی وجہ سے ایسا کر سکتا ہے۔ زیادہ تر حالات میں مکمل طور پر اے او ٹی مرتب کردہ پروگراموں اور لائبریریوں کے ساتھ، رن ٹائم ماحول کے کچھ حصے کو ہٹانا ممکن ہے، اس طرح ڈسک کی جگہ، میموری، بیٹری کی زندگی، اور اسٹارٹ اپ کے اوقات (کوئی جے آئی ٹی وارم اپ مرحلہ نہیں) وغیرہ کی بچت ہوتی ہے۔ اس کی وجہ سے یہ سرایت شدہ یا موبائل آلات میں مفید ثابت ہو سکتا ہے۔ پرفارمنس ٹریڈ آف اے او ٹی مرتب پیچیدہ اور جدید کوڈ کی اصلاح انجام دے سکتے ہیں جو زیادہ تر معاملات میں جے آئی ٹینگ کو بہت زیادہ مہنگا سمجھا جائے گا۔ اس کے برعکس، اے او ٹی عام طور پر جے آئی ٹی میں کچھ ممکنہ اصلاحات انجام نہیں دے سکتا جیسے رن ٹائم پروفائل گائیڈڈ آپٹیمائزیشن (پی جی او)، سیوڈو کانسٹینٹ پروپیگنڈےشن، یا بالواسطہ ورچوئل فنکشن ان لائننگ۔ اے او ٹی کو ٹارگٹ آرکیٹیکچر کے مطابق مرتب کرنا چاہیے جبکہ جے آئی ٹی کوڈ کو مرتب کر سکتا ہے تاکہ وہ اصل سی پی یو کا بہترین استعمال کر سکے جس پر وہ چل رہا ہے، سافٹ ویئر کے جاری ہونے کے کئی سال بعد بھی۔ مزید برآں، جے آئی ٹی مرتب کرنے والے کوڈ پر مفروضے بنا کر قیاس آرائی کے ساتھ ہاٹ کوڈ کو بہتر بنا سکتے ہیں۔ اگر کوئی قیاس آرائی پر مبنی مفروضہ بعد میں غلط ثابت ہوتا ہے تو تیار کردہ کوڈ کو غیر فعال کیا جا سکتا ہے۔ اس طرح کا عمل چل رہے سافٹ ویئر کی کارکردگی کو اس وقت تک سست کر دیتا ہے جب تک کہ انکولی اصلاح کے ذریعے کوڈ کو دوبارہ بہتر نہیں بنایا جاتا۔ اے او ٹی مرتب کرنے والا اس طرح کے مفروضے نہیں بنا سکتا اور اسے مرتب کرنے کے وقت زیادہ سے زیادہ معلومات کا اندازہ لگانے کی ضرورت ہوتی ہے۔ اسے کم مخصوص کوڈ کا سہارا لینے کی ضرورت ہے کیونکہ اسے یہ معلوم نہیں ہے کہ کس قسم کے طریقے سے گزرنا ہے۔ اس طرح کے مسائل کو پروفائل گائیڈڈ آپٹیمائزیشن کے ذریعے کم کیا جا سکتا ہے۔ لیکن اس صورت میں بھی، تیار کردہ کوڈ کو بدلتے ہوئے رن ٹائم پروفائل کے مطابق متحرک طور پر ڈھال نہیں لیا جا سکتا جیسا کہ جے آئی ٹی مرتب کرتا ہے۔ اسٹوریج ٹریڈ آف بھی دیکھیں asm.js کمپائلر (جاوا اسکرپٹ) بارٹوک (CIL) ایکسلسیئر JET (جاوا) جاوا آئی ایل 2 سی پی یو (CIL) نیٹو امیج جنریٹر (CIL) روبی موشن (روبی) حوالہ جات بیرونی لنکس کی رفتار: این جی این طاقتور نئی خصوصیات کے ساتھ آپ کی کارکردگی کو بہتر بناتا ہے-ایم ایس ڈی این میگزین، اپریل 2005 مونو اے او ٹی ایکسلسیئر JET-جاوا کے لیے اے او ٹی کمپائلر کے ساتھ مصدقہ جاوا SE نفاذ asm.js ریئل ٹائم جاوا کی AOT تالیف، حصہ 2: تالیف کی تکنیکوں کا موازنہ-IBM ڈویلپر ورکس، اپریل 2007 سوئنگ پرفارمنس کو بہتر بنانا: JIT بمقابلہ AOT تالیف-لینکس