You can edit almost every page by Creating an account. Otherwise, see the FAQ.

سر تیتر از پیش کامپایل شده

از EverybodyWiki Bios & Wiki
پرش به:ناوبری، جستجو


در برنامه نویسی کامپیوتر ، یک سرتیتر از پیش کامپایل شده (C یا C ++ ) سرتیتر فایل است که به یک شکل متوسط کامپایل شده است که عمل تجزیه برای کامپایلر را سرعت می بخشد . استفاده از سرتیتر از پیش کامپایل شده ممکن است به طور قابل توجهی باعث کاهش زمان کامپایل شود ، به ویژه هنگامی که به سرتیتر فایل های بزرگ، سرتیتر فایلی که شامل بسیاری از سرتیتر فایل های دیگر، و یا سرتیتر فایل های شامل در بسیاری از واحد ترجمه هستند ، اضافه می کنیم .

بنیاد و پایه[ویرایش]

در زبانهای برنامه نویسی C و C ++ ، یک سرتیتر فایل ، فایلی است که متن آن ممکن است در فایل منبع دیگری به وسیله ی پیش پردازنده ی C شامل شود ، یا با استفاده از یک دستورالعمل پیش پردازنده در فایل منبع درج شود.

سرتیتر فایل ها گاهی اوقات می تواند حاوی مقادیر بسیار زیادی از کد منبع (به عنوان مثال، سرتیتر فایل ها windows.h و Cocoa/Cocoa.h به ترتیب در مایکروسافت ویندوز و OS X ). این امر به ویژه با ظهور كتابخانه های بزرگ "سر تیتر" كه از الگوهای كلی استفاده می کنند ، مانند كتابخانه ریاضی ایگن و کتابخانه های Boost C ++ ،صحت یافت . آنها تقریباً به طور کامل به عنوان سرتیتر فایل هایی نوشته شده اند که کاربر #include استفاده میکند تا اینکه در زمان اجرا به آن متصل و لینک شود. بنابراین ، هر بار که کاربر برنامه خود را کامپایل می کند ، در واقع مجدداً کتابخانه های سرتیتر بسیاری را دوباره کامپایل می کند. (اینها می توانند در اشیاء یا كتابخانه های پیوند پویا در كتابخانه های غیر "سرتیتر" از پیش کامپایل شوند. )

برای کاهش زمان کامپایل ، بعضی از کامپایلرها اجازه می دهند تا سرتیتر فایل هایشان به شکلی کامپایل شوند که برای پردازش سریعتر کامپایلر باشد. این فرم میانی به عنوان یکسرتیتر های از پیش کامپایل شده معروف است و معمولاً در فایلی که پسوند .pch یا .gch دارد ، در زیر مجموعه ی کامپایلر گنو ذخیره می شود .

طریقه استفاده[ویرایش]

به عنوان مثال ،یک فایل ++c به نام source.cpp داده شده که سرتیتر header.hpp را شامل می شود:

//header.hpp
...
//source.cpp
#include "header.hpp"
...

هنگام کامپایل Source.cpp برای اولین بار فرض اینکه خصوصیات سرتیتر ها ازپیش کامپایل شده است، کامپایلر یک سرتیتر از پیش کامپایل شده ، header.pch تولید می کند. دفعه بعد ، اگر زمان بندی این هدر تغییر نکرد ، کامپایلر می تواند مرحله کامپایل مربوط به header.hpp را پرش کند و در عوض به طور مستقیم از header.pch استفاده کند.

پیاده سازی های متداول[ویرایش]

Microsoft visual C / ++C[ویرایش]

ماکروسافت Visual C ++ (نسخه 6.0 و جدیدتر) [نیازمند منبع] ) می تواند نه فقط سرتیتر ها را بلکه هر کدی را از پیش کامپایل کند. [۱] که این کار را از دو طریق انجام دهد: یا تمام کد ها را در فایلی که نامش با/Yc filename مطابقت دارد از پیش کامپایل می کند ، یا (هنگامی که /Yc بدون هیچ filename مشخص شده است) تمام کد ها را در اولین ظهور #pragma hdrstop در کد [۲] [۳]از پیش کامپایل می کند. خروجی در یک فایلی که نامش از filename گرفته شده است و به /Yc گزینه، با .pch پسوند ، و یا در یک فایل که نامش با توجه به نام های عرضه شده توسط گزینه های /Fp filename بود ، ذخیره می شود. [۳] گزینه /Yu ، مطابق با گزینه /Yc در صورت استفاده باهم ، باعث می شود کامپایلر از کدهای قبلاً کامپایل شده اش از چنین فالی استفاده کند. [۳]

pch.h (به نام stdafx.h قبل از ویژوال استودیو 2017 [۴] ) یک فایل تولید شده توسط است ویژوال استودیو مایکروسافت IDE ، هر دو سیستم استاندارد و خاص پروژه شامل فایل های آن که به طور مکرر استفاده می شود اما به ندرت تغییر می کند را توصیف می کند.

afx در stdafx.h مخفف بسط های چارچوب کاربردی است. AFX مخفف اصلی برای کلاس های بنیادی ماکروسافت است. در حالی که نام stdafx.h به صورت پیش فرض در پروژه های MSVC تا نسخه ی 2017 استفاده می شده و هر نام دیگری به صورت دستی متمایز شده است.


کامپایلر های سازگار این فایل را از قبل کامپایل می کنند تا تعداد دفعات کلی کامپایل را کاهش دهند. visual ++ c هیچ چیزی قبل از#include "pch.h" را در فایل منبع کامپایل نمی کند مگر اینکه گزینه ی کامپایل تیک نخورده باشد یعنی انتخاب نشده باشد (پیش فرض) ؛ این فرضیه تمام کد های موجود در منبع را شامل می شود و نیز شامل آن خطی که کامپایل شده است.

Clang[ویرایش]

کامپایلر clang دارای دو مکانیسم است.

سازوکار اصلی ، ساده و کم قدرت" از پیش نشانه گذاری کردن سرتیتر ها "بود که در آن شماری از نشانه های لغوی در یک یا چند فایل منبع ذخیره می شودکه در آن در واقع یک حافظه نهان است، از این طریق می توان آنها را با سرعت بیشتری در کامپایل های بعدی نسبت به انجام تحلیل واژگانی دوباره روی فایل های منبع اصلی بازیابی کرد. [۵]

در مقایسه با یک مکانیسم سرتیتر که کاملاً از پیش کامپایل شده است ، این مزایای استقلال زبان را دارد ، زیرا تجزیه و تحلیل واژگانی برای زبانهای C ، C ++ ، Objective C و Objective C ++ و استقلال معماری به صورت یکسان در استنتاج مشابه است زیرا می توان از همان دنباله ای از این نشانه ها هنگام کامپاسل کردن برای معماری های مختلف استفاده کرد . [۵] با این حال ، مضرات فراتر نرفتن از تحلیل واژگان ساده را دارد ، و نیازمند آن است که تجزیه و تحلیل نحوی و معنایی دنباله ی نشانه با هر عمل کامپایل کردنی انجام دهد. و زمان کامپایل مقیاس گذاری بصورت خطی با اندازه ، در نشانه های واژگان ، فایل پیش فرض شده ، که لزوماً برای مکانیسم از پیش کامپایل کردن کاملاً مورد استفاده قرار نمی گیرد. [۵]

مکانیزم از پیش نشانه گذاری کردن شامل چندین مکانیسم جزئی برای کمک به پیش پردازنده است: حافظه پنهان از وجود فایل و اطلاعات پایگاه داده، و ضبط نگهبان های ورود به سیستم به گونه ای که از کد محافظت شده می توان به سرعت از پرش کرد. [۵]

بعداً توسعه ظهور مكانيزم يك مكانيسم از پیش کامپایل سرتیتر کاملاً پرتقاطع را ارائه داد. [۶] این هم کد منبع ورودی را نشانه گذاری می کند و تجزیه و تحلیل نحوی و معنایی از آن را انجام می دهد ،و هم درخت نحوی انتزاعی تولید شده داخلی کامپایلر (AST) و جدول نمادها را برای یک فایل سرتیتر از پیش کامپایل شده ارسال می کند. [۶]

در مقایسه با مکانیسم نشانه گذاری کردن سر تیتر ، این مقیاس بسیار بهتر است ، زیرا هنگام خواندن سرتیتر فایل های از پیش کامپایل شده در کامپایلر این واقعیت محدود نیست که ورودی یک دنباله ای (از نشانه های واژگانی) برای خواندن فایل به صورت خطی است ، با استفاده از دنباله ای I / O. [۶] AST به سرتیتر فایل از پیش کامپایل شده نوشته شده است به گونه ای که کامپایلر بتواند آن را با استفاده از I / O با دسترسی تصادفی بخواند ، به ویژه عدم خواندن در قسمت هایی از AST که از قبل کامپایل شده است که کد بعدی در واقع مرجع آن نیست. این یک اتفاق معمول با سرتیتر هایی است که کتابخانه های الگوی بزرگ را ارائه می دهند. [۶] این مسئله مشکل خواندن مقیاس بندی فایل کش را بصورت خطی با اندازه ورودی از پیش کامپایل شده ،از بین می برد. [۶]

با این وجود ، روند در مقایسه با مکانیسم پیش فرض نشانه گذاری کردن عمومی نزولی است. [۵] [۶] سرتیتر از پیش کامپایل شده باید از اطلاعات مربوط به گویش زبان مورد استفاده ، تا مواردی مانند سبک کامنت ها ذر ++C // نسبت به زبانهای غیر C ++ ، معماری هدف ، نسخه کامپایلر و (به طور خاص ، نسخه ساختار داده AST داخلی که کامپایلر از آن استفاده می کند) ، و لیست ماکروهای از پیش پردازنده را ذخیره کند. پس کامپایلر از خواندن مجدد سرتیتر فایل از قبل کامپایل شده می تواند اطمینان حاصل کند که از یک سرتیتر از پیش کامپایلر شده استفاده شده است که برای کامپایل کردن آن ، معتبر است. [۶]

طرح سرتیتر از پیش کامپایل شده ی clang ، با برخی پیشرفت هایی مانند توانایی ارجاع دادن یک سرتیتر از پیش کامپایل شده به دیگری که به صورت داخلی استفاده شده ، همچنین پایه ای برای مکانیسم ماژول های آن است. [۶] از همان فرمت فایل بیت کد استفاده می کند که توسط LLVM به کار گرفته شده است ، در بخش های خاص Clang در پرونده های Common Object File یا پرونده های پیوند دهنده توسعه یافته محصور شده است. [۶]

GCC[ویرایش]

سرتیتر های از پیش کامپایل شده در GCC پشتیبانی می شوند (نسخه ی 3.4 و جدیدتر). رویکرد GCC شبیه به VC و کامپایلرهای سازگار است. GCC با استفاده از پسوند " .gch " نسخه های از پیش کامپایل شده فایلهای سرتیتر را حفظ می کند. هنگام کامپایل کردن یک فایل منبع ، کامپایلر بررسی می کند که آیا این فایل در همان فهرست موجود است و در صورت امکان از آن استفاده می کند.

GCC فقط می تواند از نسخه از پیش کامپایل شده استفاده کند در صورتی که همان سوئیچ کامپایلر همانند سر تیتر کامپایلر تنظیم شده باشد و ممکن است از حداکثر یکی از آنها استفاده کند. علاوه بر این ، فقط دستورالعمل های پیش پردازنده قبل از سرتیتر از پیش کامپایل شده می تواند قرار داده شود (زیرا باید مستقیماً یا غیرمستقیما از طریق سر تیتر عادی دیگری ، قبل از هر کد قابل تکمیل) درج شود.

GCC بطور خودکار بیشتر سرتیتر فایل ها را با پسوند آنها مشخص می کند. اما اگر این کار انجام نشود (مثلاً به دلیل پسوندهای غیر استاندارد سر تیتر) ، از سوئیچ -x می توان برای اطمینان از اینکه GCC با فایل به عنوان سرتیتر درست رفتار می کند ، استفاده کرد.

سازنده C ++[ویرایش]

در پیکربندی پیش فرض پروژه ، کامپایلر C ++ Builder بطور ضمنی سرتیتر های از پیش کامپایل شده را برای همه سرتیتر ها موجود توسط یک ماژول منبع ایجاد می کند تا اینکه خط #pragma hdrstop پیدا شود. [۷] در صورت امکان سرتیتر های از پیش کامپایل شده برای همه ماژول های پروژه به اشتراک گذاشته می شوند. به عنوان مثال ، هنگام کار با کتابخانه ویژوال کامپوننت ، معمول است که ابتدا سرتیتر vcl.h که حاوی بیشتر فایل های سرتیتر رایج VCL است را اضافه کنیم. بنابراین ، سرتیتر از پیش کامپایل شده را می توان در تمام ماژول های پروژه به اشتراک گذاشت ، که باعث کاهش چشمگیر زمان ساخت می شود.

علاوه بر این ، C ++ Builder می تواند برای استفاده از یک سرتیتر فایل خاص به عنوانسرتیتر از پیش کامپایل شده مشابه مکانیسم ارائه شده توسط Visual C ++ ، ایجاد شود.

زبان C ++ Builder 2009 یک "سرتیتر از پیش کامپایل شده جادوگر" را معرفی می کند که تجزیه تمام ماژول منبع این پروژه برای سرتیتر فایل های گنجانده شده است، طبقه بندی آنها (یعنی مانع فایل های هدر صورتی که بخشی از این پروژه می باشد و یا لازم نیست شامل گارد ) و تولید یک سرتیتر از پیش کامپایل شده برای فایل های مشخص شده را بطور خودکار آزمایش می کند.

همچنین ببینید[ویرایش]

  • واحد تلفیقی تک
  • عنوان پیشوند

منابع[ویرایش]

منابع[ویرایش]

لینک های خارجی[ویرایش]


This article "سر تیتر از پیش کامپایل شده" is from Wikipedia. The list of its authors can be seen in its historical and/or the page Edithistory:سر تیتر از پیش کامپایل شده. Articles copied from Draft Namespace on Wikipedia could be seen on the Draft Namespace of Wikipedia and not main one.



Read or create/edit this page in another language[ویرایش]