| RUBY(1) | 1 (ruby programmer's reference guide) | RUBY(1) |
نام (NAME)
ruby —
زبان
اسکریپتنویسی
تفسیری و
شیءگرا
خلاصه دستور (SYNOPSIS)
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 ...]
توضیحات (DESCRIPTION)
Ruby یک زبان اسکریپتنویسی تفسیری برای برنامهنویسی شیءگرای سریع و آسان است. این زبان ویژگیهای متعددی برای پردازش فایلهای متنی و انجام وظایف مدیریت سیستم (مشابه Perl) دارد. ساده، سرراست و توسعهپذیر است.
اگر زبانی برای برنامهنویسی شیءگرای آسان میخواهید، یا از زشتیهای Perl خوشتان نمیآید، یا مفهوم LISP را دوست دارید اما پرانتزهای بیشازحد آن را نمیپسندید، ممکن است Ruby زبان انتخابی شما باشد.
ویژگیها (FEATURES)
ویژگیهای 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) را برای بررسی نحوه توسعه و استفاده از آنها کاوش کنید.
گزینهها (OPTIONS)
مفسر Ruby گزینههای (سوئیچهای) خط فرمان زیر را میپذیرد. این گزینهها بسیار شبیه به گزینههای perl(1) هستند.
--copyright- اعلان کپیرایت را چاپ میکند و بلافاصله بدون اجرای هیچ اسکریپتی خارج میشود.
--version- نسخه مفسر Ruby را چاپ میکند و بلافاصله بدون اجرای هیچ اسکریپتی خارج میشود.
-0[octal]- (رقم “zero.”)
جداکننده
رکوردهای
ورودی (
$/) را به صورت یک عدد در مبنای هشت (اکتال) مشخص میکند. اگر هیچ رقمی داده نشود، نویسه null به عنوان جداکننده در نظر گرفته میشود. سوئیچهای دیگر میتوانند بعد از ارقام قرار گیرند.-00Ruby را در حالت پاراگراف قرار میدهد.-0777باعث میشود Ruby کل فایل را یکباره به صورت یک رشته واحد بخواند، زیرا هیچ نویسه مجازی با این مقدار وجود ندارد. -Cdirectory-Xdirectory- باعث میشود Ruby به دایرکتوری مشخصشده تغییر مسیر دهد.
-Eexternal[:internal]--encodingexternal[:internal]- مقدار(های)
پیشفرض را
برای
کدبندیهای
خارجی و
داخلی
تعیین
میکند.
مقادیر
باید با
دونقطه (:) از
هم جدا
شوند.
میتوانید بخش کدبندی داخلی را حذف کنید؛ در این صورت مقدار (
Encoding.default_internal) برابر nil خواهد بود. --external-encoding=encoding--internal-encoding=encoding- کدبندی نویسه پیشفرض خارجی یا داخلی را مشخص میکند.
-Fpattern- جداکننده
فیلدهای
ورودی (
$;) را مشخص میکند. -Idirectory- برای اعلام
مسیر
بارگذاری
اسکریپتهای
کتابخانه
به Ruby به کار
میرود.
مسیر
دایرکتوری
به متغیر load-path
(
$:) افزوده میشود. -Kkcode- کدبندی KANJI
(ژاپنی) را
مشخص
میکند.
مقدار
پیشفرض
برای
کدبندیهای
اسکریپت
(
__ENCODING__) و کدبندیهای خارجی (Encoding.default_external) برابر با مقدار مشخصشده خواهد بود. kcode میتواند یکی از موارد زیر باشد: -S- باعث
میشود 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) تفسیر شود، کار نخواهد کرد. -T[level=1]- بررسیهای آلودگی داده (taint checks) را در سطح مشخصشده فعال میکند (پیشفرض: 1).
-U- مقدار
پیشفرض را
برای
کدبندیهای
داخلی
(
Encoding.default_internal) بر روی UTF-8 تنظیم میکند. -W[level=2]- حالت پرگو (verbose) را در سطح مشخصشده فعال میکند، بدون اینکه پیام نسخه در ابتدا چاپ شود. سطح میتواند یکی از موارد زیر باشد:
-a- هنگامی که
به همراه
-nیا-pاستفاده شود، حالت جداسازی خودکار (auto-split) را فعال میکند. در حالت جداسازی خودکار، Ruby دستوررا در ابتدای هر حلقه اجرا میکند.$F = $_.split --backtrace-limit=num- حداکثر طول ردگیری پشته (backtrace) را به num خط محدود میکند (پیشفرض: 1-، به معنای نامحدود).
-c- باعث میشود Ruby نحو اسکریپت را بررسی کرده و بدون اجرا خارج شود. در صورت عدم وجود خطای نحوی، Ruby عبارت “Syntax OK” را در خروجی استاندارد چاپ خواهد کرد.
-d--debug- حالت
اشکالزدایی
را فعال
میکند.
$DEBUGبر روی true تنظیم خواهد شد. -ecommand- اسکریپت را از خط فرمان مشخص میکند و به Ruby میگوید بقیه آرگومانها را برای یافتن نام فایل اسکریپت جستجو نکند.
-h--help- خلاصهای از گزینهها را چاپ میکند.
-iextension- حالت
ویرایش
درجا (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
-l- (حرف کوچک
“ell.”) پردازش
خودکار
انتهای خط
را فعال
میکند، به
این معنی که
ابتدا
$\را به مقدار$/تنظیم میکند، و ثانیاً هر خط خواندهشده را با استفاده ازchomp!کوتاه میکند. -n- باعث
میشود Ruby یک
حلقه
پیرامون
اسکریپت
شما در نظر
بگیرد، که
سبب میشود
مانند
sed-nیاawkروی آرگومانهای نام فایل تکرار کند.while gets ... end
-p- تا حد زیادی
مانند
سوئیچ -n عمل
میکند،
اما مقدار
متغیر
$_را در انتهای هر دور از حلقه چاپ میکند. برای مثال:% echo matz | ruby -p -e '$_.tr! "a-z", "A-Z"' MATZ
-rlibrary- باعث
میشود Ruby
کتابخانه
را با
استفاده از
require بارگذاری
کند. این
گزینه
هنگام
استفاده از
-nیا-pبسیار سودمند است. -s- تجزیه
سوئیچها
را برای
سوئیچهای
بعد از نام
اسکریپت
اما قبل از
هرگونه
آرگومان
نام فایل
(یا قبل از
یک
--) فعال میکند. هر سوئیچی که در آنجا یافت شود ازARGVحذف شده و متغیر متناظر در اسکریپت مقداردهی میشود. برای مثال:#! /usr/local/bin/ruby -s # prints "true" if invoked with `-xyz' switch. print "true\n" if $xyz
-v- حالت پرگو
را فعال
میکند. Ruby
نسخه خود را
در ابتدا
چاپ کرده و
متغیر
$VERBOSEرا روی true تنظیم میکند. برخی متدها در صورتی که این متغیر true باشد، پیامهای اضافی چاپ میکنند. اگر این سوئیچ داده شود و هیچ سوئیچ دیگری موجود نباشد، Ruby پس از چاپ نسخه خود خارج میشود. -w- حالت پرگو
را بدون چاپ
پیام نسخه
در ابتدا
فعال
میکند.
متغیر
$VERBOSEرا روی true تنظیم میکند. -x[directory]- به Ruby اطلاع
میدهد که
اسکریپت
درون یک
پیام
جاسازی شده
است. محتوای
زاید
ابتدایی
نادیده
گرفته
میشود تا
به اولین
خطی برسد که
با “#!” آغاز
شده و حاوی
رشته “ruby”
باشد. هر
سوئیچ
معناداری
در آن خط
اعمال
خواهد شد.
انتهای
اسکریپت
باید با یکی
از موارد
EOF ،^D(control-D)،^Z(control-Z) یا کلمه رزروشده__END__مشخص شود. اگر نام دایرکتوری مشخص شده باشد، Ruby پیش از اجرای اسکریپت به آن دایرکتوری تغییر مسیر میدهد. -y--yydebug- سازگاری
این گزینه
تضمین نشده
است.
حالت اشکالزدایی کامپایلر را فعال میکند. Ruby پیامهای فراوانی از وضعیت داخلی را در طول کامپایل چاپ خواهد کرد. تنها زمانی این سوئیچ را مشخص کنید که قصد اشکالزدایی مفسر Ruby را داشته باشید.
--disable-FEATURE--enable-FEATURE- ویژگی FEATURE
مشخصشده
را غیرفعال
(یا فعال)
میکند.
--disable-gems--enable-gems- کتابخانههای
RubyGems را
غیرفعال
(یا فعال)
میکند.
بهطور
پیشفرض، Ruby
آخرین
نسخه از هر gem
نصبشده
را
بارگذاری
میکند.
ثابت
Gemدر صورت فعال بودن RubyGems برابر true و در غیر این صورت false است. --disable-rubyopt--enable-rubyopt- متغیر
محیطی
RUBYOPTرا نادیده میگیرد (یا در نظر میگیرد). بهطور پیشفرض، Ruby این متغیر را در نظر میگیرد. --disable-all--enable-all- تمام ویژگیها را غیرفعال (یا فعال) میکند.
--dump=target- تخلیه برخی
اطلاعات.
هدف مشخصشده را چاپ میکند. target میتواند یکی از موارد زیر باشد:
- version
- چاپ
توضیحات
نسخه
(مشابه
--version). - usage
- چاپ پیام
راهنمای
مختصر
استفاده
(مشابه
-h). - help
- نمایش
پیام
راهنمای
کامل
(مشابه
--help). - syntax
- بررسی نحو
(مشابه
-c--yydebug).
یا یکی از موارد زیر که برای اشکالزدایی مفسر در نظر گرفته شدهاند:
- yydebug
- فعالسازی
حالت
اشکالزدایی
کامپایلر
(مشابه
--yydebug). - parsetree
- چاپ نمایش متنی ساختار درخت نحو انتزاعی (AST) برنامه در Ruby.
- insns
- چاپ فهرستی از دستورالعملهای بایتکد دیاسمبل شده.
- -optimize
- غیرفعالسازی بهینهسازیهای گوناگون برای چاپ فهرستی از دستورالعملهای بایتکد دیاسمبل شده.
- +error-tolerant
- فعالسازی تجزیه خطاپذیر در صورت استفاده از yydebug یا parsetree.
- +comment
- نشانهگذاری نمایش متنی AST برنامه با کد منبع مربوطه در Ruby.
--verbose- حالت پرگو
را بدون چاپ
پیام نسخه
در ابتدا
فعال
میکند.
متغیر
$VERBOSEرا روی true تنظیم میکند. اگر این سوئیچ داده شود، و هیچ آرگومانی برای اسکریپت (فایل اسکریپت یا گزینههای-e) موجود نباشد، Ruby بلافاصله خارج میشود. --crash-report=template- الگوی نام
مسیر را
برای ذخیره
گزارش
خرابی
تنظیم
میکند.
برای
جزئیات به
متغیر
محیطی
RUBY_CRASH_REPORTمراجعه کنید.
محیط (ENVIRONMENT)
RUBYLIB- فهرستی از
دایرکتوریهای
جداشده با
دونقطه (:) که
به مسیر
بارگذاری
کتابخانه Ruby
(
$:) اضافه میشوند. دایرکتوریهای این متغیر محیطی پیش از مسیر بارگذاری استاندارد جستجو میشوند.به عنوان مثال:
RUBYLIB="$HOME/lib/ruby:$HOME/lib/rubyext" RUBYOPT- گزینههای
اضافی Ruby.
به عنوان مثال:
RUBYOPT="-w -Ke"توجه داشته باشید که RUBYOPT تنها میتواند شامل
-d,-E,-I,-K,-r,-T,-U,-v,-w,-W,--debug,--disable-FEATURE و--enable-FEATURE باشد. RUBYPATH- فهرستی از
دایرکتوریهای
جداشده با
دونقطه (:) که
در صورت
مشخص شدن
پرچم
-S-،Ruby برای برنامههای Ruby در آنها جستجو میکند. این متغیر بر متغیر محیطیPATHتقدم دارد. RUBYSHELL- مسیر دستور
پوسته
سیستم. این
متغیر
محیطی تنها
برای
پلتفرمهای
mswin32، mingw32 و OS/2 فعال
است. اگر
این متغیر
تعریف نشده
باشد، Ruby به
COMSPECرجوع میکند. RUBY_FREE_AT_EXIT- در صورت تنظیم، Ruby تلاش میکند تمام حافظههای تخصیصیافته به صورت پویا را آزاد کند. معرفیشده در Ruby 3.3، پیشفرض: تنظیمنشده.
RUBY_IO_BUFFER_DEFAULT_SIZE- اندازه
بافر
پیشفرض
سفارشی
IO::Buffer. RUBY_MAX_CPU- حداکثر تعداد رشتههای بومی (native threads) استفادهشده توسط زمانبند M:N Threads. معرفیشده در Ruby 3.3، پیشفرض: 8.
RUBY_MN_THREADS- در صورت
تنظیم روی
1 ،زمانبند رشته M:N بر روی Ractor اصلی فعال میشود. معرفیشده در Ruby 3.3، پیشفرض: تنظیمنشده. RUBY_PAGER- دستور
صفحهبندی
(pager) که برای
گزینه
--helpاستفاده خواهد شد. معرفیشده در Ruby 3.0، پیشفرض: متغیر محیطیPAGER. RUBY_THREAD_TIMESLICE- برش زمانی پیشفرض رشته (thread quantum) را بر حسب میلیثانیه تنظیم میکند. معرفیشده در Ruby 3.4، پیشفرض: 100ms.
PATH- Ruby هنگام
فراخوانی
Kernel#system به متغیر
محیطی
PATHرجوع میکند.
و Ruby به برخی متغیرهای محیطی مرتبط با RubyGems وابسته است، مگر اینکه RubyGems غیرفعال شده باشد. راهنمای gem(1) را مطابق زیر ببینید:
% gem help
محیط بازیافت حافظه (GC ENVIRONMENT)
بازیافت حافظه (GC) در Ruby اشیاء را در خانههایی (slots) با اندازه ثابت دنبال میکند، اما هر شیء ممکن است دارای تخصیصهای حافظه کمکی باشد که توسط خانواده فراخوانهای malloc در کتابخانه استاندارد C (malloc(3) ، calloc(3) و realloc(3)) مدیریت میشوند. در این مستندات، «heap» به هیپ اشیاء Ruby با خانههای اندازه ثابت اشاره دارد، در حالی که «malloc» به تخصیصهای کمکی اشاره میکند که معمولاً «هیپ فرآیند» (process heap) نامیده میشوند. بنابراین حداقل دو روش ممکن برای فعال شدن بازیافت حافظه وجود دارد:
در Ruby 2.1، بازیافت حافظه نسلی (generational GC) معرفی شد و حد نصابها به نسلهای جوان (young) و پیر (old) تقسیم شدند که دو روش دیگر را برای راهاندازی GC فراهم میکند:
در حال حاضر ۴ بخش ممکن وجود دارد که در آنها بازیافت حافظه میتواند توسط متغیرهای محیطی زیر تنظیم دقیق شود:
RUBY_GC_HEAP_n_INIT_SLOTS- تخصیص
اولیه
خانهها در
یک هیپ
معین.
هیپهای
موجود را
میتوان در
کلیدهای
GC.stat_heapیافت. n یک عدد دهدهی بین 0 تا 4 است. معرفیشده در Ruby 3.3. RUBY_GC_HEAP_FREE_SLOTS- حداقل این تعداد خانه را پس از GC آماده نگه میدارد. اگر خانههای کافی وجود نداشته باشد، این تعداد خانه را تخصیص میدهد. معرفیشده در Ruby 2.1، پیشفرض: 4096.
RUBY_GC_HEAP_GROWTH_FACTOR- نرخ تخصیص خانههای هیپ را با این ضریب افزایش میدهد. معرفیشده در Ruby 2.1، پیشفرض: 1.8، حداقل: 1.0 (بدون رشد).
RUBY_GC_HEAP_GROWTH_MAX_SLOTS- نرخ تخصیص به این تعداد خانه محدود میشود، که از تخصیص بیش از حد به دلیل RUBY_GC_HEAP_GROWTH_FACTOR جلوگیری میکند. معرفیشده در Ruby 2.1، پیشفرض: 0 (بدون محدودیت).
RUBY_GC_HEAP_OLDOBJECT_LIMIT_FACTOR- یک GC کامل را زمانی اجرا میکند که تعداد اشیای پیر بیشتر از R * N باشد، که در آن R این ضریب و N تعداد اشیای پیر پس از آخرین GC کامل است. معرفیشده در Ruby 2.1.1، پیشفرض: 2.0.
RUBY_GC_HEAP_REMEMBERED_WB_UNPROTECTED_OBJECTS_LIMIT_RATIO- برای
محاسبه
remembered_wb_unprotected_objects_limitبا استفاده از نسبتی ازold_objectsبه کار میرود. معرفیشده در Ruby 3.3، پیشفرض: 0.1، حداقل: 0.0. RUBY_GC_MALLOC_LIMIT- حد نصاب اولیه تخصیص نسل جوان از خانواده malloc. بازیافت حافظه با رسیدن به این حد آغاز خواهد شد. پیشفرض: 16MB.
RUBY_GC_MALLOC_LIMIT_MAX- حداکثر سقف تخصیص نسل جوان از malloc پیش از آغاز GC. از رشد بیش از حد malloc ناشی از RUBY_GC_MALLOC_LIMIT_GROWTH_FACTOR جلوگیری میکند. معرفیشده در Ruby 2.1، پیشفرض: 32MB.
RUBY_GC_MALLOC_LIMIT_GROWTH_FACTOR- سقف فراخوانهای malloc نسل جوان را افزایش میدهد، که بسامد GC را کاهش داده اما رشد malloc را تا رسیدن به RUBY_GC_MALLOC_LIMIT_MAX افزایش میدهد. معرفیشده در Ruby 2.1، پیشفرض: 1.4، حداقل: 1.0 (بدون رشد).
RUBY_GC_HEAP_FREE_SLOTS_MIN_RATIO- هنگامی که
تعداد
خانههای
آزاد کمتر
از مقدار
(total_slots * (این نسبت))باشد، صفحههای اضافی تخصیص میدهد. معرفیشده در Ruby 2.4، پیشفرض: 0.2، حداقل: 0.0، حداکثر: 1.0. RUBY_GC_HEAP_FREE_SLOTS_MAX_RATIO- هنگامی که
تعداد
خانههای
آزاد بیشتر
از مقدار
(total_slots * (این نسبت))باشد، اجازه آزادسازی صفحهها را میدهد. معرفیشده در Ruby 2.4، پیشفرض: 0.4، حداقل:RUBY_GC_HEAP_FREE_SLOTS_MIN_RATIO ،حداکثر: 1.0. RUBY_GC_HEAP_FREE_SLOTS_GOAL_RATIO- خانهها را
برای
برآورده
کردن این
فرمول
تخصیص
میدهد:
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. RUBY_GC_OLDMALLOC_LIMIT- حد نصاب اولیه تخصیص نسل پیر از malloc؛ با رسیدن به این حد، یک GC کامل آغاز میشود. معرفیشده در Ruby 2.1، پیشفرض: 16MB.
RUBY_GC_OLDMALLOC_LIMIT_MAX- حداکثر سقف تخصیص نسل پیر از malloc پیش از آغاز یک GC کامل. از رشد بیش از حد malloc ناشی از RUBY_GC_OLDMALLOC_LIMIT_GROWTH_FACTOR جلوگیری میکند. معرفیشده در Ruby 2.1، پیشفرض: 128MB.
RUBY_GC_OLDMALLOC_LIMIT_GROWTH_FACTOR- سقف تخصیص malloc نسل پیر را افزایش میدهد، که بسامد GC کامل را کاهش داده اما رشد malloc را تا رسیدن به RUBY_GC_OLDMALLOC_LIMIT_MAX افزایش میدهد. معرفیشده در Ruby 2.1، پیشفرض: 1.2، حداقل: 1.0 (بدون رشد).
RUBY_SHARED_FIBER_POOL_FREE_STACKS- در صورت تنظیم بر روی 1، پشتههای فیبرهای به اشتراکگذاشتهشده (pooled fibers) را آزاد میکند. در صورت تنظیم بر روی 0، پشتهها را آزاد نمیکند. معرفیشده در Ruby 2.7، پیشفرض: 1 (بدون رشد).
محیط اندازه پشته (STACK SIZE ENVIRONMENT)
متغیرهای محیطی اندازه پشته وابسته به پیادهسازی هستند و ممکن است با نسخههای مختلف Ruby تغییر کنند. پشته ماشین مجازی (VM stack) برای کدهای خالص Ruby استفاده شده و توسط ماشین مجازی مدیریت میشود. پشته ماشین (Machine stack) توسط سیستمعامل استفاده میشود و کاربرد آن به افزونههای C و همچنین گزینههای کامپایلر C بستگی دارد. استفاده از مقادیر کمتر برای این متغیرها ممکن است به برنامهها اجازه دهد فیبرها یا رشتههای بیشتری را در حال اجرا نگه دارند؛ اما احتمال بروز استثناهای SystemStackError و خطاهای نقص بخشبندی (SIGSEGV) را افزایش میدهد. این متغیرهای محیطی از نسخه 2.0.0 Ruby در دسترس هستند. تمام مقادیر بر حسب بایت مشخص میشوند.
RUBY_THREAD_VM_STACK_SIZE- اندازه پشته ماشین مجازی (VM) مورد استفاده در هنگام ایجاد رشته. پیشفرض: 524288 (پردازنده ۳۲ بیتی) یا 1048575 (۶۴ بیتی).
RUBY_THREAD_MACHINE_STACK_SIZE- اندازه پشته ماشین مورد استفاده در هنگام ایجاد رشته. پیشفرض: 524288 یا 1048575.
RUBY_FIBER_VM_STACK_SIZE- اندازه پشته ماشین مجازی مورد استفاده در هنگام ایجاد فیبر. پیشفرض: 65536 یا 131072.
RUBY_FIBER_MACHINE_STACK_SIZE- اندازه پشته ماشین مورد استفاده در هنگام ایجاد فیبر. پیشفرض: 262144 یا 524288.
محیط گزارش خرابی (CRASH REPORT ENVIRONMENT)
RUBY_CRASH_REPORT- الگوی نام مسیر برای ذخیره گزارش خرابی. پیشفرض: هیچ (none).
نامگذاری فایلهای گزارش خرابی (Naming crash report files)
الگو
میتواند
شامل
مشخصکنندههای
% باشد
که هنگام
ایجاد فایل
گزارش
خرابی با
مقادیر زیر
جایگزین
میشوند:
%%- یک نویسه
منفرد
%. %e- نام پایه (basename) فایل اجرایی.
%E- مسیر کامل فایل اجرایی، با اسلشهای (/) جایگزینشده توسط علامتهای تعجب (!).
%f- نام پایه
برنامه،
$0. %F- مسیر کامل
نام
برنامه،
$0 ،با اسلشهای (/) جایگزینشده توسط علامتهای تعجب (!). %p- شناسه فرآیند (PID) فرآیند تخلیهشده.
%t- زمان تخلیه، بیانشده بر حسب ثانیههای سپریشده از مبدأ زمان یونیکس (Epoch)، 1970-01-01 00:00:00 +0000 (UTC).
%NNN- کد نویسه در مبنای هشت (اکتال).
یک نویسه
منفرد %
در انتهای
الگو از نام
فایل خرابی
حذف
میشود،
همانگونه
که ترکیب یک
% با هر
نویسهای
غیر از
موارد
فهرستشده
در بالا نیز
حذف
میگردد.
تمام
نویسههای
دیگر در
الگو به بخش
تحتاللفظی
نام فایل
خرابی
تبدیل
میشوند.
الگو
میتواند
شامل
نویسههای '/'
باشد که به
عنوان
جداکننده
نام
دایرکتوریها
تفسیر
میشوند.
هدایت گزارشهای خرابی با لوله به یک برنامه (Piping crash reports to a program)
اگر نخستین نویسه این فایل نماد لوله (|) باشد، ادامه خط به عنوان خط فرمان یک برنامه (یا اسکریپت) برای اجرا تفسیر میشود.
الگوی لوله پیش از بسط پارامترهای الگو، بر اساس فاصلهها به فهرستی از آرگومانها تفکیک میشود.
محیط متفرقه (MISC ENVIRONMENT)
RUBY_TCP_NO_FAST_FALLBACK- در صورت
تنظیم بر
روی
1 ،قابلیت بازگشت سریع (fast fallback) را بهطور پیشفرض در TCPSocket.new و Socket.tcp غیرفعال میکند. در صورت تنظیم بر روی0یا بدون مقدار رها شدن، قابلیت بازگشت سریع فعال خواهد بود. معرفیشده در Ruby 3.4، پیشفرض: تنظیمنشده.
همچنین ببینید (SEE ALSO)
- https://www.ruby-lang.org
- وبسایت رسمی.
- https://www.ruby-toolbox.com
- کاتالوگ جامع کتابخانههای Ruby.
گزارش باگها (BUGS)
- آسیبپذیریهای امنیتی باید از طریق ایمیل به security@ruby-lang.org گزارش شوند. مشکلات گزارششده پس از برطرف شدن منتشر خواهند شد.
- سایر باگها و درخواستهای قابلیتها را میتوان از طریق سیستم پیگیری مسائل Ruby (https://bugs.ruby-lang.org) گزارش کرد. آسیبپذیریهای امنیتی را از طریق این سیستم گزارش نکنید، چرا که آسیبپذیریها را بلافاصله بهصورت عمومی منتشر میکند.
نویسندگان (AUTHORS)
Ruby توسط Yukihiro Matsumoto ⟨matz@netlab.jp⟩ طراحی و پیادهسازی شده است.
برای مشارکتکنندگان در Ruby به ⟨https://github.com/ruby/ruby/graphs/contributors⟩ مراجعه کنید.
| April 14, 2018 | UNIX |