mlton(1) General Commands Manual mlton(1)

mlton - کامپایلر کل‌برنامه برای زبان برنامه‌نویسی استاندارد ام‌ال (SML)

mlton [option ...] file.{c|mlb|o|sml} [file.{c|o|s|S} ...]

دستور MLton از خط فرمان به همراه مجموعه‌ای از گزینه‌ها و به دنبال آن یک نام فایل و فهرستی از فایل‌ها برای کامپایل، اسمبلی و پیوند زدن اجرا می‌شود. ساده‌ترین حالت، اجرای mlton foo.sml است، جایی که foo.sml حاوی یک برنامه معتبر SML است؛ در این حالت MLton برنامه را برای تولید یک فایل اجرایی با نام foo کامپایل می‌کند. از آنجا که MLton از کامپایل جداگانه (separate compilation) پشتیبانی نمی‌کند، برنامه باید کل برنامه‌ای باشد که مایل به کامپایل آن هستید. با این حال، برنامه می‌تواند به امضاها (signatures) و ساختارهای تعریف‌شده در کتابخانه پایه (Basis Library) ارجاع دهد.

برنامه‌های بزرگ‌تر، که چندین فایل را در بر می‌گیرند، می‌توانند با سیستم ML Basis کامپایل شوند. در این حالت، mlton foo.mlb برنامه کامل SML را که توسط پایه foo.mlb شرح داده شده است کامپایل می‌کند، که ممکن است هم فایل‌های SML و هم پایه‌های اضافی را مشخص نماید. برای جزئیات بیشتر به راهنمای MLton مراجعه کنید.

گزینه‌های زمان کامپایل MLton، نام فایل خروجی، میزان پرگویی پیام‌های زمان کامپایل، و انجام یا عدم انجام برخی بهینه‌سازی‌ها را کنترل می‌کنند. آن‌ها همچنین می‌توانند مشخص کنند چه فایل‌های میانی ذخیره شوند و می‌توانند فرایند کامپایل را زودهنگام در یکی از گذرهای میانی متوقف کنند؛ در این صورت می‌توان با ارسال فایل‌های تولیدشده به MLton کامپایل را از سر گرفت. ابزار MLton از پسوند فایل ورودی برای تعیین نوع برنامه ورودی استفاده می‌کند. پسوندهای ممکن عبارتند از: .c، .mlb، .o، .s و .sml.

بدون آرگومان، MLton شماره نسخه را چاپ کرده و خارج می‌شود. برای مشاهده پیام راهنمای نحوه استفاده، MLton را با یک سوییچ نامعتبر، مانند mlton -z اجرا کنید. در توضیحات زیر و در پیام نحوه استفاده، برای فلگ‌هایی که چندین انتخاب را می‌پذیرند (مثلاً {true|false})، اولین مقدار ذکرشده مقدار پیش‌فرض است.

هم‌ترازی اشیا در حافظه را بر اساس مقدار مشخص‌شده (4 یا 8) تنظیم می‌کند. مقدار پیش‌فرض بسته به معماری متفاوت است.
ارسال option به gcc هنگام کامپایل کردن کد اسمبلی. اگر مایلید گزینه‌ای را به اسمبلر ارسال کنید، باید از نحو -Wa, در gcc استفاده کنید.
تعیین فایل اجرایی برای کامپایلر C. کامپایلر C همچنین برای کامپایل کد اسمبلی (فایل‌های .s) به کد شیء (فایل‌های .o) و پیوند دادن کد شیء به یک فایل اجرایی فراخوانی می‌شود.
ارسال option به gcc هنگام کامپایل کردن کد C.
تولید کد شیء بومی (native) از طریق اسمبلی amd64، کد C، کد LLVM، یا اسمبلی x86. با گزینه -codegen native (-codegen amd64 یا -codegen x86)، ابزار MLton معمولاً سریع‌تر کامپایل می‌کند و کد بهتری تولید می‌نماید.
تنظیم مقدار یک ثابت در زمان کامپایل. در ادامه فهرستی از ثابت‌های در دسترس، مقادیر پیش‌فرض آن‌ها و آنچه کنترل می‌کنند آمده است.

Exn.keepHistory {false|true}
فعال‌سازی MLton.Exn.history. تنظیم این مقدار روی true هزینه کارایی به همراه دارد؛ هم در مصرف حافظه استثناها و هم در زمان اجرا، به دلیل کارهای اضافی که باید در هر بار ساخت، پرتاب (raise) و مدیریت (handle) استثنا انجام شود.

تعیین یادداشت‌های پیش‌فرض ML Basis. برای مثال، -default-ann 'warnUnused true' باعث می‌شود هشدارهای متغیرهای استفاده‌نشده به‌طور پیش‌فرض فعال شوند. مقادیر پیش‌فرض می‌توانند توسط یک یادداشت در یک فایل ML Basis بازنویسی شوند.
تعیین انتساب پیش‌فرض برای یک نوع اولیه (primitive). برای مثال، -default-type word64 باعث می‌شود نوع سطح‌بالای word و ساختار سطح‌بالای Word در کتابخانه پایه به ترتیب برابر با Word64.word و Word64:WORD شوند. به همین ترتیب، -default-type intinf باعث می‌شود نوع سطح‌بالای int و ساختار سطح‌بالای Int در کتابخانه پایه به ترتیب برابر با IntInf.int و IntInf:INTEGER شوند.
نادیده گرفتن یادداشت مشخص‌شده ML Basis در تمام فایل‌های ML Basis. برای مثال، جهت مشاهده تمام هشدارهای انطباق (match) و استفاده‌نشده، با این گزینه‌ها کامپایل کنید: -default-ann 'warnUnused true'، -disable-ann forceUsed، -disable-ann nonexhaustiveMatch، -disable-ann redundantMatch، و -disable-ann warnUnused.
نوشتن پیش‌نمونه‌های C (پروتوتیپ‌ها) در file برای تمامی توابع در برنامه که از SML به C صادر (export) شده‌اند.
باعث می‌شود مولد کد بومی x86 نسبت به پیروی از استاندارد ممیز شناور IEEE سخت‌گیرانه عمل کند. به‌طور پیش‌فرض، به دلیل هزینه کارایی، چنین نیست. این گزینه تنها همراه با -codegen x86 اثر دارد.
تنظیم آستانه درون‌خطی‌سازی (inlining) مورداستفاده در بهینه‌ساز. این آستانه معیاری تقریبی از اندازه کد یک رویه است. مقدار پیش‌فرض 320 است.
ذخیره فایل‌های میانی. اگر هیچ آرگومان -keep داده نشود، آنگاه تنها فایل خروجی ذخیره می‌شود.
g فایل‌های تولیدشده .c و .s که به gcc ارسال می‌شوند و فایل‌های تولیدشده .ll که به llvm-as ارسال می‌شوند
o فایل‌های شیء (.o)
ارسال option به gcc هنگام پیوند زدن (linking). می‌توانید از این گزینه برای مشخص کردن مسیرهای جستجوی کتابخانه، مانند -link-opt -Lpath، و کتابخانه‌ها جهت پیوند، مانند -link-opt -lfoo، یا حتی هر دو به‌طور هم‌زمان، مانند -link-opt '-Lpath -lfoo' استفاده کنید. اگر مایلید گزینه‌ای را به پیونددهنده ارسال کنید، باید از نحو -Wl, در gcc استفاده کنید؛ برای مثال: -link-opt '-Wl,--export-dynamic'.
مشخص کردن فایل اجرایی برای اسمبلر .ll به .bc در LLVM؛ می‌تواند برای انتخاب نسخه خاصی از ابزار استفاده شود (مانند -llvm-as llvm-as-14).
ارسال option به llvm-as هنگام اسمبل کردن کد LLVM (.ll به .bc).
مشخص کردن فایل اجرایی برای کامپایلر سیستمی .bc به .o در LLVM؛ می‌تواند برای انتخاب نسخه خاصی از ابزار استفاده شود (مانند -llvm-llc llc-14).
ارسال option به llc هنگام کامپایل کردن کد LLVM (.bc به .o).
مشخص کردن فایل اجرایی برای بهینه‌ساز .bc به .bc در LLVM؛ می‌تواند برای انتخاب نسخه خاصی از ابزار استفاده شود (مانند -llvm-opt opt-14).
ارسال option به opt هنگام بهینه‌سازی کد LLVM (.bc به .bc).
استفاده از file به عنوان نگاشت مسیر ML Basis برای تعریف متغیرهای مسیر اضافی MLB. استفاده مکرر از -mlb-path-map و -mlb-path-var مجاز است، و تعاریف متغیر در نگاشت‌های مسیر متأخرتر نسبت به قبلی‌ها اولویت دارند.
تعریف یک متغیر مسیر اضافی MLB. استفاده مکرر از -mlb-path-map و -mlb-path-var مجاز است، و تعاریف متغیر در نگاشت‌های مسیر متأخرتر نسبت به قبلی‌ها اولویت دارند.
مشخص کردن نام فایل خروجی نهایی. نام پیش‌فرض، همان نام فایل ورودی است که پسوند آن حذف شده و یک پسوند مناسب (که ممکن است خالی باشد) اضافه شده است.
تولید یک فایل اجرایی که داده‌های پروفایلینگ (سنجش کارایی) را جمع‌آوری می‌کند. هنگامی که چنین فایل اجرایی اجرا شود، یک فایل mlmon.out تولید خواهد کرد. صفحه راهنمای mlprof نحوه استخراج اطلاعات از این فایل را شرح می‌دهد.
در صورت درست (true) بودن، پروفایلر داده‌های کارایی را به‌طور جداگانه برای هر شاخه از تعریف یک تابع، عبارت case و عبارت if جمع‌آوری می‌کند.
در صورت درست (true) بودن، پروفایلر داده‌های کارایی را برای تمام توابع موجود در پشته جمع‌آوری می‌کند، نه فقط تابعی که در حال حاضر اجرا می‌شود.
در صورت درست (true) بودن، پروفایلر داده‌های کارایی را به‌طور جداگانه برای هر اعلان (توسعه‌پذیر) val جمع‌آوری می‌کند.
ارسال آرگومان به سیستم زمان اجرا از طریق @MLton. این آرگومان پیش از سایر سوییچ‌های خط فرمان @MLton پردازش خواهد شد. استفاده مکرر از -runtime مجاز است و تمام آرگومان‌ها را به ترتیب ارسال خواهد کرد. اگر یک سوییچ زمان اجرا بیش از یک بار رخ دهد، آخرین تنظیم اثرگذار خواهد بود. نیازی به ارائه @MLton آغازین یا -- پایانی نیست؛ این موارد به‌طور خودکار ارائه خواهند شد.

یک آرگومان برای -runtime ممکن است شامل فاصله خالی باشد، که باعث می‌شود آرگومان توسط زمان اجرا به عنوان توالی‌ای از کلمات تلقی شود. برای مثال، خط فرمان:
mlton -runtime 'ram-slop 0.4' foo.sml
باعث می‌شود foo طوری اجرا شود که گویی به این صورت فراخوانی شده است:
foo @MLton ram-slop 0.4 --

یک فایل اجرایی ایجادشده با -runtime stop هیچ‌یک از آرگومان‌های @MLton را پردازش نمی‌کند. این ویژگی برای ایجاد یک فایل اجرایی مفید است، مانند echo، که باید با @MLton مانند هر آرگومان خط فرمان دیگری برخورد کند.
% mlton -runtime stop echo.sml

% echo @MLton --

@MLton --

چاپ ساختاریافته و خوانای (pretty print) پایه تعریف‌شده توسط برنامه ورودی در file.
خروجی دادن اطلاعات تعریف-استفاده (def-use) در file. هر شناسه تعریف‌شده در یک خط ظاهر می‌شود، و در خطوط بعدی موقعیت هر بار استفاده از آن می‌آید.
مشخص کردن زمان توقف.
f فهرست فایل‌ها روی خروجی استاندارد (تنها زمانی معنادار است که ورودی foo.mlb باشد)
g فایل‌های تولیدشده .c و .s
o فایل‌های شیء (.o)
tc پس از بررسی نوع (type checking)
اگر با -stop g یا -stop o کامپایل کنید، می‌توانید کامپایل را با اجرای MLton روی فایل‌های تولیدشده .c و .s یا .o از سر بگیرید.
تولید یک فایل اجرایی که روی بستر مشخص‌شده اجرا می‌شود. مقدار پیش‌فرض self است، به این معنی که برای همان ماشینی که MLton روی آن در حال اجرا است کامپایل کند. برای استفاده از هر هدف دیگری، ابتدا باید یک کامپایلر چندسکویی (cross compiler) نصب کنید. برای جزئیات به راهنمای MLton مراجعه کنید.
مشابه -as-opt، این گزینه option را هنگام اسمبلی به gcc ارسال می‌کند، با این تفاوت که تنها زمانی option را ارسال می‌کند که معماری یا سیستم‌عامل مقصد، target باشد.
مشابه -cc-opt، این گزینه option را هنگام کامپایل کردن کد C به gcc ارسال می‌کند، با این تفاوت که تنها زمانی option را ارسال می‌کند که معماری یا سیستم‌عامل مقصد، target باشد.
مشابه -link-opt، این گزینه option را هنگام پیوند زدن به gcc ارسال می‌کند، با این تفاوت که تنها زمانی option را ارسال می‌کند که معماری یا سیستم‌عامل مقصد، target باشد.
میزان پرگویی درباره گذرهایی که در حال اجرا هستند. پیش‌فرض 0 است.
0 بدون خروجی (ساکت)
1 فراخوانی‌های کامپایلر، اسمبلر و پیونددهنده
2 1، به همراه گذرهای میانی کامپایلر
3 2، به همراه اندازه برخی از ساختارهای داده

فایل‌های اجرایی تولیدشده توسط MLton آرگومان‌های خط فرمانی را می‌پذیرند که سیستم زمان اجرا را کنترل می‌کنند. این آرگومان‌ها اختیاری هستند و پیش از آرگومان‌های معمول فایل اجرایی می‌آیند. برای استفاده از این گزینه‌ها، نخستین آرگومان فایل اجرایی باید @MLton باشد. سپس آرگومان‌های اختیاری به دنبال آن می‌آیند، باید با -- خاتمه یابند، و به دنبال آن‌ها هر آرگومانی برای برنامه قرار می‌گیرد. آرگومان‌های اختیاری از طریق CommandLine.arguments در دسترس برنامه SML قرار نمی‌گیرند. برای مثال، یک فراخوانی معتبر برای hello-world به این صورت است:
hello-world @MLton gc-summary fixed-heap 10k -- a b c
در مثال فوق: CommandLine.arguments () = ["a", "b", "c"].

وجود توالی‌ای از آرگومان‌های @MLton مجاز است، مانند:
hello-world @MLton gc-summary -- @MLton fixed-heap 10k -- a b c

گزینه‌های زمان اجرا همچنین می‌توانند MLton را کنترل کنند، مانند:
mlton @MLton fixed-heap 0.5g -- foo.sml

استفاده از هیپ (heap) با اندازه ثابت به مقدار x، که در آن x یک عدد حقیقی است و حرف انتهایی واحد آن را نشان می‌دهد.
k یا K 1024
m یا M 1,048,576
g یا G 1,073,741,824
مقدار 0 به معنای استفاده از تقریباً تمام RAM موجود روی دستگاه است.

اندازه هیپ استفاده‌شده توسط fixed-heap شامل تمام حافظه تخصیص‌یافته توسط کد SML است، از جمله حافظه برای پشته (یا پشته‌ها، در صورت وجود چندین ریسه). با این حال، شامل هیچ حافظه‌ای که برای خود کد یا حافظه استفاده‌شده توسط متغیرهای سراسری C، پشته C یا malloc به کار رفته است نمی‌شود.

چاپ پیام در شروع و پایان هر دوره جمع‌آوری زباله (garbage collection).
چاپ خلاصه‌ای از آمارهای جمع‌آوری زباله پس از پایان برنامه.
چاپ خلاصه‌ای از آمارهای جمع‌آوری زباله پس از پایان برنامه در فایل مشخص‌شده توسط file.
راه‌اندازی مجدد محاسبات با فایل مشخص‌شده توسط world، که باید از طریق فراخوانی MLton.World.save توسط همان فایل اجرایی ایجاد شده باشد. برای جزئیات به راهنمای MLton مراجعه کنید.
اجرای محاسبات با هیپی که اندازه آن به‌طور خودکار تغییر می‌کند و هرگز بزرگ‌تر از x نمی‌شود؛ که در آن x یک عدد حقیقی است و حرف انتهایی مانند fixed-heap واحد را نشان می‌دهد. اندازه هیپ برای max-heap نیز مانند fixed-heap محاسبه می‌شود.
فعال‌سازی صفحه‌بندی هیپ روی دیسک در صورت ناتوانی در افزایش اندازه هیپ به مقدار دلخواه.
غیرفعال‌سازی load-world. این گزینه می‌تواند از طریق -runtime no-load-world به عنوان آرگومانی به کامپایلر ارسال شود تا فایل‌های اجرایی تولید کند که world را بارگیری نخواهند کرد. این ویژگی ممکن است برای اطمینان از اینکه فایل‌های اجرایی با بیت set-uid یک world نامشخص را بارگیری نمی‌کنند مفید باشد.
ضرب کردن x در مقدار حافظه RAM دستگاه برای به دست آوردن مقداری از RAM که سیستم زمان اجرا مجاز به استفاده از آن می‌داند. به‌طور معمول x کمتر از 1 است و برای در نظر گرفتن فضای اشغال‌شده توسط سایر برنامه‌های در حال اجرا روی همان دستگاه استفاده می‌شود.
باعث می‌شود سیستم زمان اجرا به محض رسیدن به -- بعدی، پردازش آرگومان‌های @MLton را متوقف کند. این گزینه می‌تواند از طریق -runtime stop به عنوان آرگومانی به کامپایلر ارسال شود تا فایل‌های اجرایی بسازد که هیچ آرگومان @MLton را پردازش نکنند.

پیام‌های خطای نوع در MLton در قالبی مناسب برای پردازش توسط Emacs نیستند. برای جزئیات درباره نحوه رفع این مورد، پیوند زیر را ببینید: http://mlton.org/Emacs

mlprof(1) و راهنمای MLton.

December 30, 2024