erl(1) Erlang Module Definition erl(1)

erl - راه‌اندازی سیستم زمان اجرای ارلنگ

برنامه erl یک سیستم زمان اجرای ارلنگ را راه‌اندازی می‌کند. جزئیات دقیق (به عنوان مثال، اینکه آیا erl یک اسکریپت است یا یک برنامه، و اینکه چه برنامه‌های دیگری را فراخوانی می‌کند) وابسته به سیستم است.

نکته: اگر در ویندوز از Erlang/OTP 25 یا نسخه‌های پیش از آن استفاده می‌کنید و می‌خواهید یک سیستم ارلنگ را با پشتیبانی کامل از شل راه‌اندازی کنید، باید از werl.exe استفاده نمایید. برای جزئیات نحوه انجام این کار، به مستندات Erlang/OTP 25 مراجعه کنید.

یک سیستم زمان اجرای ارلنگ را راه‌اندازی می‌کند.

آرگومان‌ها را می‌توان به فلگ‌های شبیه‌ساز، فلگ‌ها و آرگومان‌های ساده تقسیم کرد:

•هر آرگومانی که با نویسه + آغاز شود به عنوان یک فلگ شبیه‌ساز تفسیر می‌شود.

همان‌طور که از نام آن مشخص است، فلگ‌های شبیه‌ساز رفتار شبیه‌ساز را کنترل می‌کنند.

•هر آرگومانی که با نویسه - (خط تیره) آغاز شود به عنوان یک فلگ تفسیر می‌شود که باید به بخش ارلنگ سیستم زمان اجرا، به طور مشخص به فرآیند سیستمی init ارسال گردد؛ به init مراجعه کنید.

فرآیند init خود برخی از این فلگ‌ها را تفسیر می‌کند که فلگ‌های init نامیده می‌شوند. همچنین سایر فلگ‌های باقی‌مانده را ذخیره می‌کند که فلگ‌های کاربر نام دارند. مورد اخیر را می‌توان با فراخوانی init:get_argument/1 بازیابی کرد.

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

•آرگومان‌های ساده به هیچ عنوان تفسیر نمی‌شوند. آنها نیز توسط فرآیند init ذخیره شده و با فراخوانی init:get_plain_arguments/0 قابل بازیابی هستند. آرگومان‌های ساده می‌توانند پیش از اولین فلگ یا پس از فلگ -- قرار گیرند. همچنین، فلگ -extra باعث می‌شود هر آنچه پس از آن می‌آید به آرگومان‌های ساده تبدیل شود.

مثال‌ها:

% erl +W w -sname arnie +S 2 -s my_init -extra +bertie
(arnie@host)1> init:get_argument(sname).
{ok,[["arnie"]]}
(arnie@host)2> init:get_plain_arguments().
["+bertie"]

در اینجا +W w و +S 2 فلگ‌های شبیه‌ساز هستند. -s my_init یک فلگ init است که توسط init تفسیر می‌شود. -sname arnie یک فلگ کاربر است که توسط init ذخیره می‌شود؛ این گزینه توسط Kernel خوانده شده و سبب توزیع‌شدن سیستم زمان اجرای ارلنگ می‌گردد. در پایان، هر آنچه پس از -extra بیاید (یعنی +bertie) به عنوان آرگومان‌های ساده تلقی می‌شود.

% erl -myflag 1
1> init:get_argument(myflag).
{ok,[["1"]]}
2> init:get_plain_arguments().
[]

در اینجا فلگ کاربر -myflag 1 به فرآیند init تحویل داده شده و توسط آن ذخیره می‌شود. این یک فلگ تعریف‌شده توسط کاربر است که احتمالاً توسط برنامه‌ای از پیش تعریف‌شده توسط کاربر مورد استفاده قرار می‌گیرد.

در فهرست زیر، فلگ‌های init با "(init flag)" مشخص شده‌اند. مگر در مواردی که خلاف آن تصریح شده باشد، تمامی فلگ‌های دیگر از نوع فلگ‌های کاربر هستند که مقادیر آنها را می‌توان با فراخوانی init:get_argument/1 به دست آورد. توجه داشته باشید که فهرست فلگ‌های کاربر جامع نیست و ممکن است فلگ‌های اختصاصی برنامه‌های دیگری نیز وجود داشته باشد که در مستندات مربوط به همان برنامه‌ها شرح داده شده‌اند.

-- (init flag)

هر چیزی پس از -- تا فلگ بعدی (-flag یا +flag) به عنوان آرگومان‌های ساده تلقی شده و می‌توان با استفاده از init:get_plain_arguments/0 آن را بازیابی کرد.

-Application Par Val

پارامتر پیکربندی برنامه Par را روی مقدار Val برای برنامه Application تنظیم می‌کند؛ به app(4) و application مراجعه کنید.

-args_file FileName

آرگومان‌های خط فرمان از فایل FileName خوانده می‌شوند. آرگومان‌های خوانده‌شده از فایل جایگزین فلگ '-args_file FileName' در خط فرمان حاصل می‌گردند.

فایل FileName باید یک فایل متنی ساده باشد و می‌تواند شامل توضیحات و آرگومان‌های خط فرمان باشد. یک توضیح با نویسه # آغاز می‌شود و تا نویسه پایان خط بعدی ادامه می‌یابد. از بک‌اسلش (\) به عنوان نویسه نقل‌قول استفاده می‌شود. تمام آرگومان‌های خط فرمان پذیرفته‌شده توسط erl مجاز هستند، از جمله فلگ -args_file FileName. با این حال دقت کنید که بین فایل‌های حاوی فلگ -args_file وابستگی دورانی ایجاد نکنید.

با فلگ -extra به شیوه خاصی رفتار می‌شود. دامنه آن در پایان فایل خاتمه می‌یابد. آرگومان‌های پس از یک فلگ -extra در خط فرمان به بخش -extra، یعنی انتهای خط فرمان پس از فلگ -extra منتقل می‌شوند.

-async_shell_start

شل اولیه ارلنگ تا زمان تکمیل فرآیند راه‌اندازی و بوت سیستم ورودی کاربر را نمی‌خواند (Erlang/OTP 5.4 و نسخه‌های جدیدتر). این فلگ قابلیت همگام‌سازی آغازین را غیرفعال کرده و اجازه می‌دهد شل به صورت موازی با سایر بخش‌های سیستم شروع به کار کند.

-boot File

نام فایل بوت، File.boot را که برای راه‌اندازی سیستم به کار می‌رود مشخص می‌کند؛ به init مراجعه کنید. مگر اینکه File شامل یک مسیر مطلق باشد، سیستم به دنبال File.boot در پوشه جاری و دایرکتوری‌های $ROOT/bin می‌گردد.

پیش‌فرض $ROOT/bin/start.boot است.

-boot_var Var Dir

اگر اسکریپت بوت شامل متغیر مسیر Var به غیر از $ROOT باشد، این متغیر به Dir بسط داده می‌شود. هنگامی به کار می‌رود که برنامه‌ها در دایرکتوری دیگری به جز $ROOT/lib نصب شده باشند؛ به systools:make_script/1,2 در SASL مراجعه نمایید.

-code_path_cache

کش مسیر کد مربوط به سرور کد را فعال می‌کند؛ به code مراجعه کنید.

-compile Mod1 Mod2 ...

ماژول‌های مشخص‌شده را کامپایل کرده و سپس خاتمه می‌یابد (در صورت عدم موفقیت کامپایل فایلی، با کد خروج غیر صفر خارج می‌شود). مستلزم -noinput است.

توصیه نمی‌شود؛ در عوض از erlc استفاده کنید.

-config Config [Config ...]

نام یک یا چند فایل پیکربندی، Config.config را که برای پیکربندی برنامه‌ها استفاده می‌شود مشخص می‌کند؛ به app(4) و application مراجعه کنید. برای توضیح قالب پیکربندی و ترتیبی که پارامترهای پیکربندی خوانده می‌شوند، به مستندات ساختار فایل پیکربندی مراجعه کنید.

-configfd FD [FD ...]

نام یک یا چند توصیف‌کننده فایل (که از این پس توصیف‌کننده‌های فایل پیکربندی نامیده می‌شوند) حاوی داده‌های پیکربندی برنامه‌ها را مشخص می‌کند؛ به app(4) و application مراجعه کنید. برای توضیح قالب پیکربندی و ترتیب خوانده شدن پارامترهای پیکربندی، به مستندات ساختار فایل پیکربندی مراجعه کنید.

یک توصیف‌کننده فایل پیکربندی تا پایان خوانده شده و سپس بسته خواهد شد.

محتوای یک توصیف‌کننده فایل پیکربندی ذخیره می‌شود تا هنگام فراخوانی init:restart/0 یا init:restart/1 مجدداً قابل استفاده باشد.

پارامتر -configfd 0 مستلزم -noinput است.

نکته: استفاده از توصیف‌کننده‌های فایل ۱ (خروجی استاندارد) و ۲ (خطای استاندارد) به همراه -configfd توصیه نمی‌شود، چرا که این توصیف‌کننده‌ها معمولاً برای چاپ اطلاعات در کنسولی که برنامه در آن اجرا می‌شود به کار می‌روند.

مثال‌ها (شل یونیکس):

$ erl \
-noshell \
-configfd 3 \
-eval \
<(echo '[{kernel, [{logger_level, warning}]}].')
{ok,warning}
$ echo '[{kernel, [{logger_level, warning}]}].' > test1.config
$ echo '[{kernel, [{logger_level, error}]}].' > test2.config
$ erl \
-noshell \
-configfd 3 \
-configfd 4 \
-eval \
3< test1.config 4< test2.config
{ok,error}

-connect_all false

این فلگ منسوخ شده است و با پارامتر برنامه kernel به نام connect_all جایگزین شده است.

-cookie Cookie

فلگ منسوخ فاقد اثر و غلط املایی رایج برای -setcookie است. در عوض از -setcookie استفاده کنید.

-detached

سیستم زمان اجرای ارلنگ را به صورت جداشده از کنسول سیستم راه‌اندازی می‌کند. برای اجرای دیمن‌ها و فرآیندهای پس‌زمینه بسیار کاربردی است. مستلزم -noinput است.

-disable-feature feature

ویژگی feature را در سیستم زمان اجرا غیرفعال می‌کند. ویژگی خاص all می‌تواند برای غیرفعال کردن تمامی ویژگی‌های غیردائمی استفاده شود.

-dist_listen true|false

مشخص می‌کند که آیا این گره باید برای اتصالات توزیع ورودی گوش فرا دهد یا خیر. به طور پیش‌فرض یک گره به اتصالات ورودی گوش می‌دهد. تنظیم این گزینه روی false مستلزم -hidden است.

-emu_args

برای اشکال‌زدایی مفید است. آرگومان‌های ارسال‌شده به شبیه‌ساز را چاپ می‌کند.

-emu_flavor emu|jit|smp

یک شبیه‌ساز با طعم (flavor) متفاوت را اجرا می‌کند. معمولاً تنها یک طعم در دسترس است؛ طعم‌های بیشتر را می‌توان با ساخت طعم‌های اختصاصی افزود. طعم‌های فعلی در دسترس عبارتند از: emu و jit. طعم smp یک نام مستعار برای طعم پیش‌فرض فعلی است. می‌توانید این فلگ را با --emu_type ترکیب کنید. طعم فعلی را می‌توانید در زمان اجرا با استفاده از erlang:system_info(emu_flavor) به دست آورید. (شبیه‌ساز با این طعم باید ساخته شده باشد. می‌توانید با اجرای make FLAVOR=$FLAVOR در مخزن سورس‌کد Erlang/OTP یک طعم خاص را بسازید.)

-emu_type Type

یک شبیه‌ساز با نوع متفاوت را اجرا می‌کند. به عنوان مثال، برای اجرای شبیه‌ساز lock-counter، از -emu_type lcnt استفاده کنید. نوع فعلی را می‌توانید در زمان اجرا با erlang:system_info(build_type) دریافت کنید. (شبیه‌ساز از این نوع باید از قبل ساخته شده باشد. از گزینه --enable-lock-counter در دستور configure برای ساخت شبیه‌ساز شمارنده قفل استفاده کنید.)

-enable-feature feature

ویژگی feature را در سیستم زمان اجرا فعال می‌کند. ویژگی خاص all می‌تواند برای فعال‌سازی تمام ویژگی‌ها استفاده شود.

-env Variable Value

متغیر محیطی سیستم‌عامل میزبان Variable را برای سیستم زمان اجرای ارلنگ روی مقدار Value تنظیم می‌کند. مثال:
% erl -env DISPLAY gin:0

در این مثال، یک سیستم زمان اجرای ارلنگ با متغیر محیطی DISPLAY تنظیم‌شده روی gin:0 اجرا می‌شود.

-epmd_module Module

این فلگ منسوخ شده است و با پارامتر برنامه kernel به نام epmd_module جایگزین گردیده است.

-erl_epmd_port Port

این فلگ منسوخ شده است و با پارامتر برنامه kernel به نام erl_epmd_node_listen_port جایگزین شده است.

-eval Expr (init flag)

باعث می‌شود init عبارت Expr را ارزیابی کند؛ به init مراجعه کنید.

-extra (init flag)

هر آنچه پس از -extra بیاید به عنوان آرگومان‌های ساده تلقی شده و می‌توان با استفاده از init:get_plain_arguments/0 آن را بازیابی کرد.

-heart

پایش ضربان قلب (heartbeat) سیستم زمان اجرای ارلنگ را راه‌اندازی می‌کند؛ به heart مراجعه کنید.

-hidden

در صورتی که سیستم زمان اجرای ارلنگ به عنوان یک گره توزیع‌شده اجرا شود، آن را به عنوان یک گره مخفی راه‌اندازی می‌کند. گره‌های مخفی همیشه با تمام گره‌های دیگر به جز گره‌های حاضر در همان گروه سراسری (global group)، اتصالات مخفی برقرار می‌کنند. اتصالات مخفی در هیچ‌یک از گره‌های متصل منتشر نمی‌شوند؛ یعنی هیچ‌یک از گره‌های متصل بخشی از خروجی nodes/0 در گره دیگر نخواهند بود. همچنین به بخش گروه‌های سراسری مخفی در global_group مراجعه نمایید.

-hosts Hosts

آدرس‌های IP میزبان‌هایی که سرورهای بوت ارلنگ روی آنها در حال اجرا هستند را مشخص می‌کند؛ به erl_boot_server مراجعه کنید. این فلگ در صورت وجود فلگ -loader inet الزامی است.

آدرس‌های IP باید به شکل استاندارد (چهار عدد ده‌دهی جداشده با نقطه، مثلاً "150.236.20.74") مشخص شوند. نام‌های میزبان پذیرفته نمی‌شوند، اما آدرس پخش همگانی (broadcast) (ترجیحاً محدود به شبکه محلی) پذیرفته می‌شود.

-id Id

شناسه سیستم زمان اجرای ارلنگ را مشخص می‌کند. اگر به عنوان یک گره توزیع‌شده اجرا شود، Id باید دقیقاً با نام ارائه‌شده همراه با فلگ -sname یا -name یکسان باشد.

-init_debug

باعث می‌شود init هنگام تفسیر اسکریپت بوت، اطلاعات اشکال‌زدایی را بنویسد.

-instr (emulator flag)

یک سیستم زمان اجرای ارلنگ (ماشین مجازی) ابزاربندی‌شده (instrumented) را به جای نسخه معمولی برای اجرا انتخاب می‌کند. هنگام اجرای سیستم زمان اجرای ابزاربندی‌شده، می‌توان برخی داده‌های مصرف منابع را با استفاده از ماژول instrument به دست آورد و تحلیل کرد. از لحاظ عملکردی، این سیستم دقیقاً مانند یک سیستم زمان اجرای ارلنگ معمولی رفتار می‌کند.

-loader Loader

روشی را مشخص می‌کند که توسط erl_prim_loader برای بارگذاری ماژول‌های ارلنگ در سیستم استفاده می‌شود؛ به erl_prim_loader مراجعه کنید. دو روش Loader پشتیبانی می‌شوند:
•efile، که به معنی استفاده از سیستم فایل محلی است؛ این مقدار پیش‌فرض است.
•inet، که به معنای استفاده از سرور بوت روی یک ماشین دیگر است. فلگ‌های -id، -hosts و -setcookie نیز باید مشخص شوند.

اگر Loader مقدار دیگری باشد، برنامه درگاه Loader ارائه‌شده توسط کاربر اجرا می‌شود.

-make

باعث می‌شود سیستم زمان اجرای ارلنگ تابع make:all() را در دایرکتوری کاری جاری فراخوانی کرده و سپس پایان یابد؛ به make مراجعه کنید. مستلزم -noinput است.

-man Module

صفحه راهنمای مربوط به ماژول ارلنگ Module را نمایش می‌دهد. فقط در یونیکس پشتیبانی می‌شود.

-mode interactive | embedded

اگر سیستم زمان اجرا در حالت interactive (که حالت پیش‌فرض است) اجرا شود، ماژول‌ها هنگام ارجاع اولیه به صورت خودکار بارگذاری می‌شوند. در حالت embedded ماژول‌ها به طور خودکار بارگذاری نمی‌شوند. حالت دوم زمانی توصیه می‌شود که اسکریپت بوت تمامی ماژول‌ها را از پیش بارگذاری کرده باشد، که معمولاً در انتشارهای OTP چنین است. به code مراجعه نمایید.

-name Name

سیستم زمان اجرای ارلنگ را به یک گره توزیع‌شده تبدیل می‌کند. این فلگ تمام سرورهای شبکه لازم را فراخوانی می‌کند تا گره توزیع‌شده شود؛ به net_kernel مراجعه کنید. همچنین تضمین می‌کند که پیش از آغاز ارلنگ، epmd روی میزبان جاری در حال اجرا باشد (به epmd(1) و گزینه -start_epmd رجوع کنید) و یک کوکی جادویی نیز تنظیم شده باشد (به -setcookie مراجعه نمایید).

نام گره به صورت Name@Host خواهد بود، که در آن Host نام میزبان کاملاً واجد شرایط (FQDN) از میزبان جاری است. برای نام‌های کوتاه، در عوض از فلگ -sname استفاده نمایید.

اگر Name روی undefined تنظیم شده باشد، گره در حالت ویژه‌ای راه‌اندازی می‌شود که برای کلاینت موقت یک گره دیگر بودن بهینه‌سازی شده است. سپس گره از اولین گره‌ای که به آن متصل می‌شود، یک نام گره پویا درخواست می‌کند. در Dynamic Node Name بیشتر بخوانید.

هشدار: راه‌اندازی یک گره توزیع‌شده بدون مشخص کردن همزمان -proto_dist inet_tls، گره را در معرض حملاتی قرار می‌دهد که ممکن است به مهاجم دسترسی کامل به گره و در نتیجه کل کلاستر را بدهد. هنگام استفاده از گره‌های توزیع‌شده غیرامن، اطمینان حاصل کنید که شبکه طوری پیکربندی شده است که مهاجمان احتمالی را بیرون نگه دارد.

-nocookie

از ایجاد یا استفاده از کوکی جادویی توسط گره جلوگیری می‌کند.

هنگامی که از این فلگ استفاده شود، گره در زمان راه‌اندازی فایل ~/.erlang.cookie را نخواهد خواند.

کوکی خود گره در وضعیت "undefined" باقی می‌ماند مگر اینکه بعداً صریحاً از طریق erlang:set_cookie/1 یا erlang:set_cookie/2 تنظیم گردد.

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

-no_epmd

مشخص می‌کند که گره توزیع‌شده اصلاً به epmd نیازی ندارد.

این گزینه تضمین می‌کند که سیستم زمان اجرای ارلنگ epmd را اجرا نکند و فرآیند erl_epmd را نیز برای توزیع راه‌اندازی ننماید.

این گزینه تنها زمانی کار می‌کند که ارلنگ به عنوان یک گره توزیع‌شده با گزینه -proto_dist و با استفاده از یک پروتکل جایگزین برای توزیع ارلنگ راه‌اندازی شود که برای ثبت و کشف گره‌ها به epmd وابسته نباشد. برای اطلاعات بیشتر، به راهنمای How to implement an Alternative Carrier for the Erlang Distribution مراجعه کنید.

-noinput

تضمین می‌کند که سیستم زمان اجرای ارلنگ هرگز تلاشی برای خواندن هیچ ورودی انجام ندهد. مستلزم -noshell است.

-noshell

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

-nostick

قابلیت دایرکتوری‌های چسبنده (sticky directory) سرور کد ارلنگ را غیرفعال می‌کند؛ به code مراجعه کنید.

-oldshell

شل قدیمی ارلنگ مربوط به Erlang/OTP 3.3 را فراخوانی می‌کند. شل قدیمی همچنان قابل استفاده است.

-pa Dir1 Dir2 ...

دایرکتوری‌های مشخص‌شده را مشابه code:add_pathsa/1 به ابتدای مسیر کد اضافه می‌کند. توجه داشته باشید که ترتیب دایرکتوری‌های داده‌شده در مسیر نهایی معکوس خواهد شد.

به عنوان جایگزینی برای -pa، چنانچه قرار است چندین دایرکتوری به ابتدای مسیر کد افزوده شوند و دارای یک دایرکتوری والد مشترک هستند، آن دایرکتوری والد می‌تواند در متغیر محیطی ERL_LIBS مشخص گردد؛ به code مراجعه کنید.

-pz Dir1 Dir2 ...

دایرکتوری‌های مشخص‌شده را مشابه code:add_pathsz/1 به انتهای مسیر کد اضافه می‌کند؛ به code مراجعه کنید.

-path Dir1 Dir2 ...

مسیر مشخص‌شده در اسکریپت بوت را جایگزین می‌کند؛ به script(4) مراجعه کنید.

-proto_dist Proto

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

inet_tcp

پروتکل TCP بر روی IPv4 (حالت پیش‌فرض)

inet_tls

توزیع بر بستر TLS/SSL؛ برای جزئیات مربوط به برپایی یک گره توزیع‌شده امن، به راهنمای Using SSL for Erlang Distribution User's Guide مراجعه نمایید.

inet6_tcp

پروتکل TCP بر روی IPv6

به عنوان مثال، برای راه‌اندازی گره‌های توزیع‌شده با IPv6:

% erl -name test@ipv6node.example.com -proto_dist inet6_tcp

-remsh Node

ارلنگ را با یک شل از راه دور متصل به Node راه‌اندازی می‌کند.

اگر هیچ -name یا -sname مشخص نشده باشد، گره با استفاده از -sname undefined راه‌اندازی خواهد شد. اگر Node شامل نام میزبان نباشد، نام میزبان به طور خودکار از -name یا -sname اخذ می‌شود.

نکته: پیش از OTP-23، کاربر باید یک -sname یا -name معتبر برای کارکرد -remsh فراهم می‌کرد. اگر گره مقصد نسخه‌ای قدیمی‌تر از OTP-23 را اجرا کند، هنوز هم وضعیت چنین است.

نکته: گره متصل‌شونده باید دارای یک شل مناسب با شبیه‌سازی ترمینال باشد. این بدان معناست که کاربران یونیکس باید از ارلنگ کامپایل‌شده با قابلیت‌های ترمینال استفاده کنند و پیش از Erlang/OTP 25 کاربران ویندوز باید از werl بهره بگیرند.

-rsh Program

جایگزینی برای ssh به منظور راه‌اندازی یک گره زیردست (slave) روی یک میزبان راه دور تعیین می‌کند؛ به slave مراجعه فرمایید.

-S Mod [Func [Arg1, Arg2, ...]] (init flag)

باعث می‌شود init تابع مشخص‌شده را فراخوانی کند. Func به طور پیش‌فرض start است. فرض بر این است که تابع دارای آرتی ۱ است و لیست [Arg1,Arg2,...] را به عنوان آرگومان دریافت می‌کند، یا در صورت عدم ارسال آرگومان یک لیست خالی می‌گیرد. تمامی آرگومان‌های بعدی که پس از این گزینه می‌آیند به صورت رشته به تابع مشخص‌شده فرستاده می‌شوند. مستلزم -noshell است. به init مراجعه کنید.

-run Mod [Func [Arg1, Arg2, ...]] (init flag)

باعث می‌شود init تابع مشخص‌شده را فراخوانی کند. Func به طور پیش‌فرض start است. در صورتی که هیچ آرگومانی داده نشود، فرض بر این است که تابع دارای آرتی ۰ است؛ در غیر این صورت فرض بر آرتی ۱ بوده و لیست [Arg1,Arg2,...] را به عنوان آرگومان می‌گیرد. تمام آرگومان‌ها به صورت رشته فرستاده می‌شوند. به init مراجعه نمایید.

-s Mod [Func [Arg1, Arg2, ...]] (init flag)

باعث می‌شود init تابع مشخص‌شده را فراخوانی کند. Func به طور پیش‌فرض start است. در صورتی که هیچ آرگومانی ارائه نشود، فرض بر این است که تابع دارای آرتی ۰ است؛ در غیر این صورت فرض بر آرتی ۱ بوده و لیست [Arg1,Arg2,...] را به عنوان آرگومان می‌پذیرد. تمام آرگومان‌ها به عنوان اتم فرستاده می‌شوند. به init مراجعه کنید.

-setcookie Cookie

کوکی جادویی گره را روی Cookie تنظیم می‌کند؛ به erlang:set_cookie/1 مراجعه نمایید. برای جزئیات بیشتر به بخش Distributed Erlang در راهنمای مرجع ارلنگ رجوع کنید.

-setcookie Node Cookie

کوکی جادویی را برای Node روی Cookie تنظیم می‌کند؛ به erlang:set_cookie/2 مراجعه فرمایید.

-shutdown_time Time

مشخص می‌کند که فرآیند init مجاز است چه مدت زمانی (بر حسب میلی‌ثانیه) را صرف خاموش کردن برنامه‌های کاربردی ارلنگ در سیستم کند. چنانچه Time میلی‌ثانیه سپری شود، تمامی فرآیندهایی که همچنان پابرجا هستند کشته می‌شوند. پیش‌فرض infinity است.

-sname Name

سیستم زمان اجرای ارلنگ را مشابه -name به یک گره توزیع‌شده تبدیل می‌کند، اما بخش نام میزبان در نام گره Name@Host به صورت نام کوتاه خواهد بود و نام کاملاً واجد شرایط نیست.

در صورتی که سامانه نام دامنه (DNS) در حال اجرا نباشد، این گزینه گاهی اوقات تنها راه برای اجرای ارلنگ توزیع‌شده است. هیچ ارتباطی میان گره‌های اجراشده با فلگ -sname و گره‌های اجراشده با فلگ -name نمی‌تواند برقرار شود، چرا که نام گره‌ها در سیستم‌های ارلنگ توزیع‌شده باید منحصر‌به‌فرد باشد.

اگر Name روی undefined تنظیم شود، گره در حالت ویژه‌ای راه‌اندازی خواهد شد که برای کلاینت موقت گره دیگر بودن بهینه‌سازی شده است. سپس گره از نخستین گره‌ای که به آن متصل شود درخواست یک نام گره پویا می‌کند. در Dynamic Node Name بیشتر بخوانید.

هشدار: راه‌اندازی یک گره توزیع‌شده بدون مشخص کردن همزمان -proto_dist inet_tls، گره را در معرض حملاتی قرار می‌دهد که ممکن است به مهاجم دسترسی کامل به گره و در نتیجه کل کلاستر را بدهد. هنگام استفاده از گره‌های توزیع‌شده غیرامن، اطمینان حاصل کنید که شبکه طوری پیکربندی شده است که مهاجمان احتمالی را بیرون نگه دارد.

-start_epmd true | false

مشخص می‌کند که آیا ارلنگ هنگام راه‌اندازی باید epmd را اجرا کند یا خیر. پیش‌فرض true است، اما اگر ترجیح می‌دهید epmd را دستی راه‌اندازی کنید، این گزینه را روی false تنظیم نمایید.

این فلگ تنها در صورتی اثر دارد که ارلنگ به عنوان یک گره توزیع‌شده راه‌اندازی شود، یعنی -name یا -sname مشخص شده باشد. در غیر این صورت، حتی اگر -start_epmd true مشخص شود، epmd راه‌اندازی نخواهد شد.

توجه داشته باشید که اگر epmd در حال اجرا نباشد، راه‌اندازی گره توزیع‌شده با شکست مواجه می‌شود.

-version (emulator flag)

باعث می‌شود شبیه‌ساز شماره نسخه خود را چاپ کند. مشابه erl +V است.

دستور erl کد مربوط به شبیه‌ساز (ماشین مجازی) ارلنگ را فراخوانی می‌کند که از فلگ‌های زیر پشتیبانی می‌نماید. فلگ‌ها از چپ به راست خوانده می‌شوند و فلگ‌های بعدی رفتار فلگ‌های قبلی را بازنویسی (override) می‌کنند.

+a size

اندازه پیشنهادی استک (پشته)، بر حسب کیلوورد (kilowords)، برای نخ‌ها در استخر نخ‌های ناهمگام (async thread pool). محدوده معتبر ۱۶ تا ۸۱۹۲ کیلوورد است. اندازه پیشنهادی پیش‌فرض ۱۶ کیلوورد است، یعنی ۶۴ کیلوبایت در معماری‌های ۳۲ بیتی. این اندازه کوچک پیش‌فرض به این دلیل انتخاب شده است که تعداد نخ‌های ناهمگام می‌تواند زیاد باشد. اندازه پیش‌فرض برای درایورهای ارائه‌شده همراه با Erlang/OTP کافی است، اما ممکن است برای سایر درایورهای پیوندخورده پویا که از قابلیت driver_async() استفاده می‌کنند کافی نباشد. توجه داشته باشید که مقدار ارائه‌شده صرفاً یک پیشنهاد است و حتی ممکن است در برخی پلتفرم‌ها نادیده گرفته شود.

+A size

تعداد نخ‌ها را در استخر نخ‌های ناهمگام تنظیم می‌کند. محدوده معتبر ۱ تا ۱۰۲۴ است. استخر نخ‌های ناهمگام توسط درایورهای پیوندخورده برای مدیریت کارهایی که ممکن است زمان بسیار زیادی طول بکشند به کار می‌رود. از نسخه OTP 21، توزیع پیش‌فرض Erlang/OTP شامل تعداد کمی از درایورهای پیوندخورده است که از این استخر استفاده می‌کنند و اکثر آنها به زمان‌بندهای کثیف I/O منتقل شده‌اند. پیش‌فرض ۱ است.

+B [c | d | i]

گزینه c باعث می‌شود فشردن Ctrl-C شل جاری را متوقف کند، به جای اینکه گرداننده توقف (break handler) شبیه‌ساز را فراخوانی نماید. گزینه d (مشابه تعیین +B بدون گزینه اضافی) گرداننده توقف را غیرفعال می‌کند. گزینه i سبب می‌شود شبیه‌ساز هرگونه سیگنال توقف را نادیده بگیرد.

اگر گزینه c همراه با oldshell در یونیکس استفاده شود، کلید ترکیبی Ctrl-C به جای توقف، فرآیند شل را بازراه‌اندازی خواهد کرد.

+c true | false

تصحیح زمان را فعال یا غیرفعال می‌کند:

true

تصحیح زمان را فعال می‌کند. اگر تصحیح زمان در پلتفرم مربوطه پشتیبانی شود، این حالت پیش‌فرض است.

false

تصحیح زمان را غیرفعال می‌کند.

برای سازگاری با گذشته، مقدار بولی می‌تواند حذف شود که در این صورت به عنوان +c false تفسیر خواهد شد.

+C no_time_warp | single_time_warp | multi_time_warp

حالت پیچش زمانی (time warp mode) را تنظیم می‌کند:

no_time_warp

حالت بدون پیچش زمانی

single_time_warp

حالت پیچش زمانی تکی

multi_time_warp

حالت پیچش زمانی چندگانه (پیش‌فرض از زمان Erlang/OTP 26.0)

+d

اگر شبیه‌ساز یک خطای داخلی شناسایی کند (یا حافظه کم بیاورد)، به طور پیش‌فرض هم یک گزارش خرابی (crash dump) و هم یک core dump تولید می‌کند. با این حال، core dump چندان مفید نیست چرا که محتوای هیپ فرآیندها به واسطه تولید گزارش خرابی تخریب می‌شود.

گزینه +d به شبیه‌ساز دستور می‌دهد که در صورت شناسایی خطای داخلی، تنها یک core dump تولید کرده و هیچ گزارش خرابی تولید نکند.

فراخوانی erlang:halt/1 با یک آرگومان رشته‌ای همچنان یک گزارش خرابی تولید می‌کند. در سیستم‌های یونیکس، ارسال سیگنال SIGUSR1 به فرآیند شبیه‌ساز نیز ایجاد گزارش خرابی را اجباری می‌کند.

+dcg DecentralizedCounterGroupsLimit

تعداد گروه‌های شمارنده نامتمرکز مورد استفاده توسط شمارنده‌های نامتمرکزِ بهینه‌شده برای عملیات به‌روزرسانی در سیستم زمان اجرای ارلنگ را محدود می‌کند. به طور پیش‌فرض، این محدودیت ۲۵۶ است.

هنگامی که تعداد زمان‌بندها کمتر یا مساوی این محدودیت باشد، هر زمان‌بند گروه اختصاصی خود را دارد. هنگامی که تعداد زمان‌بندها بیشتر از محدودیت گروه‌ها باشد، زمان‌بندها گروه‌ها را به اشتراک می‌گذارند. گروه‌های مشترک کارایی به‌روزرسانی شمارنده‌ها را کاهش می‌دهند، در حالی که وجود گروه‌های خواننده پرتعداد کارایی خواندن شمارنده‌ها را تقلیل می‌دهد. بنابراین، این حد مصالحه‌ای میان کارایی عملیات به‌روزرسانی و کارایی عملیات خواندن است. هر گروه ۶۴ بایت در هر شمارنده مصرف می‌کند.

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

این گزینه تنها بر شمارنده‌های نامتمرکزی تأثیر می‌گذارد که برای رهگیری مصرف حافظه و تعداد عبارت‌ها (terms) در جداول ETS از نوع ordered_set با فعال بودن گزینه write_concurrency استفاده می‌شوند.

+e Number

حداکثر تعداد جداول ETS را تنظیم می‌کند. این محدودیت تا حدی منسوخ شده است.

+ec

گزینه compressed را روی تمام جداول ETS اجباری می‌کند. صرفاً برای آزمایش و ارزیابی در نظر گرفته شده است.

+fnl

ماشین مجازی با نام‌های فایل طوری رفتار می‌کند که گویی با کدگذاری ISO Latin-1 کدگذاری شده‌اند، و کاراکترهای یونیکد با مقادیر کدبندی بزرگتر از ۲۵۵ را غیرمجاز می‌داند.

برای اطلاعات بیشتر درباره نام‌های فایل یونیکد، به بخش Unicode Filenames در راهنمای کاربر STDLIB مراجعه کنید. توجه داشته باشید که این مقدار برای پارامترهای خط فرمان و متغیرهای محیطی نیز اعمال می‌شود (بخش Unicode in Environment and Parameters را در راهنمای کاربر STDLIB ببینید).

+fnu[{w|i|e}]

ماشین مجازی با نام‌های فایل طوری رفتار می‌کند که گویی با UTF-8 (یا کدگذاری یونیکد خاص سیستم دیگری) کدگذاری شده‌اند. این حالت در سیستم‌عامل‌هایی که کدگذاری یونیکد را الزامی می‌کنند، یعنی ویندوز، مک‌اواس و اندروید، پیش‌فرض است.

سوییچ +fnu می‌تواند با w، i یا e دنبال شود تا نحوه گزارش نام‌های فایل با کدگذاری نادرست را کنترل کند:

•w بدین معناست که هرگاه یک نام فایل با کدگذاری نادرست در فهرست دایرکتوری نادیده گرفته شد، یک هشدار به error_logger ارسال شود. این حالت پیش‌فرض است.
•i بدین معناست که چنین نام‌های فایلی به آرامی و بی‌صدا نادیده گرفته شوند.
•e بدین معناست که هرگاه با نام فایل (یا پوشه) با کدگذاری نادرست مواجه شد، تابع API یک خطا بازگرداند.

توجه داشته باشید که اگر پیوند به یک نام فایل نامعتبر اشاره کند، file:read_link/1 همیشه یک خطا بازمی‌گرداند.

برای اطلاعات بیشتر درباره نام‌های فایل یونیکد، به بخش Unicode Filenames در راهنمای کاربر STDLIB مراجعه کنید. توجه داشته باشید که این مقدار برای پارامترهای خط فرمان و متغیرهای محیطی نیز اعمال می‌شود (بخش Unicode in Environment and Parameters را در راهنمای کاربر STDLIB ببینید).

+fna[{w|i|e}]

انتخاب میان +fnl و +fnu بر اساس تنظیمات محلی (locale) فعلی سیستم‌عامل انجام می‌شود. این بدان معناست که اگر ترمینال خود را روی کدگذاری UTF-8 تنظیم کرده باشید، انتظار می‌رود سیستم فایل نیز از همان کدگذاری برای نام‌های فایل استفاده کند. این حالت در تمام سیستم‌عامل‌ها به جز اندروید، مک‌اواس و ویندوز پیش‌فرض است.

سوییچ +fna می‌تواند با w، i یا e دنبال شود. این گزینه در صورتی اثرگذار است که تنظیمات محلی سبب انتخاب رفتار +fnu شوند؛ توضیحات مربوط به +fnu در بالا را ببینید. چنانچه تنظیمات محلی سبب انتخاب رفتار +fnl شوند، w، i یا e اثری نخواهند داشت.

برای اطلاعات بیشتر درباره نام‌های فایل یونیکد، به بخش Unicode Filenames در راهنمای کاربر STDLIB مراجعه کنید. توجه داشته باشید که این مقدار برای پارامترهای خط فرمان و متغیرهای محیطی نیز اعمال می‌شود (بخش Unicode in Environment and Parameters را در راهنمای کاربر STDLIB ببینید).

+hms Size

اندازه پیش‌فرض هیپ (heap) فرآیندها را روی اندازه Size کلمه (words) تنظیم می‌کند.

+hmbs Size

اندازه پیش‌فرض هیپ مجازی باینری فرآیندها را روی اندازه Size کلمه تنظیم می‌کند.

+hmax Size

حداکثر اندازه پیش‌فرض هیپ فرآیندها را روی اندازه Size کلمه تنظیم می‌کند. مقدار پیش‌فرض 0 است که به معنای عدم استفاده از حداکثر اندازه هیپ است. برای اطلاعات بیشتر، به process_flag(max_heap_size, MaxHeapSize) مراجعه نمایید.

+hmaxel true|false

تعیین می‌کند که آیا برای فرآیندهایی که به حداکثر اندازه هیپ می‌رسند پیام ثبت خطا ارسال شود یا خیر. پیش‌فرض true است. برای اطلاعات بیشتر به process_flag(max_heap_size, MaxHeapSize) مراجعه فرمایید.

+hmaxib true|false

تعیین می‌کند که آیا اندازه باینری‌های اشتراکی خارج از هیپ (off-heap) در مجموعِ مقایسه‌شده با حداکثر اندازه هیپ لحاظ شود یا خیر. پیش‌فرض false است. برای اطلاعات بیشتر به process_flag(max_heap_size, MaxHeapSize) مراجعه کنید.

+hmaxk true|false

تعیین می‌کند که آیا فرآیندهایی که به حداکثر اندازه هیپ می‌رسند کشته شوند یا خیر. پیش‌فرض true است. برای اطلاعات بیشتر به process_flag(max_heap_size, MaxHeapSize) مراجعه فرمایید.

+hpds Size

اندازه اولیه دیکشنری فرآیند را برای فرآیندها روی اندازه Size تنظیم می‌کند.

+hmqd off_heap|on_heap

مقدار پیش‌فرض فلگ فرآیندی message_queue_data را تنظیم می‌کند. پیش‌فرض on_heap است. اگر +hmqd ارسال نشود، on_heap حالت پیش‌فرض خواهد بود. برای اطلاعات بیشتر به process_flag(message_queue_data, MQD) مراجعه کنید.

+IOp PollSets

تعداد مجموعه‌های نظرسنجی ورودی/خروجی (IO pollsets) مورد استفاده هنگام پولینگ برای I/O را مشخص می‌کند. این گزینه فقط در پلتفرم‌هایی استفاده می‌شود که از به‌روزرسانی‌های همزمان یک pollset پشتیبانی می‌کنند، در غیر این صورت تعداد pollsetهای مورد استفاده با تعداد نخ‌های نظرسنجی I/O برابر خواهد بود. پیش‌فرض ۱ است.

+IOt PollThreads

تعداد نخ‌های نظرسنجی ورودی/خروجی (IO poll threads) مورد استفاده هنگام پولینگ برای I/O را تنظیم می‌کند. حداکثر تعداد مجاز نخ‌های نظرسنجی ۱۰۲۴ است. پیش‌فرض ۱ است.

یک راه مناسب برای بررسی نیاز به نخ‌های نظرسنجی بیشتر I/O، استفاده از حسابداری وضعیت خرد (microstate accounting) و بررسی بار کاری نخ نظرسنجی I/O است. در صورت بالا بودن بار، افزودن نخ‌های بیشتر ایده مناسبی خواهد بود.

+IOPp PollSetsPercentage

مشابه +IOp است، اما بر اساس تعداد نخ‌های نظرسنجی پیکربندی‌شده، از درصد برای تعیین تعداد مجموعه‌های نظرسنجی I/O جهت ایجاد استفاده می‌کند. در صورت استفاده همزمان از +IOPp و +IOp، گزینه +IOPp نادیده گرفته می‌شود.

+IOPt PollThreadsPercentage

مشابه +IOt است، اما بر اساس تعداد زمان‌بندهای پیکربندی‌شده، از درصد برای تعیین تعداد نخ‌های نظرسنجی I/O جهت ایجاد استفاده می‌کند. در صورت استفاده همزمان از +IOPt و +IOt، گزینه +IOPt نادیده گرفته می‌شود.

+IOs true|false

بهینه‌سازی نظرسنجی نخ زمان‌بند را فعال یا غیرفعال می‌کند. پیش‌فرض true است.

در صورت فعال بودن، توصیف‌کننده‌های فایلی که مکرراً خوانده می‌شوند ممکن است به یک pollset ویژه مورد استفاده نخ‌های زمان‌بند منتقل شوند. هدف از این کار کاهش تعداد فراخوانی‌های سیستمی و در نتیجه بار CPU است، با این حال در برخی موارد ممکن است تأخیر زمان‌بندی را برای رویدادهای ورودی توصیف‌کننده فایل منفرد افزایش دهد.

•+JPcover true|false|function|function_counters|line|line_counters

پشتیبانی از پوشش کد (coverage) را هنگام اجرا با JIT فعال یا غیرفعال می‌کند. پیش‌فرض false است.

function

تمامی ماژول‌های بارگذاری‌شده ابزاربندی می‌شوند تا توابع اجراشده پیگیری گردند. اطلاعات مربوط به توابع اجراشده را می‌توان با فراخوانی code:get_coverage(function, Module) بازیابی کرد.

function_counters

تمامی ماژول‌های بارگذاری‌شده ابزاربندی می‌شوند تا تعداد دفعات اجرای هر تابع شمارش شود. اطلاعات درباره تعداد دفعات اجرای هر تابع را می‌توان با فراخوانی code:get_coverage(function, Module) به دست آورد.

line

هنگامی که ماژول‌های کامپایل‌شده با گزینه line_coverage بارگذاری شوند، ابزاربندی می‌گردند تا خطوط اجراشده پیگیری شوند. اطلاعات مربوط به خطوط اجراشده با فراخوانی code:get_coverage(line, Module) و اطلاعات توابع اجراشده با فراخوانی code:get_coverage(function, Module) قابل بازیابی است.

line_counters

هنگامی که ماژول‌های کامپایل‌شده با گزینه line_coverage بارگذاری شوند، ابزاربندی می‌گردند تا تعداد دفعات اجرای هر خط شمارش شود. اطلاعات مربوط به تعداد دفعات اجرای هر خط با فراخوانی code:get_coverage(line, Module) و اطلاعات توابع اجراشده با فراخوانی code:get_coverage(function, Module) قابل بازیابی است (توجه داشته باشید که در این حالت، شمارنده‌های تعداد دفعات اجرای هر تابع نمی‌توانند بازیابی شوند).

true

مشابه line_counters است.

false

پوشش کد را غیرفعال می‌کند.

از نسخه: OTP 27.0

+JPperf true|false|dump|map|fp|no_fp

پشتیبانی از پروفایلر perf را هنگام اجرا با JIT در لینوکس فعال یا غیرفعال می‌کند. پیش‌فرض false است.

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

dump

اطلاعات دقیق خطوط را در اختیار perf قرار می‌دهد تا قابلیت perf annotate کار کند.

map

یک نگاشت از تمامی کدهای ماژول را به perf ارائه می‌دهد و امکان ترجمه آدرس‌های کد ماشین به موقعیت‌های سورس‌کد ارلنگ را فراهم می‌سازد. این کار همچنین فریم‌پوینترها را برای کد ارلنگ فعال می‌کند تا perf بتواند استک فراخوانی فرآیندهای ارلنگ را پیمایش کند، که هزینه‌ای معادل یک کلمه اضافی برای هر فریم استک به همراه دارد.

fp

فریم‌پوینترها را مستقل از گزینه map فعال می‌کند.

no_fp

فریم‌پوینترهای اضافه‌شده توسط گزینه map را غیرفعال می‌کند.

true

گزینه‌های map و dump را فعال می‌سازد.

false

تمام گزینه‌های دیگر را غیرفعال می‌کند.

برای جزئیات بیشتر درباره نحوه اجرای perf، به بخش پشتیبانی perf در مستندات داخلی BeamAsm مراجعه فرمایید.

+JPperfdirectory <directory>

پوشه مورد استفاده برای ذخیره فایل‌های dump و map ابزار perf را هنگام اجرا با JIT در لینوکس تعیین می‌کند. پیش‌فرض /tmp است.

+JMsingle true|false

استفاده از حافظه تک‌نگاشت RWX را برای کدهای JIT فعال یا غیرفعال می‌کند.

حالت پیش‌فرض این است که کد ماشین تولیدشده توسط JIT در دو ناحیه با صفحات فیزیکی یکسان نگاشت شود که یک ناحیه قابل اجرا اما غیرقابل نوشتن، و دیگری قابل نوشتن اما غیرقابل اجرا باشد. از آنجا که برخی ابزارها مانند شبیه‌ساز حالت کاربر QEMU نمی‌توانند با نگاشت دوگانه کار کنند، این فلگ امکان غیرفعال کردن آن را فراهم می‌آورد. این فلگ به طور خودکار توسط فلگ +JPperf فعال می‌شود.

از نسخه: OTP 26.0

+L

از بارگذاری اطلاعات مربوط به نام فایل‌های سورس و شماره خطوط جلوگیری به عمل می‌آورد. این کار مقداری در حافظه صرفه‌جویی می‌کند، اما استثناها فاقد اطلاعات نام فایل و شماره خطوط خواهند بود.

+MFlag Value

فلگ‌های اختصاصی تخصیص‌دهنده حافظه. برای اطلاعات بیشتر، به erts_alloc(3) مراجعه کنید.

+pad true|false

مقدار بولی مورد استفاده با پارامتر +pad مقدار پیش‌فرض فلگ فرآیندی async_dist را برای فرآیندهای تازه‌ایجاده‌شده تعیین می‌کند.

به طور پیش‌فرض، اگر هیچ گزینه خط فرمانی با +pad ارسال نشود، فلگ async_dist روی false تنظیم خواهد شد.

مقدار استفاده‌شده در زمان اجرا را می‌توان با فراخوانی erlang:system_info(async_dist) بررسی کرد.

از نسخه: OTP 25.3


+pc Range

محدوده نویسه‌هایی را تعیین می‌کند که سیستم در تشخیص تقریبی (هیوریستیک) رشته‌ها، آنها را قابل چاپ در نظر می‌گیرد. این معمولاً بر شل، اشکال‌زدا و توابع io:format (هنگامی که ~tp در رشته قالب‌بندی استفاده شود) تأثیر می‌گذارد.

دو مقدار برای Range پشتیبانی می‌شود:

latin1

حالت پیش‌فرض. تنها نویسه‌ها در محدوده ISO Latin-1 قابل چاپ در نظر گرفته می‌شوند. این بدان معناست که نویسه‌ای با مقدار کدبندی بزرگتر از ۲۵۵ هرگز قابل چاپ در نظر گرفته نمی‌شود و لیست‌های حاوی چنین نویسه‌هایی توسط ابزارها به جای رشته‌های متنی به صورت لیستی از اعداد صحیح نمایش داده می‌شوند.

unicode

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

همچنین به io:printable_range/0 در STDLIB مراجعه کنید.


+P Number

در صورت ارسال Number به عنوان مقدار، حداکثر تعداد فرآیندهای همزمان موجود را برای این سیستم تنظیم می‌کند. محدوده معتبر برای Number برابر با [1024-134217727] است.

نکته: حداکثر مقدار واقعی انتخاب‌شده ممکن است بسیار بزرگتر از Number ارسالی باشد. در حال حاضر سیستم زمان اجرا اغلب (اما نه همیشه) مقداری را انتخاب می‌کند که توانی از ۲ باشد. این مورد ممکن است در آینده تغییر کند. مقدار واقعی انتخاب‌شده را می‌توان با فراخوانی erlang:system_info(process_limit) بررسی کرد.

مقدار پیش‌فرض 1048576 است.


+Q Number

در صورت ارسال Number به عنوان مقدار، حداکثر تعداد پورت‌های همزمان موجود را برای این سیستم تنظیم می‌کند. محدوده معتبر برای Number برابر با [1024-134217727] است.

نکته: حداکثر مقدار واقعی انتخاب‌شده ممکن است بسیار بزرگتر از Number واقعی ارسالی باشد. در حال حاضر سیستم زمان اجرا معمولاً (اما نه همیشه) مقداری را انتخاب می‌کند که توانی از ۲ باشد. این مورد ممکن است در آینده تغییر کند. مقدار واقعی انتخاب‌شده را می‌توان با فراخوانی erlang:system_info(port_limit) بررسی کرد.

مقدار پیش‌فرض مورد استفاده معمولاً 65536 است. با این حال، اگر سیستم زمان اجرا بتواند حداکثر تعداد توصیف‌کننده‌های فایلی را که مجاز به باز کردن آنهاست تشخیص دهد و این مقدار بزرگتر از 65536 باشد، مقدار انتخابی به مقداری بزرگتر یا مساوی با حداکثر تعداد توصیف‌کننده‌های فایلی که می‌توانند باز شوند افزایش می‌یابد.

در ویندوز، مقدار پیش‌فرض روی 8196 تنظیم شده است، زیرا محدودیت‌های معمول سیستم‌عامل فراتر از توان کاری اکثر ماشین‌ها تنظیم شده است.

+r

بلوک‌های حافظه ETS را مجبور می‌کند که در هنگام بازتخصیص جابجا شوند.

+rg ReaderGroupsLimit

تعداد گروه‌های خواننده مورد استفاده توسط قفل‌های خواندن/نوشتنِ بهینه‌شده برای عملیات خواندن در سیستم زمان اجرای ارلنگ را محدود می‌کند. به طور پیش‌فرض محدودیت گروه‌های خواننده ۶۴ است.

هنگامی که تعداد زمان‌بندها کمتر یا مساوی محدودیت گروه‌های خواننده باشد، هر زمان‌بند گروه خواننده اختصاصی خود را دارد. هنگامی که تعداد زمان‌بندها بیشتر از محدودیت گروه‌های خواننده باشد، زمان‌بندها گروه‌های خواننده را به اشتراک می‌گذارند. گروه‌های خواننده مشترک کارایی قفل و آزادسازی خواندن را کاهش می‌دهند، در حالی که گروه‌های خواننده پرتعداد کارایی قفل نوشتن را کاهش می‌دهند. بنابراین، این محدودیت مصالحه‌ای بین کارایی عملیات خواندن و کارایی عملیات نوشتن است. هر گروه خواننده ۶۴ بایت در هر قفل خواندن/نوشتن مصرف می‌کند.

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

+S Schedulers:SchedulerOnline

تعداد نخ‌های زمان‌بند برای ایجاد و تعداد نخ‌های زمان‌بند برای آنلاین قرار دادن را تعیین می‌کند. حداکثر برای هر دو مقدار ۱۰۲۴ است. اگر سیستم زمان اجرای ارلنگ قادر به تشخیص تعداد پردازنده‌های منطقی پیکربندی‌شده و پردازنده‌های منطقی موجود باشد، مقدار Schedulers به طور پیش‌فرض برابر با پردازنده‌های منطقی پیکربندی‌شده، و SchedulersOnline به طور پیش‌فرض برابر با پردازنده‌های منطقی موجود خواهد بود؛ در غیر این صورت مقادیر پیش‌فرض ۱ هستند. اگر شبیه‌ساز تشخیص دهد که تحت سهمیه CPU (CPU quota) قرار دارد، مقدار پیش‌فرض SchedulersOnline بر همان اساس محدود خواهد شد.

اگر :SchedulerOnline مشخص شده باشد، می‌توان Schedulers را حذف کرد و برعکس. تعداد زمان‌بندهای آنلاین را می‌توان در زمان اجرا از طریق erlang:system_flag(schedulers_online, SchedulersOnline) تغییر داد.

اگر Schedulers یا SchedulersOnline به صورت یک عدد منفی مشخص شوند، مقدار مربوطه به ترتیب از تعداد پیش‌فرض پردازنده‌های منطقی پیکربندی‌شده یا پردازنده‌های منطقی موجود کسر می‌شود.

مشخص کردن مقدار 0 برای Schedulers یا SchedulersOnline به ترتیب تعداد نخ‌های زمان‌بند یا نخ‌های زمان‌بند آنلاین را به مقدار پیش‌فرض بازنشانی می‌کند.

+SP SchedulersPercentage:SchedulersOnlinePercentage

مشابه +S است، اما از درصد برای تنظیم تعداد نخ‌های زمان‌بند جهت ایجاد بر اساس پردازنده‌های منطقی پیکربندی‌شده، و نخ‌های زمان‌بند برای آنلاین کردن بر اساس پردازنده‌های منطقی موجود استفاده می‌کند. مقادیر مشخص‌شده باید > 0 باشند. به عنوان مثال، +SP 50:25 تعداد نخ‌های زمان‌بند را روی ۵۰٪ از پردازنده‌های منطقی پیکربندی‌شده و تعداد نخ‌های زمان‌بند آنلاین را روی ۲۵٪ از پردازنده‌های منطقی موجود تنظیم می‌کند. اگر :SchedulersOnlinePercentage مشخص شده باشد می‌توان SchedulersPercentage را حذف کرد و برعکس. تعداد زمان‌بندهای آنلاین را می‌توان در زمان اجرا از طریق erlang:system_flag(schedulers_online, SchedulersOnline) تغییر داد.

این گزینه با تنظیمات +S تعامل دارد. به عنوان مثال، روی سیستمی با ۸ هسته منطقی پیکربندی‌شده و ۸ هسته منطقی موجود، ترکیب گزینه‌های +S 4:4 +SP 50:25 (به هر ترتیبی) منجر به ۲ نخ زمان‌بند (۵۰٪ از ۴) و ۱ نخ زمان‌بند آنلاین (۲۵٪ از ۴) می‌شود.

+SDcpu DirtyCPUSchedulers:DirtyCPUSchedulersOnline

تعداد نخ‌های زمان‌بند کثیف CPU برای ایجاد و نخ‌های زمان‌بند کثیف CPU برای آنلاین قرار دادن را تنظیم می‌کند. حداکثر برای هر دو مقدار ۱۰۲۴ است و هر مقدار توسط تنظیمات زمان‌بندهای معمولی بیشتر محدود می‌شود:
•تعداد نخ‌های زمان‌بند کثیف CPU ایجادشده نمی‌تواند از تعداد نخ‌های زمان‌بند معمولی ایجادشده بیشتر باشد.
•تعداد نخ‌های زمان‌بند کثیف CPU آنلاین نمی‌تواند از تعداد نخ‌های زمان‌بند معمولی آنلاین بیشتر باشد.

برای جزئیات، به +S و +SP مراجعه کنید. به طور پیش‌فرض، تعداد نخ‌های زمان‌بند کثیف CPU ایجادشده با تعداد نخ‌های زمان‌بند معمولی ایجادشده برابر است، و تعداد نخ‌های زمان‌بند کثیف CPU آنلاین با تعداد نخ‌های زمان‌بند معمولی آنلاین برابر است. اگر :DirtyCPUSchedulersOnline مشخص شده باشد می‌توان DirtyCPUSchedulers را حذف کرد و برعکس. تعداد زمان‌بندهای کثیف CPU آنلاین را می‌توان در زمان اجرا از طریق erlang:system_flag(dirty_cpu_schedulers_online, DirtyCPUSchedulersOnline) تغییر داد.

میزان زمان‌بندهای کثیف CPU به میزان زمان‌بندهای معمولی محدود می‌شود تا تأثیر بر فرآیندهای در حال اجرا روی زمان‌بندهای معمولی محدود گردد. اگر مقدار زمان‌بندهای کثیف CPU نامحدود می‌بود، کارهای وابسته به CPU کثیف پتانسیل گرسنگی دادن (starvation) به کارهای معمولی را داشتند.

کاربران معمول زمان‌بندهای کثیف CPU عبارتند از عملیات بزرگ جمع‌آوری زباله (garbage collection)، انکودرها/دیکودرهای پروتکل json که به عنوان NIF نوشته شده‌اند و کتابخانه‌های محاسبات ماتریسی.

می‌توانید از msacc برای مشاهده بار کاری فعلی نخ‌های زمان‌بندهای کثیف CPU و تنظیم تعداد مورد استفاده متناسب با آن بهره بگیرید.

+SDPcpu DirtyCPUSchedulersPercentage:DirtyCPUSchedulersOnlinePercentage

مشابه +SDcpu است، اما از درصد برای تعیین تعداد نخ‌های زمان‌بند کثیف CPU جهت ایجاد و تعداد نخ‌های زمان‌بند کثیف CPU برای آنلاین قرار دادن استفاده می‌کند. مقادیر تعیین‌شده باید > 0 باشند. به عنوان مثال، +SDPcpu 50:25 تعداد نخ‌های زمان‌بند کثیف CPU را روی ۵۰٪ از پردازنده‌های منطقی پیکربندی‌شده و تعداد نخ‌های زمان‌بند کثیف CPU آنلاین را روی ۲۵٪ از پردازنده‌های منطقی در دسترس تنظیم می‌کند. در صورت وجود :DirtyCPUSchedulersOnlinePercentage، می‌توان DirtyCPUSchedulersPercentage را حذف کرد و برعکس. تعداد زمان‌بندهای کثیف CPU آنلاین را می‌توان در زمان اجرا از طریق erlang:system_flag(dirty_cpu_schedulers_online, DirtyCPUSchedulersOnline) تغییر داد.

این گزینه با تنظیمات +SDcpu تعامل دارد. به عنوان مثال، روی سیستمی با ۸ هسته منطقی پیکربندی‌شده و ۸ هسته منطقی در دسترس، ترکیب گزینه‌های +SDcpu 4:4 +SDPcpu 50:25 (به هر ترتیبی) منجر به ۲ نخ زمان‌بند کثیف CPU (۵۰٪ از ۴) و ۱ نخ زمان‌بند کثیف CPU آنلاین (۲۵٪ از ۴) می‌شود.

+SDio DirtyIOSchedulers

تعداد نخ‌های زمان‌بند کثیف I/O برای ایجاد را تنظیم می‌کند. محدوده معتبر ۱ تا ۱۰۲۴ است. به طور پیش‌فرض، تعداد نخ‌های زمان‌بند کثیف I/O ایجادشده برابر با ۱۰ است.

تعداد زمان‌بندهای کثیف IO بر خلاف تعداد زمان‌بندهای کثیف CPU توسط تعداد زمان‌بندهای معمولی محدود نمی‌شود؛ چرا که انتظار می‌رود تنها کارهای وابسته به ورودی/خروجی (I/O bound) روی زمان‌بندهای کثیف I/O اجرا شوند. اگر کاربر کارهای وابسته به CPU را روی زمان‌بندهای کثیف I/O زمان‌بندی کند، این کارها ممکن است کارهای عادی در حال اجرا روی زمان‌بندهای معمولی را دچار گرسنگی کنند.

کاربران معمول زمان‌بندهای کثیف IO خواندن و نوشتن فایل‌ها هستند.

می‌توانید از msacc استفاده کنید تا بار کاری فعلی نخ‌های زمان‌بند کثیف IO را مشاهده کرده و تعداد مورد استفاده را بر همان اساس تنظیم نمایید.

+sFlag Value

فلگ‌های اختصاصی زمان‌بندی.

+sbt BindType

نوع مقیدسازی (اتصال) زمان‌بند را تنظیم می‌کند.

زمان‌بندها را می‌توان با استفاده از فلگ +stbt نیز مقید کرد. تنها تفاوت میان این دو فلگ نحوه مدیریت خطاهای زیر است:

•مقیدسازی زمان‌بندها در پلتفرم مربوطه پشتیبانی نمی‌شود.
•توپولوژی CPU در دسترس نیست؛ یعنی سیستم زمان اجرا نتوانسته است توپولوژی CPU را به صورت خودکار تشخیص دهد و هیچ توپولوژی CPU تعریف‌شده توسط کاربر نیز تنظیم نشده است.

اگر هر یک از این خطاها هنگام ارسال +sbt رخ دهد، سیستم زمان اجرا یک پیام خطا چاپ کرده و از شروع به کار خودداری می‌کند. اگر هر یک از این خطاها هنگام ارسال +stbt رخ دهد، سیستم زمان اجرا بی‌صدا خطا را نادیده گرفته و با استفاده از زمان‌بندهای غیرمقید راه‌اندازی می‌شود.

مقادیر معتبر BindType:

u

unbound - زمان‌بندها به پردازنده‌های منطقی مقید نمی‌شوند؛ یعنی سیستم‌عامل تصمیم می‌گیرد که نخ‌های زمان‌بند در کجا اجرا شوند و چه زمانی مهاجرت کنند. این حالت پیش‌فرض است.

ns

no_spread - زمان‌بندها با شناسه‌های نزدیک به هم تا حد امکان در سخت‌افزار نزدیک به یکدیگر مقید می‌شوند.

ts

thread_spread - نخ به نخ‌های سخت‌افزاری اشاره دارد (مانند فناوری Hyper-Threading اینتل). زمان‌بندها با شناسه پایین به نخستین نخ سخت‌افزاری هر هسته مقید می‌شوند، سپس زمان‌بندها با شناسه بالاتر به دومین نخ سخت‌افزاری هر هسته متصل می‌گردند و به همین ترتیب.

ps

processor_spread - زمان‌بندها مانند thread_spread توزیع می‌شوند، اما علاوه بر آن در میان تراشه‌های فیزیکی پردازنده نیز پخش می‌گردند.

s

spread - زمان‌بندها تا جای ممکن به صورت گسترده توزیع می‌شوند.

nnts

no_node_thread_spread - مانند thread_spread است، اما در صورت وجود چندین گره NUMA، زمان‌بندها در هر زمان روی یک گره NUMA توزیع می‌شوند؛ یعنی تمام پردازنده‌های منطقی یک گره NUMA به ترتیب به زمان‌بندها مقید می‌شوند.

nnps

no_node_processor_spread - مانند processor_spread است، اما در صورت وجود چندین گره NUMA، زمان‌بندها در هر زمان روی یک گره NUMA پخش می‌شوند.

tnnps

thread_no_node_processor_spread - ترکیبی از thread_spread و no_node_processor_spread است. زمان‌بندها بر روی نخ‌های سخت‌افزاری در گره‌های NUMA توزیع می‌شوند، اما در داخل هر گره NUMA در یک زمان تنها میان پردازنده‌ها پخش می‌گردند.

db

default_bind - زمان‌بندها را به شیوه پیش‌فرض مقید می‌کند. پیش‌فرض thread_no_node_processor_spread است (که ممکن است در آینده تغییر کند).

مقیدسازی زمان‌بندها تنها در سیستم‌های جدیدتر لینوکس، سولاریس، FreeBSD و ویندوز پشتیبانی می‌شود.

اگر هنگام پردازش فلگ +sbt هیچ توپولوژی CPU در دسترسی نباشد و BindType هر مقداری غیر از u باشد، راه‌اندازی سیستم زمان اجرا با شکست مواجه می‌شود. توپولوژی CPU می‌تواند با استفاده از فلگ +sct تعریف شود. توجه داشته باشید که در صورت عدم تشخیص خودکار توپولوژی CPU، ممکن است لازم باشد فلگ +sct پیش از فلگ +sbt در خط فرمان قرار گیرد.

سیستم زمان اجرا به طور پیش‌فرض زمان‌بندها را به پردازنده‌های منطقی مقید نمی‌کند.

نکته: اگر سیستم زمان اجرای ارلنگ تنها فرآیند سیستم‌عامل باشد که نخ‌ها را به پردازنده‌های منطقی مقید می‌کند، این امر کارایی سیستم زمان اجرا را بهبود می‌بخشد. اما اگر سایر فرآیندهای سیستم‌عامل (برای مثال یک سیستم زمان اجرای دیگر ارلنگ) نیز نخ‌ها را به پردازنده‌های منطقی مقید کنند، ممکن است در عوض افت کارایی رخ دهد. این افت کارایی گاهی می‌تواند شدید باشد. در این شرایط، توصیه می‌شود زمان‌بندها را مقید نکنید.

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

نکته: اگر یک زمان‌بند نتواند مقید شود، این موضوع اغلب بدون سر و صدا نادیده گرفته می‌شود؛ چرا که تأیید شناسه‌های معتبر پردازنده‌های منطقی همواره امکان‌پذیر نیست. در صورت گزارش خطا، این خطا به error_logger گزارش می‌شود. اگر می‌خواهید اطمینان حاصل کنید که زمان‌بندها طبق درخواست مقید شده‌اند، erlang:system_info(scheduler_bindings) را فراخوانی کنید.

+sbwt none|very_short|short|medium|long|very_long

آستانه انتظار فعال (busy wait) زمان‌بند را تنظیم می‌کند. پیش‌فرض medium است. این آستانه مشخص می‌کند که زمان‌بندها هنگام اتمام کار، چه مدت پیش از رفتن به حالت خواب باید به انتظار فعال بپردازند.

نکته: این فلگ می‌تواند در هر زمان و بدون اطلاع قبلی حذف یا تغییر داده شود.

+sbwtdcpu none|very_short|short|medium|long|very_long

مشابه +sbwt است اما بر زمان‌بندهای کثیف CPU تأثیر می‌گذارد. پیش‌فرض short است.

نکته: این فلگ می‌تواند در هر زمان و بدون اطلاع قبلی حذف یا تغییر داده شود.

+sbwtdio none|very_short|short|medium|long|very_long

مشابه +sbwt است اما بر زمان‌بندهای کثیف IO تأثیر می‌گذارد. پیش‌فرض short است.

نکته: این فلگ می‌تواند در هر زمان و بدون اطلاع قبلی حذف یا تغییر داده شود.

+scl true|false

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

گزینه +scl false مشابه +sub true است، اما +sub true همچنین میزان استفاده از زمان‌بندها را بین آنها متعادل می‌کند.

+sct CpuTopology

یک توپولوژی CPU تعریف‌شده توسط کاربر را تنظیم می‌کند. توپولوژی تعریف‌شده توسط کاربر بر هرگونه توپولوژی CPU شناسایی‌شده خودکار اولویت دارد. توپولوژی CPU هنگام مقید کردن زمان‌بندها به پردازنده‌های منطقی استفاده می‌شود. این گزینه در خط فرمان باید پیش از +sbt قرار گیرد.
<Id> = integer(); when 0 =< <Id> =< 65535
<IdRange> = <Id>-<Id>
<IdOrIdRange> = <Id> | <IdRange>
<IdList> = <IdOrIdRange>,<IdOrIdRange> | <IdOrIdRange>
<LogicalIds> = L<IdList>
<ThreadIds> = T<IdList> | t<IdList>
<CoreIds> = C<IdList> | c<IdList>
<ProcessorIds> = P<IdList> | p<IdList>
<NodeIds> = N<IdList> | n<IdList>
<IdDefs> = <LogicalIds><ThreadIds><CoreIds><ProcessorIds><NodeIds> |
           <LogicalIds><ThreadIds><CoreIds><NodeIds><ProcessorIds>
CpuTopology = <IdDefs>:<IdDefs> | <IdDefs>

حروف بزرگ بیانگر شناسه‌های واقعی و حروف کوچک بیانگر شناسه‌های فرضی هستند که تنها برای توصیف توپولوژی استفاده می‌شوند. شناسه‌های ارائه‌شده به عنوان شناسه‌های واقعی می‌توانند توسط سیستم زمان اجرا هنگام تلاش برای دسترسی به سخت‌افزار خاص استفاده شوند؛ اگر نادرست باشند رفتار سیستم نامعین خواهد بود. شناسه‌های فرضی پردازنده منطقی پذیرفته نمی‌شوند، زیرا بدون شناسه‌های واقعی پردازنده منطقی، تعریف توپولوژی CPU بی‌معناست. شناسه‌های نخ، هسته، پردازنده و گره می‌توانند حذف شوند. در صورت حذف، شناسه نخ به طور پیش‌فرض t0، شناسه هسته c0، شناسه پردازنده p0 و شناسه گره تعریف‌نشده باقی می‌ماند. یا هر پردازنده منطقی باید فقط به یک گره NUMA تعلق داشته باشد، یا هیچ پردازنده منطقی نباید به هیچ گره NUMA تعلق داشته باشد.

هر دو بازه افزایشی و کاهشی در <IdRange> مجاز هستند.

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

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

•<LogicalIds><ThreadIds><CoreIds><ProcessorIds><NodeIds>، یعنی نخ بخشی از هسته است، هسته بخشی از پردازنده و پردازنده بخشی از یک گره NUMA است.
•<LogicalIds><ThreadIds><CoreIds><NodeIds><ProcessorIds>، یعنی نخ بخشی از هسته است، هسته بخشی از یک گره NUMA و گره NUMA بخشی از پردازنده است.

یک توپولوژی CPU می‌تواند شامل هر دو گره NUMA خارجی پردازنده و داخلی پردازنده باشد، مادامی که هر پردازنده منطقی تنها به یک گره NUMA تعلق داشته باشد. اگر <ProcessorIds> حذف شود، موقعیت پیش‌فرض آن پیش از <NodeIds> خواهد بود؛ یعنی پیش‌فرض گره‌های NUMA خارجی پردازنده است.

اگر لیستی از شناسه‌ها در یک <IdDefs> به کار رود:

•<LogicalIds> باید لیستی از شناسه‌ها باشد.
•حداقل یک نوع شناسه دیگر علاوه بر <LogicalIds> نیز باید دارای لیستی از شناسه‌ها باشد.
•تمامی لیست‌های شناسه‌ها باید تعداد یکسانی شناسه تولید کنند.

یک مثال ساده. یک پردازنده چهار هسته‌ای تک می‌تواند به شکل زیر توصیف شود:

% erl +sct L0-3c0-3
1> erlang:system_info(cpu_topology).
[{processor,[{core,{logical,0}},
             {core,{logical,1}},
             {core,{logical,2}},
             {core,{logical,3}}]}]

یک مثال پیچیده‌تر با دو پردازنده چهار هسته‌ای، که هر پردازنده در گره NUMA اختصاصی خود قرار دارد. ترتیب پردازنده‌های منطقی کمی نامتعارف است تا مثال بهتری از لیست شناسه‌ها ارائه شود:

% erl +sct L0-1,3-2c0-3p0N0:L7,4,6-5c0-3p1N1
1> erlang:system_info(cpu_topology).
[{node,[{processor,[{core,{logical,0}},
                    {core,{logical,1}},
                    {core,{logical,3}},
                    {core,{logical,2}}]}]},
 {node,[{processor,[{core,{logical,7}},
                    {core,{logical,4}},
                    {core,{logical,6}},
                    {core,{logical,5}}]}]}]

تا زمانی که شناسه‌های واقعی صحیح باشند، اشکالی ندارد توپولوژی CPU ارائه‌شده توصیف دقیقی از سخت‌افزار واقعی نباشد. این کار در صورت استفاده دقیق می‌تواند بسیار مفید واقع شود تا شبیه‌ساز فریب خورده و زمان‌بندها را طبق تمایل شما مقید کند. برای نمونه، اگر می‌خواهید چندین سیستم زمان اجرای ارلنگ را روی یک ماشین اجرا کنید، می‌توانید تعداد زمان‌بندها را کاهش داده و توپولوژی CPU را دستکاری کنید تا به CPUهای منطقی متفاوتی مقید شوند. یک مثال با دو سیستم زمان اجرای ارلنگ روی یک ماشین چهار هسته‌ای:

% erl +sct L0-3c0-3 +sbt db +S3:2 -detached -noinput -noshell -sname one
% erl +sct L3-0c0-3 +sbt db +S3:2 -detached -noinput -noshell -sname two

در این مثال، هر سیستم زمان اجرا دارای دو زمان‌بند آنلاین است و تمام زمان‌بندهای آنلاین روی هسته‌های متفاوتی اجرا خواهند شد. اگر این وضعیت را به یک زمان‌بند آنلاین در یک سیستم و سه زمان‌بند آنلاین در سیستم دیگر تغییر دهیم، باز هم تمام زمان‌بندهای آنلاین روی هسته‌های متفاوتی اجرا خواهند شد.

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

برای اطلاعات بیشتر، به erlang:system_info(cpu_topology) مراجعه نمایید.

+ssrct

از خواندن توپولوژی CPU صرف‌نظر می‌کند.

نکته: خواندن توپولوژی CPU زمان راه‌اندازی را هنگام اجرای نمونه‌های موازی متعدد از ERTS بر روی سیستم‌های دارای تعداد هسته‌های زیاد کُند می‌کند؛ استفاده از این فلگ ممکن است در چنین سناریوهایی سرعت اجرا را افزایش دهد.

+sfwi Interval

فاصله زمانی بیدارباش اجباری زمان‌بند را تنظیم می‌کند. تمام صف‌های اجرا در هر Interval میلی‌ثانیه اسکن می‌شوند. در صورتی که زمان‌بندهای به خواب‌رفته در سیستم وجود داشته باشند، به ازای هر صف اجرای غیرخالی یافته‌شده یک زمان‌بند بیدار می‌شود. پیش‌فرض Interval برابر با 0 است، به این معنی که این قابلیت غیرفعال است.

نکته: این قابلیت به عنوان یک راهکار موقت برای کدهای بومی (native code) با اجرای طولانی و کدهای بومی که در OTP کاهش‌ها (reductions) را به درستی افزایش نمی‌دهند ارائه شده است. پس از رفع این اشکالات، این فلگ حذف خواهد شد.

+spp Bool

راهنمای پیش‌فرض زمان‌بند را برای موازی‌سازی پورت تنظیم می‌کند. اگر روی true تنظیم شود، ماشین مجازی وظایف پورت را در صورتی که موازی‌سازی در سیستم را بهبود بخشد زمان‌بندی می‌کند. اگر روی false تنظیم شود، ماشین مجازی تلاش می‌کند وظایف پورت را بلافاصله انجام دهد و تأخیر را به بهای کاهش موازی‌سازی بهبود بخشد. پیش‌فرض false است. مقدار پیش‌فرض استفاده‌شده در زمان اجرا با فراخوانی erlang:system_info(port_parallelism) قابل بررسی است. مقدار پیش‌فرض می‌تواند هنگام ایجاد پورت با ارسال گزینه parallelism به erlang:open_port/2 بازنویسی شود.

+sss size

اندازه پیشنهادی استک، بر حسب کیلوورد، برای نخ‌های زمان‌بند. محدوده معتبر ۲۰ تا ۸۱۹۲ کیلوورد است. اندازه پیشنهادی پیش‌فرض استک ۱۲۸ کیلوورد است.

+sssdcpu size

اندازه پیشنهادی استک، بر حسب کیلوورد، برای نخ‌های زمان‌بند کثیف CPU. محدوده معتبر ۲۰ تا ۸۱۹۲ کیلوورد است. اندازه پیشنهادی پیش‌فرض استک ۴۰ کیلوورد است.

+sssdio size

اندازه پیشنهادی استک، بر حسب کیلوورد، برای نخ‌های زمان‌بند کثیف IO. محدوده معتبر ۲۰ تا ۸۱۹۲ کیلوورد است. اندازه پیشنهادی پیش‌فرض استک ۴۰ کیلوورد است.

+stbt BindType

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

+sub true|false

متعادل‌سازی بهره‌وری بار زمان‌بند را فعال یا غیرفعال می‌کند. به طور پیش‌فرض متعادل‌سازی بهره‌وری بار زمان‌بند غیرفعال است و به جای آن فشرده‌سازی بار زمان‌بند فعال است که به دنبال توزیع باری است تا بیشترین تعداد ممکن از نخ‌های زمان‌بند کاملاً پرکار باشند (یعنی کارشان تمام نشود). هنگامی که متعادل‌سازی بهره‌وری بار زمان‌بند فعال باشد، سیستم در عوض تلاش می‌کند بهره‌وری زمان‌بندها را بین آنها متعادل سازد؛ یعنی برای دستیابی به بهره‌وری برابر در تمام زمان‌بندها تلاش می‌کند.

گزینه +sub true تنها در سیستم‌هایی پشتیبانی می‌شود که سیستم زمان اجرا یک ساعت با وضوح بالا و یکنواخت افزایشی را شناسایی کرده و مورد استفاده قرار دهد. در سایر سیستم‌ها، راه‌اندازی سیستم زمان اجرا با شکست مواجه می‌شود.

گزینه +sub true مستلزم +scl false است. تفاوت بین +sub true و +scl false این است که +scl false تلاشی برای متعادل کردن بهره‌وری زمان‌بندها نمی‌کند.

+swct very_eager|eager|medium|lazy|very_lazy

آستانه پاک‌سازی بیدارباش زمان‌بند را تنظیم می‌کند. پیش‌فرض medium است. کنترل می‌کند که زمان‌بندها تا چه حد مشتاق هستند به دلیل برخی عملیات پاک‌سازی درخواست بیدارباش دهند. هنگامی که یک تنظیم تنبل (lazy) استفاده شود، عملیات پاک‌سازی معوقه بیشتری می‌توانند در زمان بیکاری زمان‌بند انجام‌نشده باقی بمانند. هنگامی که تنظیم مشتاق (eager) استفاده شود، زمان‌بندها با بسامد بیشتری بیدار می‌شوند که پتانسیل افزایش بهره‌وری CPU را دارد.

نکته: این فلگ می‌تواند در هر زمان بدون اطلاع قبلی حذف یا تغییر یابد.

+sws default|legacy

راهبرد بیدارباش زمان‌بند را تنظیم می‌کند. راهبرد پیش‌فرض در ERTS 5.10 (Erlang/OTP R16A) تغییر کرد. این راهبرد در Erlang/OTP R15 با عنوان proposal شناخته می‌شد. راهبرد legacy از نسخه R13 تا نسخه R15 به عنوان پیش‌فرض استفاده می‌شد.

نکته: این فلگ می‌تواند در هر زمان بدون اطلاع قبلی حذف یا تغییر یابد.

+swt very_low|low|medium|high|very_high

آستانه بیدارباش زمان‌بند را تنظیم می‌کند. پیش‌فرض medium است. این آستانه تعیین می‌کند که در صورت وجود کاری بیش از ظرفیت رسیدگی زمان‌بندهای بیدار فعلی، چه زمانی باید زمان‌بندهای به خواب‌رفته بیدار شوند. آستانه پایین سبب بیدارباش‌های زودهنگام‌تر شده و آستانه بالا سبب بیدارباش‌های دیرتر می‌شود. بیدارباش‌های زودهنگام کار را سریع‌تر بین چندین زمان‌بند توزیع می‌کنند، اما کارها راحت‌تر بین زمان‌بندها جهش پیدا می‌کنند.

نکته: این فلگ می‌تواند در هر زمان بدون اطلاع قبلی حذف یا تغییر یابد.

+swtdcpu very_low|low|medium|high|very_high

مشابه +swt است اما بر زمان‌بندهای کثیف CPU تأثیر می‌گذارد. پیش‌فرض medium است.

نکته: این فلگ می‌تواند در هر زمان بدون اطلاع قبلی حذف یا تغییر یابد.

+swtdio very_low|low|medium|high|very_high

مشابه +swt است اما بر زمان‌بندهای کثیف IO تأثیر می‌گذارد. پیش‌فرض medium است.

نکته: این فلگ می‌تواند در هر زمان بدون اطلاع قبلی حذف یا تغییر یابد.

+t size

حداکثر تعداد اتم‌هایی را که ماشین مجازی می‌تواند مدیریت کند تنظیم می‌کند. پیش‌فرض ۱,۰۴۸,۵۷۶ است.

+T Level

زمان‌بندی تغییریافته (modified timing) را فعال کرده و سطح زمان‌بندی تغییریافته را تعیین می‌کند. محدوده معتبر ۰ تا ۹ است. زمان‌بندی سیستم زمان اجرا تغییر می‌کند. سطح بالا معمولاً به معنای تغییر بزرگتری نسبت به سطح پایین است. تغییر زمان‌بندی می‌تواند برای یافتن اشکالات وابسته به زمان بسیار مفید باشد.

زمان‌بندی تغییریافته بر موارد زیر تأثیر می‌گذارد:

تولید فرآیند (Process spawning)

فرآیندی که spawn، spawn_link، spawn_monitor یا spawn_opt را فراخوانی می‌کند، بلافاصله پس از تکمیل فراخوانی از زمان‌بندی خارج می‌شود. هنگام استفاده از سطوح بالاتر زمان‌بندی تغییریافته، فراخواننده همچنین پس از خروج از زمان‌بندی برای مدتی به خواب می‌رود.

کاهش‌های زمینه (Context reductions)

تعداد کاهش‌هایی (reductions) که یک فرآیند مجاز است پیش از خروج از زمان‌بندی مصرف کند، افزایش یا کاهش می‌یابد.

کاهش‌های ورودی (Input reductions)

تعداد کاهش‌های انجام‌شده پیش از بررسی I/O افزایش یا کاهش می‌یابد.

نکته: هنگام فعال بودن زمان‌بندی تغییریافته، کارایی سیستم کاهش می‌یابد. این فلگ صرفاً برای آزمایش و اشکال‌زدایی در نظر گرفته شده است. پیام‌های ردیابی return_to و return_from هنگام ردیابی روی BIFهای spawn از دست می‌روند. این فلگ می‌تواند در هر زمان بدون اطلاع قبلی حذف یا تغییر یابد.

+v

ثبت وقایع با جزئیات کامل (Verbose logging). تنها در صورتی کار می‌کند که ارلنگ با فعال بودن اشکال‌زدایی کامپایل شده باشد. می‌تواند به صورت اختیاری یک نویسه اضافی برای مشخص کردن انواع پیام‌های اشکال‌زدایی ثبت‌شده دریافت کند:

+vs

DEBUG_SYSTEM، مشابه +v

+vg

DEBUG_PRIVATE_GC

+vM

DEBUG_MEMORY

+va

DEBUG_ALLOCATION

+vt

DEBUG_THREADS

+vp

DEBUG_PROCESSES

+vm

DEBUG_MESSAGES

+vc

DEBUG_SHCOPY

این یک قابلیت اشکال‌زدایی erts است و در هر زمان می‌تواند بدون اطلاع قبلی تغییر کند.

+V

باعث می‌شود شبیه‌ساز شماره نسخه خود را چاپ کند.

+W w | i | e

نگاشت پیام‌های هشدار را برای error_logger تنظیم می‌کند. پیام‌های فرستاده‌شده به ثبت‌کننده خطا با استفاده از یکی از توابع هشدار می‌توانند به خطاها (+W e)، هشدارها (+W w) یا گزارش‌های اطلاعاتی (+W i) نگاشت شوند. پیش‌فرض هشدارها است. نگاشت فعلی را می‌توان با استفاده از error_logger:warning_map/0 به دست آورد. برای اطلاعات بیشتر، به error_logger:warning_map/0 در Kernel مراجعه نمایید.

+zFlag Value

فلگ‌های متفرقه:

+zdbbl size

حد اشغال بافر توزیع ( dist_buf_busy_limit) را بر حسب کیلوبایت تنظیم می‌کند. محدوده معتبر ۱ تا ۲۰۹۷۱۵۱ است. پیش‌فرض ۱۰۲۴ است.

یک حد بافر بزرگتر به فرآیندها اجازه می‌دهد پیام‌های خروجی بیشتری را روی شبکه توزیع بافر کنند. هنگامی که به حد بافر برسد، فرآیندهای ارسال‌کننده تا زمانی که اندازه بافر کوچک‌تر شود معلق می‌شوند. حد بافر به ازای هر کانال توزیع اعمال می‌شود. یک حد بالاتر تأخیر کمتر و توان عملیاتی بالاتری را به بهای مصرف حافظه بیشتر فراهم می‌سازد.

این محدودیت تنها بر فرآیندهایی تأثیر می‌گذارد که سیگنال‌دهی توزیع‌شده کاملاً ناهمگام (fully asynchronous distributed signaling) را غیرفعال کرده‌اند.

+zdntgc time

زمان تأخیراندازی جمع‌آوری زباله جدول گره‌ها ( delayed_node_table_gc) را بر حسب ثانیه تنظیم می‌کند. مقادیر معتبر یا infinity هستند یا یک عدد صحیح در محدوده ۰ تا ۱۰۰۰۰۰۰۰۰. پیش‌فرض ۶۰ است.

مدخل‌های جدول گره که به آنها ارجاع داده نمی‌شود حداقل به اندازه مدت زمانی که این پارامتر تعیین می‌کند در جدول باقی می‌مانند. این ماندگاری از وقوع حذف‌ها و درج‌های مکرر در جدول‌ها جلوگیری می‌کند.

+zosrl limit

محدودیتی بر روی تعداد درخواست‌های معوقه ایجادشده توسط یک فرآیند سیستمی که تغییرات کل سیستم را سازماندهی می‌کند، تنظیم می‌نماید. محدوده معتبر این حد [1, 134217727] است. برای اطلاعات بیشتر به erlang:system_flag(outstanding_system_requests_limit, Limit) مراجعه نمایید.

+zhft limit

محدودیتی برای مدت زمانی که سیستم زمان اجرا مجاز است هنگام متوقف شدن عملیات تخلیه بافر (flush) را انجام دهد، تنظیم می‌کند. مقادیر معتبر <timeout> اعداد صحیح در محدوده 0..2147483647 یا کلمه infinity هستند. <timeout> بر حسب میلی‌ثانیه است و به طور پیش‌فرض infinity می‌باشد.

اگر تخلیه بافر در طول عملیات توقف به مدت <timeout> میلی‌ثانیه ادامه داشته باشد، تخلیه قطع شده و سیستم زمان اجرا بلافاصله با کد خروج 255 خاتمه می‌یابد. در صورت توقف بدون تخلیه بافر، مقدار <timeout> هیچ اثری بر سیستم نخواهد داشت.

مقدار تعیین‌شده توسط این فلگ را می‌توان در کد ارلنگ با فراخوانی erlang:system_info(halt_flush_timeout) خواند.

همچنین به گزینه flush_timeout از BIF مربوط به erlang:halt/2 مراجعه کنید. توجه داشته باشید که کوتاه‌ترین زمان انقضا میان این آرگومان خط فرمان و گزینه flush_timeout، مقدار انقضای واقعی و نافذ خواهد بود.

از نسخه: OTP 27.0

ERL_CRASH_DUMP

اگر شبیه‌ساز نیاز به نوشتن گزارش خرابی (crash dump) داشته باشد، مقدار این متغیر نام فایل گزارش خرابی خواهد بود. اگر متغیر تنظیم نشده باشد، نام فایل گزارش خرابی برابر با erl_crash.dump در دایرکتوری جاری خواهد بود.

ERL_CRASH_DUMP_NICE

سیستم‌های یونیکس: اگر شبیه‌ساز نیاز به نوشتن گزارش خرابی داشته باشد، از مقدار این متغیر برای تنظیم مقدار nice فرآیند استفاده می‌کند و در نتیجه اولویت آن را کاهش می‌دهد. محدوده معتبر ۱ تا ۳۹ است (مقادیر بالاتر با ۳۹ جایگزین می‌شوند). بالاترین مقدار، ۳۹، کمترین اولویت را به فرآیند اختصاص می‌دهد.

ERL_CRASH_DUMP_SECONDS

سیستم‌های یونیکس: این متغیر تعداد ثانیه‌هایی را مشخص می‌کند که شبیه‌ساز مجاز است صرف نوشتن گزارش خرابی کند. هنگامی که تعداد ثانیه‌های مشخص‌شده سپری شد، شبیه‌ساز خاتمه می‌یابد. ERL_CRASH_DUMP_SECONDS=0

اگر این متغیر روی 0 ثانیه تنظیم شود، سیستم زمان اجرا حتی تلاشی برای نوشتن فایل گزارش خرابی انجام نمی‌دهد و تنها خاتمه می‌یابد. اگر گزینه -heart به erl داده شده باشد و ERL_CRASH_DUMP_SECONDS تنظیم نشده باشد، این حالت پیش‌فرض است.

ERL_CRASH_DUMP_SECONDS=S

اگر این متغیر روی یک مقدار مثبت S تنظیم شود، به مدت S ثانیه برای تکمیل فایل گزارش خرابی منتظر می‌ماند و سپس سیستم زمان اجرا را با یک سیگنال SIGALRM خاتمه می‌دهد.

ERL_CRASH_DUMP_SECONDS=-1

یک مقدار منفی باعث می‌شود خاتمه سیستم زمان اجرا به طور نامحدود تا زمانی که فایل گزارش خرابی به طور کامل نوشته شود منتظر بماند. اگر گزینه -heart به erl ارسال نشده باشد و ERL_CRASH_DUMP_SECONDS تنظیم نشده باشد، این حالت پیش‌فرض است.

همچنین به heart مراجعه کنید.

ERL_CRASH_DUMP_BYTES

این متغیر حداکثر اندازه یک فایل گزارش خرابی را بر حسب بایت تنظیم می‌کند. در صورت فراتر رفتن از این حد، گزارش خرابی کوتاه (truncate) خواهد شد. اگر این متغیر تنظیم نشود، به طور پیش‌فرض هیچ محدودیت اندازه‌ای اعمال نمی‌شود. اگر متغیر روی 0 تنظیم شود، سیستم زمان اجرا حتی تلاشی برای نوشتن فایل گزارش خرابی انجام نمی‌دهد.

معرفی‌شده در ERTS 8.1.2 (Erlang/OTP 19.2).

ERL_CRASH_DUMP_PUBLIC_KEY

اگر شبیه‌ساز طوری ساخته شده باشد که گزارش‌های خرابی رمزگذاری‌شده تولید کند، این متغیر باید روی فایلی حاوی کلید عمومی مورد استفاده برای رمزگذاری (در قالب x509، که معمولاً با نام فایل‌های ".pem" شناخته می‌شوند) تنظیم شود.

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

تحت این طرح رمزگذاری، شبیه‌ساز تنها نحوه رمزگذاری گزارش خرابی را می‌داند. برای رمزگشایی گزارش خرابی، باید ماژول crashdump همراه با کلید خصوصی استفاده شود، و باید دقت شود که کلید خصوصی روی سیستم هدف ذخیره نگردد.

انواع کلیدهای پشتیبانی‌شده شامل RSA با ۲۰۴۸ بیت یا بالاتر، و همچنین ML-KEM در صورت پشتیبانی در OpenSSL نصب‌شده شما هستند.

معرفی‌شده در ERTS 16.3 (Erlang/OTP 29).

ERL_AFLAGS

محتوای این متغیر به ابتدای خط فرمان برای erl اضافه می‌شود.

با فلگ -extra به شیوه خاصی رفتار می‌شود. دامنه آن در پایان محتوای متغیر محیطی خاتمه می‌یابد. آرگومان‌های پس از فلگ -extra در خط فرمان به بخش -extra، یعنی انتهای خط فرمان پس از فلگ -extra منتقل می‌شوند.

ERL_ZFLAGS and ERL_FLAGS

محتوای این متغیرها به انتهای خط فرمان برای erl افزوده می‌شود.

با فلگ -extra به شیوه خاصی رفتار می‌شود. دامنه آن در انتهای محتوای متغیر محیطی خاتمه می‌یابد. آرگومان‌های پس از یک فلگ -extra در خط فرمان به بخش -extra، یعنی انتهای خط فرمان پس از فلگ -extra منتقل می‌شوند.

ERL_LIBS

شامل فهرستی از پوشه‌های کتابخانه اضافی است که سرور کد برای یافتن برنامه‌ها در آنها جستجو کرده و به مسیر کد می‌افزاید؛ به code مراجعه کنید.

ERL_EPMD_ADDRESS

می‌تواند روی فهرستی از آدرس‌های IP جداشده با ویرگول تنظیم شود، که در این صورت دیمن epmd تنها به آدرس(های) مشخص‌شده و آدرس لوپ‌بک (که در صورت عدم تصریح، به طور ضمنی به لیست اضافه می‌شود) گوش می‌دهد.

ERL_EPMD_PORT

می‌تواند شامل شماره پورت مورد استفاده هنگام برقراری ارتباط با epmd باشد. پورت پیش‌فرض در بیشتر موارد مناسب است. می‌توان پورت متفاوتی را مشخص کرد تا به گره‌های کلاسترهای مستقل امکان همزیستی روی همان میزبان داده شود. تمام گره‌ها در یک کلاستر باید از شماره پورت epmd یکسانی استفاده کنند.

در سیستم‌های یونیکس، سیستم زمان اجرای ارلنگ دو نوع سیگنال را تفسیر می‌کند.

SIGUSR1

یک سیگنال SIGUSR1 تولید یک گزارش خرابی را اجباری می‌کند.

SIGTERM

یک سیگنال SIGTERM یک پیام stop به فرآیند init ارسال می‌کند. این معادل با فراخوانی init:stop/0 است.

معرفی‌شده در ERTS 8.3 (Erlang/OTP 19.3)

سیگنال SIGUSR2 برای مصارف داخلی رزرو شده است. هیچ سیگنال دیگری رسیدگی نمی‌شود.

سیستم استاندارد Erlang/OTP می‌تواند برای تغییر رفتار پیش‌فرض هنگام راه‌اندازی دوباره پیکربندی شود.

فایل راه‌اندازی .erlang

هنگامی که Erlang/OTP راه‌اندازی می‌شود، سیستم به دنبال فایلی به نام .erlang در پوشه خانگی کاربر و سپس filename:basedir(user_config, "erlang") می‌گردد.

اگر یک فایل .erlang یافت شود، فرض بر این است که حاوی عبارات معتبر ارلنگ است. این عبارات طوری ارزیابی می‌شوند که گویی به عنوان ورودی به شل داده شده‌اند.

یک فایل معمولی .erlang شامل مجموعه‌ای از مسیرهای جستجو است، برای مثال:

io:format("executing user profile in $HOME/.erlang\n",[]).
code:add_path("/home/calvin/test/ebin").
code:add_path("/home/hobbes/bigappl-1.2/ebin").
io:format(".erlang rc finished\n",[]).
•user_default و shell_default - توابعی در شل که نام ماژول به عنوان پیشوند آنها نیامده است، به عنوان اشیاء تابعی (funs)، توابع درونی (BIFs)، یا متعلق به ماژول user_default یا shell_default فرض می‌شوند.

برای گنجاندن دستورات شل خصوصی، آنها را در یک ماژول user_default تعریف کرده و آرگومان زیر را به عنوان خط اول در فایل .erlang بیفزایید:

code:load_abs("..../user_default").

erl

اگر محتوای .erlang تغییر یابد و یک نسخه خصوصی از user_default تعریف شود، محیط Erlang/OTP می‌تواند سفارشی‌سازی شود. تغییرات قدرتمندتری را می‌توان با ارائه آرگومان‌های خط فرمان در اسکریپت راه‌اندازی erl انجام داد. برای اطلاعات بیشتر، به init مراجعه کنید.

epmd(1), erl_prim_loader, erts_alloc(3), init, application, auth, code, erl_boot_server, heart, net_kernel, make

erts 17.0.6 Ericsson AB