OCAMLRUN(1) General Commands Manual OCAMLRUN(1)

ocamlrun - مفسر بایت‌کد OCaml

ocamlrun [ options ] filename argument ...

دستور ocamlrun(1) فایل‌های بایت‌کد تولیدشده در مرحله پیوند (linking) دستور ocamlc(1) را اجرا می‌کند.

نخستین آرگومان غیرگزینه‌ای، به عنوان نام فایل حاوی بایت‌کد اجرایی در نظر گرفته می‌شود. (این فایل هم در مسیر اجرایی و هم در دایرکتوری جاری جستجو می‌شود.) آرگومان‌های باقی‌مانده در قالب آرایه رشته‌ای Sys.argv به برنامه OCaml منتقل می‌شوند. عنصر 0 از این آرایه نام فایل اجرایی بایت‌کد است؛ عناصر 1 تا n آرگومان‌های باقی‌مانده هستند.

در بیشتر موارد، فایل‌های اجرایی بایت‌کد تولیدشده توسط دستور ocamlc(1) به‌صورت خود-اجرا (self-executable) هستند و می‌توانند دستور ocamlrun(1) را به‌طور خودکار روی خودشان اجرا کنند.

گزینه‌های خط فرمان زیر توسط ocamlrun(1) شناسایی می‌شوند:

هنگامی که برنامه به دلیل یک استثنای مدیریت‌نشده (uncaught exception) متوقف می‌شود، یک «ردیابی به عقب» (backtrace) با جزئیات از اجرا را چاپ می‌کند که نشان می‌دهد استثنا در کجا رخ داده و کدام فراخوانی‌های تابع در این نقطه در جریان بوده‌اند. این ردیابی تنها در صورتی چاپ می‌شود که فایل اجرایی بایت‌کد حاوی اطلاعات اشکال‌زدایی باشد، یعنی با فعال بودن گزینه -g در ocamlc(1) کامپایل و پیوند شده باشد. این گزینه معادل تنظیم فلگ b در متغیر محیطی OCAMLRUNPARAM است (پایین را ببینید).
جستجوی دایرکتوری dir برای کتابخانه‌های بارگذاری‌شده به‌صورت پویا، علاوه بر مسیر جستجوی استاندارد.
چاپ عدد جادویی (magic number) فایل اجرایی بایت‌کد file و خروج.
چاپ عدد جادویی مورد انتظار برای فایل‌های اجرایی بایت‌کد توسط این نسخه از runtime و خروج.
چاپ نام‌های توابع اولیه (primitives) شناخته‌شده برای این نسخه از ocamlrun(1) و خروج.
افزایش سطح ردیابی (trace level) برای runtime اشکال‌زدایی (توسط runtime استاندارد نادیده گرفته می‌شود).
هدایت مدیر حافظه به چاپ پیام‌های پرجزئیات (verbose) روی خطای استاندارد (stderr). این گزینه معادل تنظیم v=63 در متغیر محیطی OCAMLRUNPARAM است (پایین را ببینید).
چاپ رشته نسخه و خروج.
چاپ شماره نسخه کوتاه و خروج.

متغیرهای محیطی زیر نیز بررسی می‌شوند:

دایرکتوری‌های اضافی برای جستجوی کتابخانه‌های بارگذاری‌شده به‌صورت پویا.
دایرکتوری حاوی کتابخانه استاندارد OCaml. (اگر OCAMLLIB تنظیم نشده باشد، به جای آن از CAMLLIB استفاده خواهد شد.) برای تعیین مکان فایل پیکربندی ld.conf برای بارگذاری پویا استفاده می‌شود. در صورت عدم تنظیم، مقدار پیش‌فرض آن دایرکتوری کتابخانه مشخص‌شده در زمان کامپایل OCaml خواهد بود.
تنظیم گزینه‌های سیستم زمان اجرا (runtime) و پارامترهای جمع‌آوری زباله (garbage collection). (اگر OCAMLRUNPARAM تنظیم نشده باشد، به جای آن از CAMLRUNPARAM استفاده خواهد شد.) این متغیر باید دنباله‌ای از مشخصات پارامتر باشد که با کاما از هم جدا شده‌اند. مشخصه هر پارامتر یک حرف است که به صورت اختیاری با یک علامت =، یک عدد در مبنای ده (یا یک عدد در مبنای شانزده با پیشوند 0x)، و یک ضریب اختیاری دنبال می‌شود. اگر بعد از حرف هر چیز دیگری بیاید، گزینه مربوطه روی 1 تنظیم می‌شود. حروف ناشناخته نادیده گرفته می‌شوند. گزینه‌ها در زیر مستند شده‌اند؛ گزینه‌های l,m,M,n,o,s,v با فیلدهای رکورد control که در The OCaml user's manual، فصل «Standard Library»، بخش «Gc» مستند شده است، مطابقت دارند.
فعال‌سازی چاپ رد پشته (stack backtrace) هنگام متوقف شدن برنامه به دلیل یک استثنای مدیریت‌نشده. این گزینه هیچ آرگومانی نمی‌پذیرد.
(cleanup_on_exit) خاموش کردن تمیز و مناسب runtime در هنگام خروج. این گزینه همچنین قابلیت تجمیع منابع (pooling) را فعال می‌کند (مانند caml_startup_pooled). این حالت می‌تواند برای شناسایی نشت حافظه با استفاده از یک اشکال‌زدای حافظه شخص ثالث به کار رود.
حداکثر تعداد دامنه‌هایی (domains) که می‌توانند به طور هم‌زمان فعال باشند. مقدار پیش‌فرض در پلتفرم‌های ۶۴ بیتی ۱۲۸ و در پلتفرم‌های ۳۲ بیتی ۱۶ است.
اندازه بافرهای حلقه‌ای رویدادهای زمان اجرا به ازای هر دامنه، بر حسب توان‌های لگاریتمی دو از کلمات (words). پیش‌فرض ۱۶ است که معادل بافرهای ۶۴ هزار کلمه‌ای یا ۵۱۲ کیلوبایتی در سیستم‌های ۶۴ بیتی است.
محدودیت اندازه پشته (بر حسب کلمه/word).
حد زباله‌های شناور (floating garbage) برای حافظه خارج از هیپ که توسط مقادیر سفارشی در هیپ کوچک (minor heap) نگه‌داری می‌شود. زمانی که این مقدار از حافظه توسط مقادیر سفارشی مستقر در هیپ کوچک اشغال شود، یک GC کوچک آغاز می‌شود. به صورت درصدی از اندازه هیپ کوچک بیان می‌شود. نکته: این مورد تنها برای مقادیری اعمال می‌شود که با caml_alloc_custom_mem تخصیص یافته‌اند (مانند bigarrays). پیش‌فرض: 100.
نسبت هدف زباله‌های شناور به اندازه هیپ بزرگ (major heap) برای حافظه خارج از هیپ که توسط مقادیر سفارشی مستقر در هیپ بزرگ نگه‌داری می‌شود. سرعت GC به گونه‌ای تنظیم می‌شود که تلاش کند از این مقدار حافظه برای مقادیر نامعتبر که هنوز جمع‌آوری نشده‌اند استفاده کند. به صورت درصدی از اندازه هیپ بزرگ بیان می‌شود. مقدار پیش‌فرض، زباله‌های شناور خارج از هیپ را تقریباً هم‌اندازه با سربار داخل هیپ نگه می‌دارد. نکته: این مورد تنها برای مقادیری اعمال می‌شود که با caml_alloc_custom_mem تخصیص یافته‌اند (مانند bigarrays). پیش‌فرض: 44.
حداکثر مقدار حافظه خارج از هیپ برای هر مقدار سفارشی تخصیص‌یافته در هیپ کوچک. هنگامی که یک مقدار سفارشی روی هیپ کوچک تخصیص می‌یابد و بیش از این تعداد بایت فضا می‌گیرد، تنها همین مقدار در custom_minor_ratio محاسبه می‌شود و باقی‌مانده آن مستقیماً در custom_major_ratio محاسبه می‌گردد. نکته: این مورد تنها برای مقادیری اعمال می‌شود که با caml_alloc_custom_mem تخصیص یافته‌اند (مانند bigarrays). پیش‌فرض: 8192 بایت.
تنظیم اصلی سرعت GC بزرگ (major GC).
فعال کردن پشتیبانی از اشکال‌زدایی برای تجزیه‌کننده‌های تولیدشده توسط ocamlyacc. هنگامی که این گزینه فعال باشد، ماشین خودکار پشته‌ای (pushdown automaton) که تجزیه‌کننده‌ها را اجرا می‌کند، رد اقدامات خود را چاپ می‌کند. این گزینه هیچ آرگومانی نمی‌پذیرد.
فعال‌سازی تصادفی‌سازی تمام جدول‌های درهم‌سازی (hash tables) به صورت پیش‌فرض (ماژول Hashtbl از کتابخانه استاندارد را ببینید). این گزینه هیچ آرگومانی نمی‌پذیرد.
اندازه هیپ کوچک (بر حسب کلمه/word).
تنظیم سطح ردیابی برای runtime اشکال‌زدایی (توسط runtime استاندارد نادیده گرفته می‌شود).
مشخص می‌کند چه پیام‌هایی از GC روی stderr چاپ شود. این مقدار، مجموعی از مقادیر انتخاب‌شده از موارد زیر است:

0x001 شروع و پایان چرخه GC بزرگ.

0x002 جمع‌آوری کوچک و برش GC بزرگ.

0x004 بزرگ‌شدن و کوچک‌شدن هیپ.

0x008 تغییر اندازه پشته‌ها و جدول‌های مدیر حافظه.

0x010 فشرده‌سازی هیپ (Heap compaction).

0x020 تغییر پارامترهای GC.

0x040 محاسبه اندازه برش GC بزرگ.

0x080 فراخوانی توابع نهایی‌سازی (finalisation).

0x100 پیام‌های راه‌اندازی (بارگذاری فایل اجرایی بایت‌کد، حل وابستگی‌های کتابخانه‌های مشترک).

0x200 محاسبه شرط تحریک فشرده‌سازی.

0x400 خروجی آمار GC در زمان خروج از برنامه، در همان قالب Gc.print_stat.

0x800 پیام‌های اشکال‌زدایی GC.

0x1000 تغییرات رزرو فضای آدرس.

(verify_heap) اجرای یک بررسی درستی روی هیپ، درست پس از تکمیل یک چرخه GC بزرگ.
چاپ هشدارهای زمان اجرا روی stderr (مانند باز ماندن کانال روی فایلی که بدون بسته شدن خاتمه می‌یابد، داده‌های تخلیه‌نشده و غیره).
ضریب یکی از موارد k،M یا G برای ضرب به ترتیب در 2^10، 2^20 و 2^30 است.

اگر حرف گزینه شناسایی نشود، کل پارامتر نادیده گرفته می‌شود؛ اگر علامت مساوی یا عدد وجود نداشته باشد، مقدار 1 در نظر گرفته می‌شود؛ اگر ضریب شناسایی نشود، نادیده گرفته می‌شود.

برای مثال، روی یک رایانه ۳۲ بیتی تحت bash، دستور export OCAMLRUNPARAM='s=256k,v=1' به اجرای بعدی ocamlrun اعلام می‌کند که اندازه اولیه هیپ کوچک خود را روی ۱ مگابایت تنظیم کند و در ابتدای هر چرخه GC بزرگ یک پیام چاپ کند.

اگر OCAMLRUNPARAM در محیط یافت نشود، به جای آن از CAMLRUNPARAM استفاده خواهد شد. اگر CAMLRUNPARAM نیز یافت نشود، از مقادیر پیش‌فرض استفاده خواهد شد.
فهرست دایرکتوری‌هایی که برای یافتن فایل اجرایی بایت‌کد جستجو می‌شوند.

ocamlc(1).
The OCaml user's manual، فصل «Runtime system».