Precompiled header
کمپیوٹر پروگرامنگ میں، پہلے سے مرتب شدہ ہیڈر (پی سی ایچ) ایک (سی یا سی + +) ہیڈر فائل ہے جو انٹرمیڈیٹ فارم میں مرتب کی جاتی ہے جو مرتب کرنے والے کے لیے عمل کرنے میں تیز ہوتی ہے۔ پہلے سے مرتب شدہ ہیڈرز کا استعمال تالیف کے وقت کو نمایاں طور پر کم کر سکتا ہے، خاص طور پر جب بڑے ہیڈر فائلوں، ہیڈر فائلوں پر لاگو ہوتا ہے جس میں بہت سی دیگر ہیڈر فائلیں شامل ہوتی ہیں، یا ہیڈر فائلیں جو بہت سے ترجمہ یونٹس میں شامل ہوتی ہیں۔ سی اور سی + + پروگرامنگ زبانوں میں، ہیڈر فائل ایک ایسی فائل ہے جس کا متن خود بخود سی پری پروسیسر کے ذریعہ سورس فائل میں پری پروسیسر ہدایت کے استعمال سے کسی اور سورس فائل میں شامل کیا جا سکتا ہے۔ ہیڈر فائلوں میں بعض اوقات بہت زیادہ مقدار میں سورس کوڈ ہو سکتا ہے (مثال کے طور پر، مائیکروسافٹ ونڈوز اور او ایس ایکس پر ہیڈر فائلیں windows.h اور کوکوا/کوکوا. ایچ، بالترتیب)۔ یہ خاص طور پر بڑی "ہیڈر" لائبریریوں کی آمد کے ساتھ سچ ہے جو ٹیمپلیٹس کا وسیع استعمال کرتے ہیں، جیسے ایگن ریاضی لائبریری اور بوسٹ سی + + لائبریریاں۔ وہ تقریبا مکمل طور پر ہیڈر فائلوں کے طور پر لکھے جاتے ہیں جو صارف #includes، رن ٹائم پر منسلک ہونے کے بجائے۔ اس طرح، ہر بار جب صارف اپنا پروگرام مرتب کرتا ہے، تو صارف بنیادی طور پر متعدد ہیڈر لائبریریوں کو بھی دوبارہ مرتب کر رہا ہوتا ہے۔ (یہ غیر "ہیڈر" لائبریریوں میں مشترکہ اشیاء یا متحرک لنک لائبریریوں میں پہلے سے مرتب کیے جائیں گے۔) تالیف کے اوقات کو کم کرنے کے لیے، کچھ مرتب ہیڈر فائلوں کو ایک ایسی شکل میں مرتب کرنے کی اجازت دیتے ہیں جو مرتب کرنے والے کے لیے عمل کرنے کے لیے تیز تر ہو۔ یہ انٹرمیڈیٹ فارم پہلے سے مرتب شدہ ہیڈر کے نام سے جانا جاتا ہے، اور عام طور پر ایکسٹینشن. pch یا اس سے ملتی جلتی فائل میں رکھا جاتا ہے، جیسے کہ. gch جو کہ جی این یو کمپائلر کلیکشن کے تحت ہے۔ استعمال مثال کے طور پر، ایک C + + فائل source.cpp دی گئی ہے جس میں header.hpp:// header.hpp.// source.cpp #include "header.hpp" شامل ہے۔ پہلے سے مرتب کردہ ہیڈر کی خصوصیت کے ساتھ پہلی بار source.cpp مرتب کرتے وقت، مرتب کرنے والا پہلے سے مرتب کردہ ہیڈر، header.pch تیار کرے گا۔ اگلی بار، اگر اس ہیڈر کا ٹائم اسٹیمپ تبدیل نہیں ہوا تو مرتب کرنے والا header.hpp سے متعلق تالیف مرحلے کو چھوڑ سکتا ہے اور اس کے بجائے براہ راست header.pch استعمال کر سکتا ہے۔ عام نفاذ مائیکروسافٹ ویژول سی اور سی + + مائیکروسافٹ ویژول سی + + (ورژن 6 اور نیا) کسی بھی کوڈ کو پہلے سے مرتب کر سکتے ہیں، نہ کہ صرف ہیڈر۔ یہ دو طریقوں سے کیا جا سکتا ہے: یا تو تمام کوڈ کو اس فائل تک پہلے سے مرتب کرنا جس کا نام/Ycfilename آپشن سے میل کھاتا ہو یا (جب/Yc کو کسی فائل نام کے بغیر متعین کیا جاتا ہے) کوڈ میں #pragma hdrstop کے پہلے واقع ہونے تک تمام کوڈ کو پہلے سے مرتب کرنا۔ پہلے سے مرتب کردہ آؤٹ پٹ کو/Yc آپشن کو دیئے گئے فائل نام کے نام سے منسوب فائل میں محفوظ کیا جاتا ہے، جس میں. pch ایکسٹینشن، یا/Fpfilename آپشن کے ذریعہ فراہم کردہ نام کے مطابق فائل میں محفوظ کیا جاتا ہے۔ / یو آپشن، جو/Yc آپشن کے ماتحت ہے اگر ایک ساتھ استعمال کیا جائے تو، مرتب کرنے والے کو اس طرح کی فائل سے پہلے سے مرتب کردہ کوڈ کا استعمال کرنے کا سبب بنتا ہے۔ pch.h (جسے ویژول اسٹوڈیو 2017 سے پہلے stdafx.h کا نام دیا گیا تھا) مائیکروسافٹ ویژول اسٹوڈیو IDE وزرڈ کی طرف سے تیار کردہ ایک فائل ہے، جو معیاری سسٹم اور پروجیکٹ مخصوص دونوں کو بیان کرتی ہے جس میں ایسی فائلیں شامل ہیں جو اکثر استعمال ہوتی ہیں لیکن شاید ہی کبھی تبدیل ہوتی ہیں۔ stdafx.h میں اے ایف ایکس کا مطلب ایپلیکیشن فریم ورک ایکسٹینشنز ہے۔ اے ایف ایکس مائیکروسافٹ فاؤنڈیشن کلاسز (ایم ایف سی) کا اصل مخفف تھا۔ اگرچہ نام stdafx.h ورژن 2017 سے پہلے ایم ایس وی سی پروجیکٹس میں ڈیفالٹ طور پر استعمال کیا گیا تھا، کسی بھی متبادل نام کو دستی طور پر متعین کیا جا سکتا ہے۔ مطابقت پذیر مرتب کرنے والے اس فائل کو پہلے سے مرتب کریں گے تاکہ مجموعی طور پر مرتب کرنے کے اوقات کو کم کیا جا سکے۔ بصری سی + + ماخذ فائل میں #include "pch.h" سے پہلے کچھ بھی مرتب نہیں کرے گا، جب تک کہ مرتب کرنے کا آپشن/یو 'pch.h' غیر چیک شدہ نہ ہو (پہلے سے طے شدہ طور پر) ؛ یہ فرض کرتا ہے کہ ماخذ میں موجود تمام کوڈ اور اس لائن کو پہلے ہی مرتب کیا گیا ہے۔ جی سی سی پہلے سے مرتب شدہ ہیڈرز جی سی سی (3.4 اور نئے) میں سپورٹ کیے جاتے ہیں۔ جی سی سی کا نقطہ نظر وی سی اور ہم آہنگ مرتب کرنے والوں سے ملتا جلتا ہے۔ جی سی سی ہیڈر فائلوں کے پہلے سے مرتب کردہ ورژن کو ". gch" لاحقہ کا استعمال کرتے ہوئے محفوظ کرتا ہے۔ سورس فائل کو مرتب کرتے وقت، مرتب کرنے والا چیک کرتا ہے کہ آیا یہ فائل اسی ڈائرکٹری میں موجود ہے اور اگر ممکن ہو تو اسے استعمال کرتا ہے۔ جی سی سی پہلے سے مرتب کردہ ورژن صرف اس صورت میں استعمال کر سکتا ہے جب وہی مرتب کرنے والے سوئچ سیٹ کیے جائیں جب ہیڈر مرتب کیا گیا تھا اور یہ زیادہ سے زیادہ ایک استعمال کر سکتا ہے۔ مزید برآں، پہلے سے مرتب کردہ ہیڈر سے پہلے صرف پری پروسیسر کی ہدایات رکھی جا سکتی ہیں (کیونکہ اسے کسی بھی مرتب شدہ کوڈ سے پہلے براہ راست یا بالواسطہ طور پر کسی دوسرے عام ہیڈر کے ذریعے شامل کیا جانا چاہیے)۔ جی سی سی خود بخود زیادہ تر ہیڈر فائلوں کی شناخت ان کی توسیع سے کرتا ہے۔ تاہم، اگر یہ ناکام ہو جائے (مثال کے طور پر۔ غیر معیاری ہیڈر ایکسٹینشن کی وجہ سے)،-x سوئچ کو اس بات کو یقینی بنانے کے لیے استعمال کیا جا سکتا ہے کہ جی سی سی فائل کو ہیڈر کے طور پر پیش کرے۔ کلانگ مرتب کرنے والے نے 2009 کے کلانگ 2.5/ایل ایل وی ایم 2.5 میں پی سی ایچ کے لیے سپورٹ شامل کی۔ مرتب کرنے والا ان پٹ سورس کوڈ کو ٹوکنائز کرتا ہے اور ہیڈر کے نحو اور معنی کے تجزیے انجام دیتا ہے، مرتب کرنے والے کے اندرونی تیار کردہ تجریدی نحو درخت (اے ایس ٹی) اور علامتی میز کو پہلے سے مرتب کردہ ہیڈر فائل میں لکھتا ہے۔ کلانگ کی پہلے سے مرتب کردہ ہیڈر اسکیم، کچھ بہتریوں کے ساتھ جیسے کہ ایک پہلے سے مرتب شدہ ہیڈر کی دوسرے کا حوالہ دینے کی صلاحیت، اندرونی طور پر استعمال شدہ، پہلے سے مرتب شدہ ہیڈر، بھی اس کے ماڈیول میکانزم کی بنیاد بناتا ہے۔ یہ وہی بٹ کوڈ فائل فارمیٹ استعمال کرتا ہے جو ایل ایل وی ایم کے ذریعہ استعمال کیا جاتا ہے، جو کامن آبجیکٹ فائل فارمیٹ یا ایکسٹینسیبل لنکنگ فارمیٹ فائلوں کے اندر کلانگ مخصوص حصوں میں منسلک ہوتا ہے۔ سی + + بلڈر ڈیفالٹ پروجیکٹ کنفیگریشن میں، سی + + بلڈر مرتب کرنے والا ماخذ ماڈیول کے ذریعہ شامل تمام ہیڈرز کے لیے پہلے سے مرتب کردہ ہیڈرز کو واضح طور پر اس وقت تک تیار کرتا ہے جب تک کہ لائن #pragma ایچ ڈی آر اسٹاپ نہ مل جائے۔ اگر ممکن ہو تو پروجیکٹ کے تمام ماڈیولز کے لیے پہلے سے مرتب کردہ ہیڈرز کا اشتراک کیا جاتا ہے۔ مثال کے طور پر، بصری اجزاء لائبریری کے ساتھ کام کرتے وقت، پہلے vcl.h ہیڈر کو شامل کرنا عام بات ہے جس میں عام طور پر استعمال ہونے والی زیادہ تر وی سی ایل ہیڈر فائلیں ہوتی ہیں۔ اس طرح، پہلے سے مرتب کردہ ہیڈر کو تمام پروجیکٹ ماڈیولز میں شیئر کیا جا سکتا ہے، جس سے تعمیر کا وقت ڈرامائی طور پر کم ہو جاتا ہے۔ اس کے علاوہ، سی + + بلڈر کو ایک مخصوص ہیڈر فائل کو پہلے سے مرتب کردہ ہیڈر کے طور پر استعمال کرنے کے لیے آلہ بنایا جا سکتا ہے، جو بصری سی + + کے فراہم کردہ طریقہ کار سے ملتا جلتا ہے۔ سی + + بلڈر 2009 نے ایک "پری کمپائلڈ ہیڈر وزرڈ" متعارف کرایا ہے جو شامل ہیڈر فائلوں کے لیے پروجیکٹ کے تمام سورس ماڈیولز کو تجزیہ کرتا ہے، ان کی درجہ بندی کرتا ہے (یعنی۔ ہیڈر فائلوں کو خارج کر دیتا ہے اگر وہ پروجیکٹ کا حصہ ہیں یا انکلڈ گارڈ نہیں ہے) اور مخصوص فائلوں کے لیے پہلے سے مرتب کردہ ہیڈر کو خود بخود تیار اور ٹیسٹ کرتا ہے۔ پری ٹوکنائزڈ ہیڈر (پی ٹی ایچ) ایک ہیڈر فائل ہے جو ایک شکل میں محفوظ کی گئی ہے جسے لیکسیکل تجزیہ کے ذریعے چلایا گیا ہے، لیکن اس پر کوئی سیمنٹک آپریشن نہیں کیا گیا ہے۔ پی ٹی ایچ کی حمایت کرنے سے پہلے پی ٹی ایچ کلانگ میں موجود ہے، اور جی سی سی کی ایک شاخ میں بھی آزمایا گیا ہے۔ مکمل پی سی ایچ میکانزم کے مقابلے میں، پی ٹی ایچ میں زبان (اور بولی) کی آزادی کے فوائد ہیں، کیونکہ لیکسیکل تجزیہ سی-فیملی زبانوں اور فن تعمیر کی آزادی کے لیے یکساں ہے، کیونکہ مختلف ٹارگٹ آرکیٹیکچرز کے لیے مرتب کرتے وقت ٹوکن کا ایک ہی سلسلہ استعمال کیا جا سکتا ہے۔ تاہم اس کا نقصان یہ ہے کہ سادہ لفظی تجزیہ سے آگے نہیں جانا پڑتا ہے، جس کے لیے ہر تالیف کے ساتھ ٹوکن اسٹریم کا نحو اور لفظی تجزیہ کرنے کی ضرورت ہوتی ہے۔ اس کے علاوہ، اسکیلنگ کو سائز کے ساتھ لکیری طور پر مرتب کرنے کا وقت، لیکسیکل ٹوکن میں، پری ٹوکنائزڈ فائل کا، جو ضروری نہیں کہ مکمل طور پر پہلے سے مرتب کرنے کے طریقہ کار کا معاملہ ہو (کلیانگ میں پی سی ایچ بے ترتیب رسائی کی اجازت دیتا ہے)۔ کلانگ کے پری ٹوکنائزیشن میکانزم میں پری پروسیسر کی مدد کے لیے کئی معمولی میکانزم شامل ہیں: فائل کے وجود اور ڈیٹ اسٹیمپ کی معلومات کی کیشنگ، اور ریکارڈنگ انکلیوژن گارڈز تاکہ محفوظ کوڈ کو جلدی سے چھوڑا جا سکے۔ سابقہ ہیڈر سنگل تالیف یونٹ حوالہ جات بیرونی روابط پہلے سے مرتب شدہ ہیڈرز کی دیکھ بھال اور کھانا جی سی سی فریکٹل ایکسٹریم کے ساتھ پہلے سے مرتب شدہ ہیڈرز: پہلے سے مرتب شدہ ہیڈرز ماخذ کوڈ سی (پروگرامنگ زبان) ہیڈرز سی + +