GDC(1) GNU GDC(1)

gdc - کامپایلر مبتنی بر GCC برای زبان برنامه‌نویسی D

gdc [-c|-S] [-g] [-pg]
[-Olevel] [-Wwarn...]
[-Idir...] [-Ldir...]
[-foption...] [-mmachine-option...]
[-o outfile] [@file] infile...

تنها پرکاربردترین گزینه‌ها در اینجا فهرست شده‌اند؛ برای سایر موارد به ادامه متن مراجعه کنید.

دستور gdc کامپایلر گنو برای زبان D است و از بسیاری از گزینه‌های مشابه gcc پشتیبانی می‌کند. این راهنما تنها گزینه‌های اختصاصی gdc را مستندسازی می‌کند.

برای هر پرونده ورودی مشخص، پسوند نام پرونده تعیین‌کننده نوع کامپایلی است که انجام می‌شود. انواع نام‌های پرونده ورودی زیر پشتیبانی می‌شوند:

پرونده‌های منبع D.
پرونده‌های منبع Ddoc.
پرونده‌های رابط D.

می‌توانید بیش از یک پرونده ورودی را در خط فرمان gdc مشخص کنید، که هر یک به‌طور جداگانه در فرآیند کامپایل پردازش می‌شوند. اگر گزینه "-o file" را مشخص کنید، تمام پرونده‌های ورودی با یکدیگر کامپایل شده و یک پرونده خروجی واحد به نام file تولید می‌شود. این کار حتی هنگام استفاده از "-S" یا "-c" نیز مجاز است.

یک پرونده رابط D تنها شامل مواردی است که وارد کردن (import) ماژول به آن نیاز دارد، نه کل پیاده‌سازی آن ماژول. این پرونده‌ها را می‌توان با استفاده از گزینه "-H" توسط gdc از یک پرونده منبع D ایجاد کرد. هنگامی که کامپایلر یک اعلان import را حل‌وفصل می‌کند، ابتدا به دنبال پرونده‌های منطبق .di و سپس به دنبال .d می‌گردد.

یک پرونده منبع Ddoc شامل کدهایی به زبان پردازشگر ماکروی D است. این ساختار در درجه اول برای تولید مستندات کاربری از روی کامنت‌های درون کد، با گرایش جزئی به سمت تولید HTML طراحی شده است. اگر یک پرونده منبع .d با رشته "Ddoc" آغاز شود، به عنوان مستندات عمومی در نظر گرفته می‌شود، نه به عنوان یک پرونده منبع D.

این گزینه‌ها بر رفتار زمان اجرای برنامه‌های کامپایل‌شده با gdc تأثیر می‌گذارند.

تولید کد برای تمام نمونه‌سازی‌های قالب (template instantiations). راهبرد پیش‌فرض تولید قالب بر این است که برای اعلان‌هایی که یا به‌طور فرضی نمونه‌سازی شده‌اند (مانند "__traits(compiles, ...)") یا از یک ماژول واردشده می‌آیند که در حال کامپایل نیست، کدی تولید نشود.
تولید کد را برای قراردادهای "assert" غیرفعال می‌کند.
بررسی محدوده آرایه را برای تمام توابع غیرفعال می‌کند که می‌تواند کارایی کدهایی را که به‌طور گسترده از آرایه‌ها استفاده می‌کنند بهبود بخشد. توجه داشته باشید که اگر کد مورد نظر واقعاً محدودیت‌های محدوده آرایه را نقض کند، این گزینه می‌تواند منجر به رفتار غیرقابل پیش‌بینی شود. استفاده از این گزینه در صورتی امن است که مطمئن باشید کد شما هرگز خطای "RangeError" صادر نمی‌کند.
یک جایگزین برای -fbounds-check که امکان کنترل بیشتر بر روی محل فعال یا غیرفعال شدن بررسی محدوده را فراهم می‌کند. مقادیر زیر پشتیبانی می‌شوند:
بررسی محدوده آرایه را برای تمام توابع فعال می‌کند.
بررسی محدوده آرایه را تنها برای توابع @safe فعال می‌کند.
بررسی محدوده آرایه را به‌طور کامل غیرفعال می‌کند.
توابع توکار (built-in) را تشخیص نده مگر اینکه با پیشوند __builtin_ آغاز شوند. به‌طور پیش‌فرض، کامپایلر تشخیص می‌دهد که چه زمانی یک تابع در بسته "core.stdc" یک تابع توکار است.
این گزینه کدی را که هنگام شکست شرط (assertion)، بررسی محدوده یا شکست final switch تولید می‌شود، کنترل می‌کند. مقادیر زیر پشتیبانی می‌شوند:
پرتاب یک خطای "AssertError" همراه با اطلاعات زمینه اضافی.
توقف اجرای برنامه.
پرتاب یک خطای "AssertError" (حالت پیش‌فرض).
کامپایل کدهای شرطی "debug" را در برنامه فعال می‌کند. گزینه -fdebug به‌تنهایی سطح دیباگ را روی 1 تنظیم می‌کند، در حالی که -fdebug= کدهای "debug" مشخص‌شده با هر یک از مقادیر زیر را فعال می‌کند:
کامپایل هر کد "debug" مشخص‌شده توسط ident را فعال می‌کند.
مشخصات https://dlang.org/spec/betterc.html را پیاده‌سازی می‌کند. فرض می‌کند که کامپایل، محیطی بدون کتابخانه زمان اجرای D را هدف قرار داده است.

این معادل کامپایل با گزینه‌های زیر است:

gdc -nophoboslib -fno-exceptions -fno-moduleinfo -fno-rtti
سازگاری درهم‌ریزی نام‌های C++ را با نسخه مشخص‌شده توسط standard تنظیم می‌کند. مقادیر زیر پشتیبانی می‌شوند:
مقدار "__traits(getTargetInfo, "cppStd")" را روی 199711 تنظیم می‌کند.
مقدار "__traits(getTargetInfo, "cppStd")" را روی 201103 تنظیم می‌کند.
مقدار "__traits(getTargetInfo, "cppStd")" را روی 201402 تنظیم می‌کند.
مقدار "__traits(getTargetInfo, "cppStd")" را روی 201703 تنظیم می‌کند. این مقدار پیش‌فرض است.
مقدار "__traits(getTargetInfo, "cppStd")" را روی 202002 تنظیم می‌کند.
مقدار "__traits(getTargetInfo, "cppStd")" را روی 202302 تنظیم می‌کند.
ماژول‌های واردشده (imported) را در فرآیند کامپایل می‌گنجاند، گویی که در خط فرمان مشخص شده‌اند. هنگامی که این گزینه فعال باشد، تمام ماژول‌های واردشده به جز مواردی که بخشی از libphobos هستند کامپایل می‌شوند.
تولید کد را برای قراردادهای پایا ("invariant") کلاس غیرفعال می‌کند.
یک تابع پیش‌فرض main() را هنگام کامپایل تولید می‌کند. این گزینه هنگام اجرای آزمون‌های واحد (unittests) برای یک کتابخانه مفید است، زیرا اجرای آزمون‌های واحد درون کتابخانه را بدون نیاز به تعریف دستی تابع نقطه ورود ممکن می‌سازد. این گزینه زمانی که "main" قبلاً در کد کاربر تعریف شده باشد هیچ اثری ندارد.
تولید "ModuleInfo" و توابع مرتبط را که بدون آن بدون ارجاع باقی می‌مانند غیرفعال می‌کند، که ممکن است امکان پیوند به برنامه‌هایی را فراهم سازد که به زبان D نوشته نشده‌اند. توابعی که تولید نمی‌شوند شامل سازنده‌ها و مخرب‌های ماژول ("static this" و "static ~this")، کدهای "unittest" و توابع ثبت "DSO" برای کدهای پیوندخورده به‌طور پویا هستند.
به کامپایلر دستور می‌دهد تمام ماژول‌های خط فرمان را تجزیه کرده و تحلیل معنایی را روی آن‌ها انجام دهد، اما فقط برای ماژول مشخص‌شده توسط filename کد تولید کند.
تولید کد را برای قراردادهای پس‌شرط "out" غیرفعال می‌کند.
تولید کد را برای قراردادهای پیش‌شرط "in" غیرفعال می‌کند.
یک تغییر آینده زبان D را که با id مشخص شده است فعال می‌کند. مقادیر زیر پشتیبانی می‌شوند:
تمام قابلیت‌های آینده زبان D را فعال می‌کند.
فیلدهای بیتی (bit-fields) را در D پیاده‌سازی می‌کند.
پیشنهاد https://github.com/dlang/DIPs/blob/master/DIPs/other/DIP1000.md (اشاره‌گرهای با دامنه محدود / Scoped pointers) را پیاده‌سازی می‌کند.
پیشنهاد https://github.com/dlang/DIPs/blob/master/DIPs/other/DIP1008.md (مجاز دانستن استثناها در کدهای @nogc) را پیاده‌سازی می‌کند.
پیشنهاد https://github.com/dlang/DIPs/blob/master/DIPs/accepted/DIP1021.md (آرگومان‌های تغییرپذیر تابع) را پیاده‌سازی می‌کند.
پیشنهاد https://github.com/dlang/DIPs/blob/master/DIPs/archive/DIP25.md (ارجاع‌های مهروموم‌شده / Sealed references) را پیاده‌سازی می‌کند.
تولید کد برای تخریب فیلدهای اشیائی را که تا حدی ساخته شده‌اند فعال می‌کند.
تولید برابری ساختار را برای استفاده از مقایسه‌های فیلد‌به‌فیلد فعال می‌کند.
قوانین جستجوی جدیدی را پیاده‌سازی می‌کند که پیش از جستجو در دامنه‌های بالاتر، دامنه فعلی را برای "alias this" بررسی می‌کند.
تبدیل‌های تغییرناپذیر نامطمئنی را که پیش‌تر به اشتباه مجاز بودند ممنوع می‌کند.
پارامترهای "in" را به معنای "scope const [ref]" پیاده‌سازی کرده و مقادیر rvalue را می‌پذیرد.
قراردادهای "in" در متدهای بازنویسی‌شده را به گونه‌ای پیاده‌سازی می‌کند که ابرمجموعه‌ای از قرارداد والد باشند.
تمام دسترسی‌ها به اشیاء حافظه اشتراکی را غیرفعال و ممنوع می‌کند.
آرگومان‌های rvalue را برای پارامترهای "ref" پیاده‌سازی می‌کند.
دسترسی به متغیرهای علامت‌گذاری‌شده با @system را از داخل کدهای @safe غیرفعال می‌کند.
کامپایل در حالت انتشار (release) را فعال می‌کند، که به معنای عدم انتشار بررسی‌های زمان اجرا برای قراردادها و شرط‌های assert است. بررسی محدوده آرایه‌ها برای توابع @system و @trusted انجام نمی‌شود، و شکست شرط‌های assertion رفتار تعریف‌نشده خواهد بود.

این معادل کامپایل با گزینه‌های زیر است:

gdc -fno-assert -fbounds-check=safe -fno-invariants \
    -fno-postconditions -fno-preconditions -fno-switch-errors
یک قابلیت زبان D را که با id مشخص شده است غیرفعال (واگردانی) می‌کند. مقادیر زیر پشتیبانی می‌شوند:
تمام قابلیت‌های قابل بازگردانی زبان D را غیرفعال می‌کند.
پیشنهاد https://github.com/dlang/DIPs/blob/master/DIPs/other/DIP1000.md (اشاره‌گرهای با دامنه محدود) را بازمی‌گرداند.
پیشنهاد https://github.com/dlang/DIPs/blob/master/DIPs/archive/DIP25.md (ارجاع‌های مهروموم‌شده) را بازمی‌گرداند.
تولید کد برای تخریب فیلدهای اشیائی را که تا حدی ساخته شده‌اند غیرفعال می‌کند.
ترفیع نوع صحیح به سبک C را برای عبارت‌های یکانی "+"، "-" و "~" غیرفعال می‌کند.
تولید اطلاعات نوع در زمان اجرا (RTTI) را برای تمام انواع تعریف‌شده توسط کاربر غیرفعال می‌کند. هر کدی که از ویژگی‌های زبان نیازمند به این اطلاعات استفاده کند، منجر به خطا خواهد شد.
این گزینه کنترل می‌کند که در صورت عدم تطابق با هیچ حالتی در یک عبارت "final switch" چه کدی تولید شود. رفتار پیش‌فرض زمان اجرا، پرتاب یک "SwitchError" است. غیرفعال کردن -fswitch-errors به این معنی است که اجرای برنامه بلافاصله متوقف می‌شود.
کامپایل کدهای "unittest" را فعال کرده و شناسه version(unittest) را فعال می‌سازد. این گزینه مستلزم -fassert است.
کامپایل کدهای شرطی "version" را در برنامه فعال می‌کند که توسط هر یک از مقادیر زیر مشخص می‌شوند:
کامپایل هر کد "version" مشخص‌شده توسط ident را فعال می‌کند.
انتشار اعلان‌هایی را که می‌توانند در چندین شیء به عنوان نمادهای ضعیف (weak symbols) تعریف شوند غیرفعال می‌کند. پیش‌فرض این است که تمام نمادهای عمومی به صورت ضعیف منتشر شوند، مگر اینکه مقصد فاقد پشتیبانی از نمادهای ضعیف باشد. غیرفعال کردن این گزینه به این معنی است که نمادهای مشترک به جای آن در COMDAT قرار می‌گیرند یا خصوصی می‌شوند.

این گزینه‌ها دایرکتوری‌ها را برای جستجوی پرونده‌ها، کتابخانه‌ها و سایر بخش‌های کامپایلر مشخص می‌کنند:

مشخص کردن یک دایرکتوری برای جستجوی ماژول‌های واردشده در زمان کامپایل. می‌توان از چندین گزینه -I استفاده کرد و مسیرها به همان ترتیب مشخص‌شده جستجو می‌شوند.
مشخص کردن یک دایرکتوری برای جستجوی پرونده‌ها در ایمپورت‌های رشته‌ای (string imports) در زمان کامپایل. این گزینه برای استفاده از عبارت‌های import(file) الزامی است. می‌توان از چندین گزینه -J استفاده کرد و مسیرها به همان ترتیب جستجو می‌شوند.
هنگام پیوند دادن، یک دایرکتوری برای جستجوی کتابخانه مشخص می‌کند، مشابه با gcc.
این گزینه مکان یافتن پرونده‌های اجرایی، کتابخانه‌ها، پرونده‌های منبع و پرونده‌های داده خود کامپایلر را مشخص می‌کند، مشابه با gcc.
این گزینه مسیرهای پرونده ماژول‌های واردشده را دستکاری می‌کند، به‌طوری‌که اگر یک ماژول واردشده با تمام یا چپ‌ترین بخش module مطابقت داشته باشد، از مسیر پرونده در spec به عنوان مکان جستجوی منابع D استفاده می‌شود. این گزینه زمانی استفاده می‌شود که مسیر پرونده منبع و نام‌ها با سلسله‌مراتب بسته و ماژول یکسان نباشد. به مثال‌های زیر توجه کنید:
gdc test.d -fmodule-file=A.B=foo.d -fmodule-file=C=bar

این به کامپایلر اعلام می‌کند که هنگام وارد کردن A.B در تمام مسیرهای واردسازی به دنبال پرونده منبع foo.d بگردد، و هنگام وارد کردن C دایرکتوری bar/ را جستجو کند، همان‌طور که در کد D زیر شرح داده شده است:

module test;
import A.B;     // Matches A.B, searches for foo.d
import C.D.E;   // Matches C, searches for bar/D/E.d
import A.B.C;   // No match, searches for A/B/C.d
استفاده از dir به عنوان یک زیرشاخه از دایرکتوری gcc شامل منابع و رابط‌های D مختص معماری هدف.
مشخص کردن prefix به عنوان پیشوند برای دایرکتوری gcc شامل منابع و رابط‌های D مختص معماری هدف. اگر prefix نمایانگر یک پوشه باشد، باید اسلش پایانی '/' را اضافه کنید.
عدم جستجو در دایرکتوری‌های استاندارد سیستم برای پرونده‌های منبع و رابط D. تنها دایرکتوری‌هایی که با گزینه‌های -I مشخص شده‌اند (و در صورت لزوم دایرکتوری پرونده فعلی) جستجو می‌شوند.

علاوه بر گزینه‌های متعدد gcc که تولید کد را کنترل می‌کنند، gdc دارای چندین گزینه اختصاصی است.

تولید پرونده‌های رابط D برای تمام ماژول‌های در حال کامپایل. کامپایلر پرونده خروجی را بر اساس نام پرونده ورودی تعیین می‌کند، هرگونه مؤلفه دایرکتوری و پسوند را حذف کرده و پسوند .di را اعمال می‌کند.
مشابه با -H، اما پرونده‌های رابط را در پوشه dir می‌نویسد. این گزینه را می‌توان همراه با -Hf file استفاده کرد تا مسیر پرونده و پوشه خروجی را به‌طور مستقل تنظیم نمود.
مشابه با -H اما پرونده‌های رابط را در file می‌نویسد. این گزینه را می‌توان همراه با -Hd dir استفاده کرد تا مسیر پرونده و پوشه خروجی را به‌طور مستقل تنظیم نمود.
خروجی دادن وابستگی‌های ماژول تمام پرونده‌های منبع در حال کامپایل در قالبی مناسب برای make. کامپایلر یک قاعده make شامل نام پرونده شیء برای آن پرونده منبع، یک دونقطه، و نام تمام پرونده‌های واردشده صادر می‌کند.
مشابه -M اما ماژول‌های واردشده از پوشه‌های بسته کتابخانه استاندارد D را ذکر نمی‌کند.
هنگام استفاده با -M یا -MM، یک file را برای نوشتن وابستگی‌ها در آن مشخص می‌کند. هنگام استفاده با گزینه‌های درایور -MD یا -MMD، گزینه -MF بر پرونده خروجی وابستگی پیش‌فرض اولویت خواهد داشت.
این گزینه برای سازگاری با gcc است و توسط کامپایلر نادیده گرفته می‌شود.
یک هدف ساختگی (phony target) برای هر وابستگی به غیر از ماژول‌های در حال کامپایل خروجی می‌دهد که باعث می‌شود هر یک به چیزی وابسته نباشند.
هدف (target) قاعده صادرشده توسط تولید وابستگی را دقیقاً به رشته‌ای که مشخص می‌کنید تغییر می‌دهد. اگر چندین هدف می‌خواهید، می‌توانید آن‌ها را به صورت یک آرگومان واحد به -MT ارسال کنید، یا از چندین گزینه -MT استفاده نمایید.
مشابه با -MT، اما هر نویسه‌ای را که برای make خاص است نقل‌قول (quote) می‌کند.
این گزینه معادل -M -MF file است. درایور file را با حذف هرگونه مؤلفه دایرکتوری و پسوند از پرونده ورودی و سپس افزودن پسوند .deps تعیین می‌کند.
مشابه -MD اما ماژول‌های واردشده از دایرکتوری‌های بسته کتابخانه استاندارد D را ذکر نمی‌کند.
خروجی دادن اطلاعات توصیف‌کننده محتویات تمام پرونده‌های منبع در حال کامپایل با فرمت JSON در یک پرونده. درایور file را با حذف مؤلفه‌های دایرکتوری و پسوند از پرونده ورودی، و سپس افزودن پسوند .json تعیین می‌کند.
مشابه با -X، اما تمام محتویات JSON را در file مشخص‌شده می‌نویسد.
تولید مستندات "Ddoc" و نوشتن آن در یک پرونده. کامپایلر با حذف هرگونه مؤلفه دایرکتوری و پسوند از پرونده ورودی، و افزودن پسوند .html نام file را مشخص می‌کند.
مشابه با -fdoc، اما مستندات را در پوشه dir می‌نویسد. این گزینه می‌تواند همراه با -fdoc-file=file استفاده شود تا مسیر پرونده و پوشه خروجی را به‌طور مستقل تنظیم کند.
مشابه با -fdoc، اما مستندات را در پرونده file می‌نویسد. این گزینه می‌تواند همراه با -fdoc-dir=dir استفاده شود تا مسیر پرونده و پوشه خروجی را به‌طور مستقل تنظیم کند.
مشخص کردن file به عنوان یک پرونده ماکروی Ddoc برای خواندن. می‌توان از چندین گزینه -fdoc-inc استفاده کرد و پرونده‌ها به همان ترتیب خوانده و پردازش می‌شوند.
برای پرونده‌های منبع D، اعلان‌های C++ متناظر را در file تولید می‌کند.
در پیوند با -fdump-c++-spec= بالا، کامنت‌هایی را برای اعلان‌های نادیده‌گرفته‌شده در هدر C++ تولیدشده اضافه می‌کند.
کد گسترش‌یافته از عبارت‌های "mixin" در D را تولید کرده و منابع پردازش‌شده را در file می‌نویسد. این گزینه برای اشکال‌زدایی خطاهای کامپایل مفید است و کدهای منبع را برای نمایش در دیباگرها آماده می‌سازد.

هشدارها پیام‌های تشخیصی هستند که ساختارهایی را گزارش می‌دهند که ذاتاً نادرست نیستند اما پرخطر بوده یا نشان می‌دهند که احتمالاً اشکالی در برنامه وجود دارد. این پیام‌ها مانع از کامپایل برنامه نمی‌شوند مگر اینکه گزینه -Werror مشخص شده باشد.

تمام پیام‌های هشدار را فعال می‌کند. هشدارها بخش تعریف‌شده‌ای از زبان D نیستند، و تمام ساختارهایی که این گزینه برای آن‌ها پیام هشدار تولید می‌کند کدهای معتبری محسوب می‌شوند.
این گزینه در مورد تمام استفاده‌ها از "alloca" در کد منبع هشدار می‌دهد.
در مورد استفاده‌های نامحدود از alloca، و استفاده‌های محدودی از alloca که کران آن‌ها می‌تواند بزرگتر از n بایت باشد هشدار می‌دهد. گزینه -Wno-alloca-larger-than هشدار -Walloca-larger-than را غیرفعال می‌کند و معادل -Walloca-larger-than=SIZE_MAX یا بزرگتر است.
اگر یک تابع توکار با امضای ناسازگار اعلان شده باشد، هشدار می‌دهد.
در مورد تبدیل نوع‌هایی (cast) که نتیجه تهی (null) یا صفر تولید می‌کنند هشدار می‌دهد. در حال حاضر این بررسی تنها برای تبدیل بین انواع داده موهومی و غیرموهومی، یا تبدیل نوع بین کلاس‌های D و C++ انجام می‌شود.
در مورد استفاده از ویژگی‌ها و نمادهای منسوخ‌شده با ویژگی "deprecated" هشدار نمی‌دهد.
تمام هشدارها را به خطا تبدیل می‌کند.
برخی فلگ‌های هشدار اضافی را که توسط -Wall فعال نمی‌شوند فعال می‌کند.

-Waddress -Wcast-result -Wmismatched-special-enum -Wunknown-pragmas

هنگامی که یک نوع شمارشی (enum) که کامپایلر آن را به عنوان خاص تشخیص می‌دهد با اندازه‌ای متفاوت از نوع توکاری که بازنمایی می‌کند اعلان شود، هشدار می‌دهد.
تمام پیام‌های خطا حاصل از کامپایل‌های فرضی، مانند "__traits(compiles, ...)" را فهرست می‌کند. این گزینه پیام‌ها را به صورت هشدار گزارش نمی‌کند، بنابراین هنگام استفاده از گزینه -Werror این پیام‌ها هرگز تبدیل به خطا نمی‌شوند.
هنگام مواجهه با دستور pragma() که توسط gdc شناخته نمی‌شود هشدار می‌دهد. این با گزینه -fignore-unknown-pragmas تفاوت دارد که در آن پراگمایی که بخشی از زبان D است اما توسط کامپایلر پیاده‌سازی نشده است گزارش نمی‌شود.
در مورد استفاده‌های مشکوک از ماکروهای مورد استفاده برای مدیریت آرگومان‌های متغیر مانند "va_start" هشدار نمی‌دهد.
پراگماهای پشتیبانی‌نشده را به رسمیت نمی‌شناسد. هر pragma() مشاهده‌شده که بخشی از زبان D نباشد منجر به خطا خواهد شد. این گزینه اکنون منسوخ شده است و در نسخه‌های آینده حذف خواهد شد.
حداکثر تعداد پیام‌های خطا را به n محدود می‌کند، که در این نقطه gdc به جای ادامه پردازش کد منبع از کار می‌ایستد. اگر n برابر با 0 باشد (پیش‌فرض)، محدودیتی در تعداد پیام‌های خطای تولیدشده وجود نخواهد داشت.
کد را برای خطاهای نحوی بررسی می‌کند، اما عملاً آن را کامپایل نمی‌کند. این گزینه می‌تواند در پیوند با -fdoc یا -H برای تولید پرونده‌ها به ازای هر ماژول موجود در خط فرمان استفاده شود، بدون اینکه هیچ پرونده خروجی دیگری تولید شود.
اطلاعات تکمیلی در مورد تغییرات زبان D مشخص‌شده با id گزارش می‌دهد. مقادیر زیر پشتیبانی می‌شوند:
فهرست کردن اطلاعات تمام گذارهای زبان D.
فهرست کردن تمام استفاده‌ها از انواع مختلط یا موهومی.
فهرست کردن تمام فیلدهای غیرقابل تغییر که یک نمونه شیء را اشغال می‌کنند.
فهرست کردن تمام استفاده‌ها از "in" روی پارامتر.
فهرست کردن تمام تخصیص‌های پنهان زباله‌روب (GC).
فهرست کردن آمار مربوط به نمونه‌سازی‌های قالب.
فهرست کردن تمام متغیرهایی که به حافظه محلی نخ (Thread Local Storage) می‌روند.

این گزینه‌ها زمانی اعمال می‌شوند که کامپایلر پرونده‌های شیء را در یک پرونده خروجی اجرایی پیوند می‌دهد. اگر کامپایلر مرحله پیوند را انجام ندهد، این گزینه‌ها بی‌اثر خواهند بود.

مشخص کردن کتابخانه‌ای که هنگام پیوند دادن به جای libphobos استفاده می‌شود. گزینه‌های تعیین‌کننده اتصال libphobos مانند -static-libphobos یا -shared-libphobos نادیده گرفته می‌شوند.
مشخص کردن کتابخانه دیباگ برای استفاده به جای libphobos هنگام پیوند دادن. این گزینه تا زمانی که گزینه -g نیز در خط فرمان داده نشده باشد، اثری ندارد. گزینه‌های تعیین‌کننده اتصال libphobos مانند -static-libphobos یا -shared-libphobos نادیده گرفته می‌شوند.
عدم استفاده از Phobos یا کتابخانه زمان اجرای D هنگام پیوند دادن. گزینه‌های تعیین‌کننده اتصال libphobos مانند -static-libphobos یا -shared-libphobos نادیده گرفته می‌شوند. کتابخانه‌های استاندارد سیستم به صورت عادی استفاده می‌شوند، مگر اینکه از -nostdlib یا -nodefaultlibs استفاده شده باشد.
در سیستم‌هایی که libgphobos و libgdruntime را به هر دو شکل کتابخانه اشتراکی و ایستا ارائه می‌دهند، این گزینه استفاده از نسخه اشتراکی را اجباری می‌کند. اگر هنگام پیکربندی کامپایلر نسخه اشتراکی ساخته نشده باشد، این گزینه هیچ اثری نخواهد داشت.
در سیستم‌هایی که libgphobos و libgdruntime را به هر دو شکل کتابخانه اشتراکی و ایستا ارائه می‌دهند، این گزینه استفاده از نسخه ایستا را اجباری می‌کند. اگر هنگام پیکربندی کامپایلر نسخه ایستا ساخته نشده باشد، این گزینه هیچ اثری نخواهد داشت.

این بخش گزینه‌های خط فرمانی را شرح می‌دهد که عمدتاً مورد علاقه توسعه‌دهندگان یا ابزارهای زبان است.

خروجی دادن درخت نحو انتزاعی (AST) فرانت‌اند داخلی پس از مرحله "semantic3". این گزینه تنها برای اشکال‌زدایی خود کامپایلر GNU D کاربرد دارد.
تخلیه اطلاعات مربوط به مراحل پردازش زبان کامپایلر هم‌زمان با کامپایل برنامه منبع. این شامل فهرست کردن تمام ماژول‌هایی است که مراحل "parse"، "semantic"، "semantic2" و "semantic3" را طی می‌کنند؛ تمام ماژول‌های "import" و مسیرهای فایل آن‌ها؛ و تمام بدنه‌های "function" که در حال کامپایل هستند.

gpl(7)، gfdl(7)، fsf-funding(7)، gcc(1) و مدخل‌های Info برای gdc و gcc.

حق نشر (c) 2006-2026 بنیاد نرم‌افزارهای آزاد (Free Software Foundation, Inc.)

اجازه کپی، توزیع و/یا تغییر این سند تحت شرایط «مجوز اسناد آزاد گنو» (GNU Free Documentation License)، نگارش 1.3 یا هر نگارش بعدی منتشرشده توسط بنیاد نرم‌افزارهای آزاد داده می‌شود؛ بدون بخش‌های تغییرناپذیر، بدون متون روی جلد، و بدون متون پشت جلد. نسخه‌ای از مجوز در صفحه راهنمای gfdl(7) گنجانده شده است.

2026-08-10 gcc-16