RUBY(1) 1 (ruby programmer's reference guide) RUBY(1)

ruby — زبان اسکریپت‌نویسی تفسیری و شیءگرا

ruby [--copyright] [--version] [-SUacdlnpswvy] [-0[octal]] [-C directory] [-E external[:internal]] [-F[pattern]] [-I directory] [-K[c]] [-T[level]] [-W[level]] [-e command] [-i[extension]] [-r library] [-x[directory]] [--{enable|disable}-FEATURE] [--dump=target] [--verbose] [--crash-report=template] [--] [program_file] [argument ...]

Ruby یک زبان اسکریپت‌نویسی تفسیری برای برنامه‌نویسی شیءگرای سریع و آسان است. این زبان ویژگی‌های متعددی برای پردازش فایل‌های متنی و انجام وظایف مدیریت سیستم (مشابه Perl) دارد. ساده، سرراست و توسعه‌پذیر است.

اگر زبانی برای برنامه‌نویسی شیءگرای آسان می‌خواهید، یا از زشتی‌های Perl خوشتان نمی‌آید، یا مفهوم LISP را دوست دارید اما پرانتزهای بیش‌ازحد آن را نمی‌پسندید، ممکن است Ruby زبان انتخابی شما باشد.

ویژگی‌های Ruby به شرح زیر است:

تفسیری
Ruby یک زبان تفسیری است، بنابراین برای اجرای برنامه‌های نوشته‌شده به Ruby نیازی به کامپایل مجدد آن‌ها ندارید.
متغیرها بدون نوع هستند (نوع‌دهی پویا)
متغیرها در Ruby می‌توانند حاوی داده‌هایی از هر نوع باشند. نیازی نیست نگران نوع متغیرها باشید. در نتیجه، بررسی زمان کامپایل ضعیف‌تری دارد.
بدون نیاز به اعلان
می‌توانید بدون هیچ‌گونه اعلانی از متغیرها در برنامه‌های Ruby خود استفاده کنید. نام متغیرها بیانگر حوزه دسترسی (اسکوپ) آن‌هاست - سراسری، کلاس، نمونه، یا محلی.
ساختار نحوی ساده
Ruby دارای ساختار نحوی ساده‌ای است که اندکی از Eiffel تأثیر گرفته است.
بدون مدیریت حافظه در سطح کاربر
Ruby از مدیریت خودکار حافظه بهره می‌برد. اشیایی که دیگر از جایی به آن‌ها ارجاع داده نمی‌شود، به‌طور خودکار توسط بازیافت حافظه (garbage collector) تعبیه‌شده در مفسر جمع‌آوری می‌شوند.
همه‌چیز یک شیء است
Ruby زبانی کاملاً شیءگرا است و از بدو پیدایش نیز چنین بوده است. حتی داده‌های بنیادینی مانند اعداد صحیح نیز شیء در نظر گرفته می‌شوند.
کلاس، وراثت، و متدها
Ruby به عنوان یک زبان شیءگرا، به‌طور طبیعی ویژگی‌های پایه‌ای مانند کلاس‌ها، وراثت، و متدها را داراست.
متدهای یگانه (Singleton methods)
Ruby قابلیت تعریف متدها را برای اشیای خاص دارد. برای مثال، می‌توانید با تعریف یک singleton method برای یک دکمه، عملیات فشردن دکمه را برای یک ویجت خاص تعریف کنید. یا اگر تمایل داشته باشید، می‌توانید سیستم شیءگرای مبتنی بر پیش‌نمونه (prototype-based) مختص به خود را با استفاده از متدهای یگانه بسازید.
ترکیب (Mix-in) توسط ماژول‌ها
Ruby عمداً وراثت چندگانه ندارد، زیرا منبعی از سردرگمی است. در عوض، Ruby توانایی به‌اشتراک‌گذاری پیاده‌سازی‌ها را در سراسر درخت وراثت دارد. این قابلیت اغلب ‘Mix-in’ نامیده می‌شود.
تکرارکننده‌ها (Iterators)
Ruby برای تجرید حلقه‌ها دارای تکرارکننده (iterator) است.
بستارها (Closures)
در Ruby می‌توانید روال را به شیء تبدیل کنید.
پردازش متن و عبارات منظم
Ruby امکانات متعددی برای پردازش متن، همانند Perl، در اختیار دارد.
چندزبانه‌سازی (M17N)، مستقل از مجموعه نویسه‌ها
Ruby از برنامه‌نویسی چندزبانه پشتیبانی می‌کند. پردازش متون نوشته‌شده به زبان‌های طبیعی گوناگون و کدگذاری‌شده با کدبندی‌های مختلف نویسه، بدون وابستگی به Unicode آسان است.
اعداد بزرگ (Bignums)
با اعداد بزرگ درونی، می‌توانید به عنوان مثال !400 (فاکتوریل ۴۰۰) را محاسبه کنید.
بازتاب و زبان‌های ویژه‌دامنه (DSLs)
کلاس خود نمونه‌ای از کلاس Class است. تعریف کلاس‌ها و متدها مانند 1+1 یک عبارت (expression) است. بنابراین برنامه‌های شما حتی می‌توانند برنامه‌ها را بنویسند و ویرایش کنند. از این رو، می‌توانید برنامه کاربردی خود را در زبان برنامه‌نویسی خاص خود بر روی Ruby بنویسید.
مدیریت استثناها
مشابه Java(tm).
دسترسی مستقیم به سیستم‌عامل
Ruby می‌تواند بیشتر فراخوان‌های سیستمی UNIX را که اغلب در برنامه‌نویسی سیستم استفاده می‌شوند به کار بگیرد.
بارگذاری پویا
در اکثر سیستم‌های UNIX می‌توانید فایل‌های شیء را به‌صورت آنی (on-the-fly) در مفسر Ruby بارگذاری کنید.
کتابخانه‌های غنی
علاوه بر “کتابخانه‌های توکار” و “کتابخانه‌های استاندارد” همراه با Ruby، حجم وسیعی از کتابخانه‌های شخص ثالث (“gems”) از طریق سیستم مدیریت بسته موسوم به ‘RubyGems’ (یعنی دستور gem(1)) در دسترس هستند. از وب‌سایت RubyGems.org (https://rubygems.org) دیدن کنید تا gemهای مورد نیاز خود را بیابید، و GitHub (https://github) را برای بررسی نحوه توسعه و استفاده از آن‌ها کاوش کنید.

مفسر Ruby گزینه‌های (سوئیچ‌های) خط فرمان زیر را می‌پذیرد. این گزینه‌ها بسیار شبیه به گزینه‌های perl(1) هستند.

اعلان کپی‌رایت را چاپ می‌کند و بلافاصله بدون اجرای هیچ اسکریپتی خارج می‌شود.
نسخه مفسر Ruby را چاپ می‌کند و بلافاصله بدون اجرای هیچ اسکریپتی خارج می‌شود.
[octal]
(رقم “zero.”) جداکننده رکوردهای ورودی ($/) را به صورت یک عدد در مبنای هشت (اکتال) مشخص می‌کند. اگر هیچ رقمی داده نشود، نویسه null به عنوان جداکننده در نظر گرفته می‌شود. سوئیچ‌های دیگر می‌توانند بعد از ارقام قرار گیرند. -00 Ruby را در حالت پاراگراف قرار می‌دهد. -0777 باعث می‌شود Ruby کل فایل را یک‌باره به صورت یک رشته واحد بخواند، زیرا هیچ نویسه مجازی با این مقدار وجود ندارد.
directory
 
directory
باعث می‌شود Ruby به دایرکتوری مشخص‌شده تغییر مسیر دهد.
external[:internal]
 
external[:internal]
مقدار(های) پیش‌فرض را برای کدبندی‌های خارجی و داخلی تعیین می‌کند. مقادیر باید با دونقطه (:) از هم جدا شوند.

می‌توانید بخش کدبندی داخلی را حذف کنید؛ در این صورت مقدار (Encoding.default_internal) برابر nil خواهد بود.

=encoding
 
=encoding
کدبندی نویسه پیش‌فرض خارجی یا داخلی را مشخص می‌کند.
pattern
جداکننده فیلدهای ورودی ($;) را مشخص می‌کند.
directory
برای اعلام مسیر بارگذاری اسکریپت‌های کتابخانه به Ruby به کار می‌رود. مسیر دایرکتوری به متغیر load-path ($:) افزوده می‌شود.
kcode
کدبندی KANJI (ژاپنی) را مشخص می‌کند. مقدار پیش‌فرض برای کدبندی‌های اسکریپت (__ENCODING__) و کدبندی‌های خارجی (Encoding.default_external) برابر با مقدار مشخص‌شده خواهد بود. kcode می‌تواند یکی از موارد زیر باشد:
EUC-JP
Windows-31J (CP932)
UTF-8
ASCII-8BIT (BINARY)
باعث می‌شود Ruby از متغیر محیطی PATH برای جستجوی اسکریپت استفاده کند، مگر اینکه نام آن با یک اسلش آغاز شود. این قابلیت برای شبیه‌سازی #! در دستگاه‌هایی که از آن پشتیبانی نمی‌کنند، به روش زیر استفاده می‌شود:
#! /usr/local/bin/ruby
# This line makes the next one a comment in Ruby \
  exec /usr/local/bin/ruby -S $0 $*

در برخی سیستم‌ها $0 همیشه حاوی مسیر کامل نیست، بنابراین به سوئیچ -S نیاز دارید تا در صورت لزوم به Ruby بگویید اسکریپت را جستجو کند (برای مدیریت فاصله‌های تعبیه‌شده و موارد مشابه). ساختاری بهتر از $* استفاده از ${1+"$@"} است، اما اگر اسکریپت توسط csh(1) تفسیر شود، کار نخواهد کرد.

[level=1]
بررسی‌های آلودگی داده (taint checks) را در سطح مشخص‌شده فعال می‌کند (پیش‌فرض: 1).
مقدار پیش‌فرض را برای کدبندی‌های داخلی (Encoding.default_internal) بر روی UTF-8 تنظیم می‌کند.
[level=2]
حالت پرگو (verbose) را در سطح مشخص‌شده فعال می‌کند، بدون اینکه پیام نسخه در ابتدا چاپ شود. سطح می‌تواند یکی از موارد زیر باشد:
حالت پرگو «بی‌صدا» (silence) است. متغیر $VERBOSE را به nil تنظیم می‌کند.
حالت پرگو «متوسط» (medium) است. متغیر $VERBOSE را به false تنظیم می‌کند.
2 (پیش‌فرض)
حالت پرگو «پرگو» (verbose) است. متغیر $VERBOSE را به true تنظیم می‌کند. -W2 مشابه -w است.
هنگامی که به همراه -n یا -p استفاده شود، حالت جداسازی خودکار (auto-split) را فعال می‌کند. در حالت جداسازی خودکار، Ruby دستور
$F = $_.split
را در ابتدای هر حلقه اجرا می‌کند.
=num
حداکثر طول ردگیری پشته (backtrace) را به num خط محدود می‌کند (پیش‌فرض: 1-، به معنای نامحدود).
باعث می‌شود Ruby نحو اسکریپت را بررسی کرده و بدون اجرا خارج شود. در صورت عدم وجود خطای نحوی، Ruby عبارت “Syntax OK” را در خروجی استاندارد چاپ خواهد کرد.
 
حالت اشکال‌زدایی را فعال می‌کند. $DEBUG بر روی true تنظیم خواهد شد.
command
اسکریپت را از خط فرمان مشخص می‌کند و به Ruby می‌گوید بقیه آرگومان‌ها را برای یافتن نام فایل اسکریپت جستجو نکند.
 
خلاصه‌ای از گزینه‌ها را چاپ می‌کند.
extension
حالت ویرایش درجا (in-place-edit) را مشخص می‌کند. پسوند در صورت تعیین، به نام فایل قدیمی اضافه می‌شود تا یک نسخه پشتیبان ایجاد گردد. برای مثال:
% echo matz > /tmp/junk
% cat /tmp/junk
matz
% ruby -p -i.bak -e '$_.upcase!' /tmp/junk
% cat /tmp/junk
MATZ
% cat /tmp/junk.bak
matz
(حرف کوچک “ell.”) پردازش خودکار انتهای خط را فعال می‌کند، به این معنی که ابتدا $\ را به مقدار $/ تنظیم می‌کند، و ثانیاً هر خط خوانده‌شده را با استفاده از chomp! کوتاه می‌کند.
باعث می‌شود Ruby یک حلقه پیرامون اسکریپت شما در نظر بگیرد، که سبب می‌شود مانند sed -n یا awk روی آرگومان‌های نام فایل تکرار کند.
while gets
  ...
end
تا حد زیادی مانند سوئیچ -n عمل می‌کند، اما مقدار متغیر $_ را در انتهای هر دور از حلقه چاپ می‌کند. برای مثال:
% echo matz | ruby -p -e '$_.tr! "a-z", "A-Z"'
MATZ
library
باعث می‌شود Ruby کتابخانه را با استفاده از require بارگذاری کند. این گزینه هنگام استفاده از -n یا -p بسیار سودمند است.
تجزیه سوئیچ‌ها را برای سوئیچ‌های بعد از نام اسکریپت اما قبل از هرگونه آرگومان نام فایل (یا قبل از یک --) فعال می‌کند. هر سوئیچی که در آنجا یافت شود از ARGV حذف شده و متغیر متناظر در اسکریپت مقداردهی می‌شود. برای مثال:
#! /usr/local/bin/ruby -s
# prints "true" if invoked with `-xyz' switch.
print "true\n" if $xyz
حالت پرگو را فعال می‌کند. Ruby نسخه خود را در ابتدا چاپ کرده و متغیر $VERBOSE را روی true تنظیم می‌کند. برخی متدها در صورتی که این متغیر true باشد، پیام‌های اضافی چاپ می‌کنند. اگر این سوئیچ داده شود و هیچ سوئیچ دیگری موجود نباشد، Ruby پس از چاپ نسخه خود خارج می‌شود.
حالت پرگو را بدون چاپ پیام نسخه در ابتدا فعال می‌کند. متغیر $VERBOSE را روی true تنظیم می‌کند.
[directory]
به Ruby اطلاع می‌دهد که اسکریپت درون یک پیام جاسازی شده است. محتوای زاید ابتدایی نادیده گرفته می‌شود تا به اولین خطی برسد که با “#!” آغاز شده و حاوی رشته “ruby” باشد. هر سوئیچ معناداری در آن خط اعمال خواهد شد. انتهای اسکریپت باید با یکی از موارد EOF ، ^D (control-D) ، ^Z (control-Z) یا کلمه رزروشده __END__ مشخص شود. اگر نام دایرکتوری مشخص شده باشد، Ruby پیش از اجرای اسکریپت به آن دایرکتوری تغییر مسیر می‌دهد.
 
سازگاری این گزینه تضمین نشده است.

حالت اشکال‌زدایی کامپایلر را فعال می‌کند. Ruby پیام‌های فراوانی از وضعیت داخلی را در طول کامپایل چاپ خواهد کرد. تنها زمانی این سوئیچ را مشخص کنید که قصد اشکال‌زدایی مفسر Ruby را داشته باشید.

FEATURE
 
FEATURE
ویژگی FEATURE مشخص‌شده را غیرفعال (یا فعال) می‌کند.
 
کتابخانه‌های RubyGems را غیرفعال (یا فعال) می‌کند. به‌طور پیش‌فرض، Ruby آخرین نسخه از هر gem نصب‌شده را بارگذاری می‌کند. ثابت Gem در صورت فعال بودن RubyGems برابر true و در غیر این صورت false است.
 
متغیر محیطی RUBYOPT را نادیده می‌گیرد (یا در نظر می‌گیرد). به‌طور پیش‌فرض، Ruby این متغیر را در نظر می‌گیرد.
 
تمام ویژگی‌ها را غیرفعال (یا فعال) می‌کند.
=target
تخلیه برخی اطلاعات.

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

چاپ توضیحات نسخه (مشابه --version).
چاپ پیام راهنمای مختصر استفاده (مشابه -h).
نمایش پیام راهنمای کامل (مشابه --help).
بررسی نحو (مشابه -c --yydebug).

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

فعال‌سازی حالت اشکال‌زدایی کامپایلر (مشابه --yydebug).
چاپ نمایش متنی ساختار درخت نحو انتزاعی (AST) برنامه در Ruby.
چاپ فهرستی از دستورالعمل‌های بایت‌کد دی‌اسمبل شده.
غیرفعال‌سازی بهینه‌سازی‌های گوناگون برای چاپ فهرستی از دستورالعمل‌های بایت‌کد دی‌اسمبل شده.
فعال‌سازی تجزیه خطاپذیر در صورت استفاده از yydebug یا parsetree.
نشانه‌گذاری نمایش متنی AST برنامه با کد منبع مربوطه در Ruby.
حالت پرگو را بدون چاپ پیام نسخه در ابتدا فعال می‌کند. متغیر $VERBOSE را روی true تنظیم می‌کند. اگر این سوئیچ داده شود، و هیچ آرگومانی برای اسکریپت (فایل اسکریپت یا گزینه‌های -e) موجود نباشد، Ruby بلافاصله خارج می‌شود.
=template
الگوی نام مسیر را برای ذخیره گزارش خرابی تنظیم می‌کند. برای جزئیات به متغیر محیطی RUBY_CRASH_REPORT مراجعه کنید.

فهرستی از دایرکتوری‌های جداشده با دونقطه (:) که به مسیر بارگذاری کتابخانه Ruby ($:) اضافه می‌شوند. دایرکتوری‌های این متغیر محیطی پیش از مسیر بارگذاری استاندارد جستجو می‌شوند.

به عنوان مثال:

RUBYLIB="$HOME/lib/ruby:$HOME/lib/rubyext"
گزینه‌های اضافی Ruby.

به عنوان مثال:

RUBYOPT="-w -Ke"

توجه داشته باشید که RUBYOPT تنها می‌تواند شامل -d, -E, -I, -K, -r, -T, -U, -v, -w, -W, --debug, --disable-FEATURE و --enable-FEATURE باشد.

فهرستی از دایرکتوری‌های جداشده با دونقطه (:) که در صورت مشخص شدن پرچم -S -، Ruby برای برنامه‌های Ruby در آن‌ها جستجو می‌کند. این متغیر بر متغیر محیطی PATH تقدم دارد.
مسیر دستور پوسته سیستم. این متغیر محیطی تنها برای پلتفرم‌های mswin32، mingw32 و OS/2 فعال است. اگر این متغیر تعریف نشده باشد، Ruby به COMSPEC رجوع می‌کند.
در صورت تنظیم، Ruby تلاش می‌کند تمام حافظه‌های تخصیص‌یافته به صورت پویا را آزاد کند. معرفی‌شده در Ruby 3.3، پیش‌فرض: تنظیم‌نشده.
اندازه بافر پیش‌فرض سفارشی IO::Buffer.
حداکثر تعداد رشته‌های بومی (native threads) استفاده‌شده توسط زمان‌بند M:N Threads. معرفی‌شده در Ruby 3.3، پیش‌فرض: 8.
در صورت تنظیم روی 1 ، زمان‌بند رشته M:N بر روی Ractor اصلی فعال می‌شود. معرفی‌شده در Ruby 3.3، پیش‌فرض: تنظیم‌نشده.
دستور صفحه‌بندی (pager) که برای گزینه --help استفاده خواهد شد. معرفی‌شده در Ruby 3.0، پیش‌فرض: متغیر محیطی PAGER.
برش زمانی پیش‌فرض رشته (thread quantum) را بر حسب میلی‌ثانیه تنظیم می‌کند. معرفی‌شده در Ruby 3.4، پیش‌فرض: 100ms.
Ruby هنگام فراخوانی Kernel#system به متغیر محیطی PATH رجوع می‌کند.

و Ruby به برخی متغیرهای محیطی مرتبط با RubyGems وابسته است، مگر اینکه RubyGems غیرفعال شده باشد. راهنمای gem(1) را مطابق زیر ببینید:

% gem help

بازیافت حافظه (GC) در Ruby اشیاء را در خانه‌هایی (slots) با اندازه ثابت دنبال می‌کند، اما هر شیء ممکن است دارای تخصیص‌های حافظه کمکی باشد که توسط خانواده فراخوان‌های malloc در کتابخانه استاندارد C (malloc(3) ، calloc(3) و realloc(3)) مدیریت می‌شوند. در این مستندات، «heap» به هیپ اشیاء Ruby با خانه‌های اندازه ثابت اشاره دارد، در حالی که «malloc» به تخصیص‌های کمکی اشاره می‌کند که معمولاً «هیپ فرآیند» (process heap) نامیده می‌شوند. بنابراین حداقل دو روش ممکن برای فعال شدن بازیافت حافظه وجود دارد:

رسیدن به حد نصاب اشیاء.
رسیدن به حد نصاب malloc.

در Ruby 2.1، بازیافت حافظه نسلی (generational GC) معرفی شد و حد نصاب‌ها به نسل‌های جوان (young) و پیر (old) تقسیم شدند که دو روش دیگر را برای راه‌اندازی GC فراهم می‌کند:

رسیدن به حد نصاب اشیای پیر.
رسیدن به حد نصاب malloc برای اشیای پیر.

در حال حاضر ۴ بخش ممکن وجود دارد که در آن‌ها بازیافت حافظه می‌تواند توسط متغیرهای محیطی زیر تنظیم دقیق شود:

n_INIT_SLOTS
تخصیص اولیه خانه‌ها در یک هیپ معین. هیپ‌های موجود را می‌توان در کلیدهای GC.stat_heap یافت. n یک عدد ده‌دهی بین 0 تا 4 است. معرفی‌شده در Ruby 3.3.
حداقل این تعداد خانه را پس از GC آماده نگه می‌دارد. اگر خانه‌های کافی وجود نداشته باشد، این تعداد خانه را تخصیص می‌دهد. معرفی‌شده در Ruby 2.1، پیش‌فرض: 4096.
نرخ تخصیص خانه‌های هیپ را با این ضریب افزایش می‌دهد. معرفی‌شده در Ruby 2.1، پیش‌فرض: 1.8، حداقل: 1.0 (بدون رشد).
نرخ تخصیص به این تعداد خانه محدود می‌شود، که از تخصیص بیش از حد به دلیل RUBY_GC_HEAP_GROWTH_FACTOR جلوگیری می‌کند. معرفی‌شده در Ruby 2.1، پیش‌فرض: 0 (بدون محدودیت).
یک GC کامل را زمانی اجرا می‌کند که تعداد اشیای پیر بیشتر از R * N باشد، که در آن R این ضریب و N تعداد اشیای پیر پس از آخرین GC کامل است. معرفی‌شده در Ruby 2.1.1، پیش‌فرض: 2.0.
برای محاسبه remembered_wb_unprotected_objects_limit با استفاده از نسبتی از old_objects به کار می‌رود. معرفی‌شده در Ruby 3.3، پیش‌فرض: 0.1، حداقل: 0.0.
حد نصاب اولیه تخصیص نسل جوان از خانواده malloc. بازیافت حافظه با رسیدن به این حد آغاز خواهد شد. پیش‌فرض: 16MB.
حداکثر سقف تخصیص نسل جوان از malloc پیش از آغاز GC. از رشد بیش از حد malloc ناشی از RUBY_GC_MALLOC_LIMIT_GROWTH_FACTOR جلوگیری می‌کند. معرفی‌شده در Ruby 2.1، پیش‌فرض: 32MB.
سقف فراخوان‌های malloc نسل جوان را افزایش می‌دهد، که بسامد GC را کاهش داده اما رشد malloc را تا رسیدن به RUBY_GC_MALLOC_LIMIT_MAX افزایش می‌دهد. معرفی‌شده در Ruby 2.1، پیش‌فرض: 1.4، حداقل: 1.0 (بدون رشد).
هنگامی که تعداد خانه‌های آزاد کمتر از مقدار (total_slots * (این نسبت)) باشد، صفحه‌های اضافی تخصیص می‌دهد. معرفی‌شده در Ruby 2.4، پیش‌فرض: 0.2، حداقل: 0.0، حداکثر: 1.0.
هنگامی که تعداد خانه‌های آزاد بیشتر از مقدار (total_slots * (این نسبت)) باشد، اجازه آزادسازی صفحه‌ها را می‌دهد. معرفی‌شده در Ruby 2.4، پیش‌فرض: 0.4، حداقل: RUBY_GC_HEAP_FREE_SLOTS_MIN_RATIO ، حداکثر: 1.0.
خانه‌ها را برای برآورده کردن این فرمول تخصیص می‌دهد: free_slots = total_slots * goal_ratio به عبارت دیگر، (total_slots * goal_ratio) خانه آزاد آماده می‌کند. اگر این مقدار 0.0 باشد، مستقیماً از RUBY_GC_HEAP_GROWTH_FACTOR استفاده می‌شود. معرفی‌شده در Ruby 2.4، پیش‌فرض: 0.65، حداقل: RUBY_GC_HEAP_FREE_SLOTS_MIN_RATIO ، حداکثر: RUBY_GC_HEAP_FREE_SLOTS_MAX_RATIO.
حد نصاب اولیه تخصیص نسل پیر از malloc؛ با رسیدن به این حد، یک GC کامل آغاز می‌شود. معرفی‌شده در Ruby 2.1، پیش‌فرض: 16MB.
حداکثر سقف تخصیص نسل پیر از malloc پیش از آغاز یک GC کامل. از رشد بیش از حد malloc ناشی از RUBY_GC_OLDMALLOC_LIMIT_GROWTH_FACTOR جلوگیری می‌کند. معرفی‌شده در Ruby 2.1، پیش‌فرض: 128MB.
سقف تخصیص malloc نسل پیر را افزایش می‌دهد، که بسامد GC کامل را کاهش داده اما رشد malloc را تا رسیدن به RUBY_GC_OLDMALLOC_LIMIT_MAX افزایش می‌دهد. معرفی‌شده در Ruby 2.1، پیش‌فرض: 1.2، حداقل: 1.0 (بدون رشد).
در صورت تنظیم بر روی 1، پشته‌های فیبرهای به اشتراک‌گذاشته‌شده (pooled fibers) را آزاد می‌کند. در صورت تنظیم بر روی 0، پشته‌ها را آزاد نمی‌کند. معرفی‌شده در Ruby 2.7، پیش‌فرض: 1 (بدون رشد).

متغیرهای محیطی اندازه پشته وابسته به پیاده‌سازی هستند و ممکن است با نسخه‌های مختلف Ruby تغییر کنند. پشته ماشین مجازی (VM stack) برای کدهای خالص Ruby استفاده شده و توسط ماشین مجازی مدیریت می‌شود. پشته ماشین (Machine stack) توسط سیستم‌عامل استفاده می‌شود و کاربرد آن به افزونه‌های C و همچنین گزینه‌های کامپایلر C بستگی دارد. استفاده از مقادیر کمتر برای این متغیرها ممکن است به برنامه‌ها اجازه دهد فیبرها یا رشته‌های بیشتری را در حال اجرا نگه دارند؛ اما احتمال بروز استثناهای SystemStackError و خطاهای نقص بخش‌بندی (SIGSEGV) را افزایش می‌دهد. این متغیرهای محیطی از نسخه 2.0.0 Ruby در دسترس هستند. تمام مقادیر بر حسب بایت مشخص می‌شوند.

اندازه پشته ماشین مجازی (VM) مورد استفاده در هنگام ایجاد رشته. پیش‌فرض: 524288 (پردازنده ۳۲ بیتی) یا 1048575 (۶۴ بیتی).
اندازه پشته ماشین مورد استفاده در هنگام ایجاد رشته. پیش‌فرض: 524288 یا 1048575.
اندازه پشته ماشین مجازی مورد استفاده در هنگام ایجاد فیبر. پیش‌فرض: 65536 یا 131072.
اندازه پشته ماشین مورد استفاده در هنگام ایجاد فیبر. پیش‌فرض: 262144 یا 524288.

الگوی نام مسیر برای ذخیره گزارش خرابی. پیش‌فرض: هیچ (none).

الگو می‌تواند شامل مشخص‌کننده‌های % باشد که هنگام ایجاد فایل گزارش خرابی با مقادیر زیر جایگزین می‌شوند:

%%
یک نویسه منفرد %.
%e
نام پایه (basename) فایل اجرایی.
%E
مسیر کامل فایل اجرایی، با اسلش‌های (/) جایگزین‌شده توسط علامت‌های تعجب (!).
%f
نام پایه برنامه، $0.
%F
مسیر کامل نام برنامه، $0 ، با اسلش‌های (/) جایگزین‌شده توسط علامت‌های تعجب (!).
%p
شناسه فرآیند (PID) فرآیند تخلیه‌شده.
%t
زمان تخلیه، بیان‌شده بر حسب ثانیه‌های سپری‌شده از مبدأ زمان یونیکس (Epoch)، 1970-01-01 00:00:00 +0000 (UTC).
%NNN
کد نویسه در مبنای هشت (اکتال).

یک نویسه منفرد % در انتهای الگو از نام فایل خرابی حذف می‌شود، همان‌گونه که ترکیب یک % با هر نویسه‌ای غیر از موارد فهرست‌شده در بالا نیز حذف می‌گردد. تمام نویسه‌های دیگر در الگو به بخش تحت‌اللفظی نام فایل خرابی تبدیل می‌شوند. الگو می‌تواند شامل نویسه‌های '/' باشد که به عنوان جداکننده نام دایرکتوری‌ها تفسیر می‌شوند.

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

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

در صورت تنظیم بر روی 1 ، قابلیت بازگشت سریع (fast fallback) را به‌طور پیش‌فرض در TCPSocket.new و Socket.tcp غیرفعال می‌کند. در صورت تنظیم بر روی 0 یا بدون مقدار رها شدن، قابلیت بازگشت سریع فعال خواهد بود. معرفی‌شده در Ruby 3.4، پیش‌فرض: تنظیم‌نشده.

https://www.ruby-lang.org
وب‌سایت رسمی.
https://www.ruby-toolbox.com
کاتالوگ جامع کتابخانه‌های Ruby.

  • آسیب‌پذیری‌های امنیتی باید از طریق ایمیل به security@ruby-lang.org گزارش شوند. مشکلات گزارش‌شده پس از برطرف شدن منتشر خواهند شد.
  • سایر باگ‌ها و درخواست‌های قابلیت‌ها را می‌توان از طریق سیستم پیگیری مسائل Ruby (https://bugs.ruby-lang.org) گزارش کرد. آسیب‌پذیری‌های امنیتی را از طریق این سیستم گزارش نکنید، چرا که آسیب‌پذیری‌ها را بلافاصله به‌صورت عمومی منتشر می‌کند.

Ruby توسط Yukihiro Matsumoto ⟨matz@netlab.jp⟩ طراحی و پیاده‌سازی شده است.

برای مشارکت‌کنندگان در Ruby به ⟨https://github.com/ruby/ruby/graphs/contributors⟩ مراجعه کنید.

April 14, 2018 UNIX