Ruby 3.1.0 منتشر شد، یک زبان برنامه نویسی شی گرا پویا که در توسعه برنامه بسیار کارآمد است و بهترین ویژگی های Perl، Java، Python، Smalltalk، Eiffel، Ada و Lisp را در خود جای داده است. کد پروژه تحت مجوزهای BSD ("2-clause BSDL") و "Ruby" توزیع شده است که به آخرین نسخه مجوز GPL اشاره دارد و کاملاً با GPLv3 سازگار است.
بهبودهای اصلی:
- یک کامپایلر آزمایشی جدید JIT در فرآیند، YJIT، اضافه شده است که توسط توسعه دهندگان پلتفرم تجارت الکترونیک Shopify به عنوان بخشی از ابتکار عمل برای بهبود عملکرد برنامههای Ruby که از چارچوب Rails استفاده میکنند و روشهای زیادی را فراخوانی میکنند، ایجاد شده است. تفاوت اصلی با کامپایلر MJIT JIT که قبلاً استفاده شده بود، که مبتنی بر پردازش کل روشها است و از یک کامپایلر خارجی در زبان C استفاده میکند، این است که YJIT از نسخهسازی بلوک پایه Lazy (LBBV) استفاده میکند و شامل یک کامپایلر JIT یکپارچه است. با LBBV، JIT ابتدا فقط ابتدای متد را کامپایل می کند و بقیه را مدتی بعد، پس از مشخص شدن انواع متغیرها و آرگومان های مورد استفاده در حین اجرا، کامپایل می کند. هنگام استفاده از YJIT، 22٪ افزایش در عملکرد هنگام اجرای تست railsbench و افزایش 39٪ در تست مایع-رندر ثبت شد. YJIT در حال حاضر محدود به پشتیبانی از سیستمعاملهای یونیکس مانند در سیستمهایی با معماری x86-64 است و بهطور پیشفرض غیرفعال است (برای فعالسازی، پرچم «--yjit» را در خط فرمان مشخص کنید).
- بهبود عملکرد کامپایلر قدیمی MJIT JIT. برای پروژه هایی که از Rails استفاده می کنند، حداکثر اندازه کش پیش فرض (--jit-max-cache) از 100 به 10000 دستورالعمل افزایش یافته است. استفاده از JIT را برای روش هایی با بیش از 1000 دستورالعمل متوقف کرد. برای پشتیبانی از Zeitwerk of Rails، وقتی TracePoint برای رویدادهای کلاس فعال می شود، کد JIT دیگر حذف نمی شود.
- این شامل یک دیباگر کاملا بازنویسی شده debug.gem است که از اشکال زدایی از راه دور پشتیبانی می کند، برنامه اشکال زدایی را کاهش نمی دهد، از ادغام با رابط های اشکال زدایی پیشرفته (VSCode و Chrome) پشتیبانی می کند، می تواند برای اشکال زدایی برنامه های چند رشته ای و چند فرآیندی استفاده شود، ارائه می دهد. یک رابط اجرای کد REPL، قابلیتهای ردیابی پیشرفته را ارائه میدهد، میتواند قطعههای کد را ضبط و پخش کند. اشکالزدای lib/debug.rb که قبلا ارائه شده بود از توزیع پایه حذف شده است.
- برجستهسازی بصری خطاها در گزارشهای ردیابی برگشت را اجرا کرد. پرچمگذاری خطا با استفاده از بسته gem داخلی و پیشفرض error_highlight ارائه میشود. برای غیرفعال کردن پرچمگذاری خطا، میتوانید از تنظیمات «--disable-error_highlight» استفاده کنید. $ ruby test.rb test.rb:1:in " ": روش تعریف نشده "time" برای 1:Integer (NoMethodError) 1.time {} ^^^^^ منظورت این بود؟ بار
- پوسته محاسبات تعاملی IRB (REPL، Read-Eval-Print-Loop) تکمیل خودکار کد وارد شده را اجرا می کند (همانطور که شما تایپ می کنید، یک اشاره با گزینه هایی برای ادامه ورودی نمایش داده می شود، که می توانید با Tab یا Shift+ بین آنها حرکت کنید. کلید Tab). پس از انتخاب گزینه ادامه، یک کادر محاوره ای در نزدیکی نمایش داده می شود که اسناد مربوط به مورد انتخاب شده را نمایش می دهد. برای دسترسی به اسناد کامل می توان از میانبر صفحه کلید Alt+d استفاده کرد.
- دستور زبان اکنون اجازه می دهد تا هنگام فراخوانی توابع، مقادیر در هش و آرگومان های کلمه کلیدی نادیده گرفته شوند. به عنوان مثال، به جای عبارت "{x: x, y: y}" اکنون می توانید "{x:, y:}" و به جای "foo(x: x, y: y)" - foo( x:، y:)".
- پشتیبانی تثبیت شده برای مطابقت های الگوی تک خطی (ary => [x, y, z])، که دیگر به عنوان آزمایشی علامت گذاری نمی شوند.
- عملگر "^" در مطابقت های الگو اکنون می تواند شامل عبارات دلخواه باشد، به عنوان مثال: Prime.each_cons(2).lazy.find_all{_1 در [n, ^(n + 2)]}.take(3).to_a #= > [[3، 5]، [5، 7]، [11، 13]]
- در مطابقت های الگوی تک خطی، می توانید پرانتزها را حذف کنید: [0, 1] => _, x {y: 2} => y: x #=> 1 y #=> 2
- زبان حاشیه نویسی نوع RBS، که به شما امکان می دهد ساختار برنامه و انواع مورد استفاده را تعیین کنید، پشتیبانی برای تعیین حد بالایی پارامترهای نوع با استفاده از نماد "<"، پشتیبانی اضافه شده برای نام مستعار انواع عمومی، پشتیبانی پیاده سازی شده برای مجموعه هایی برای مدیریت جواهرات، عملکرد را بهبود بخشید و بسیاری از امضاهای جدید را برای کتابخانه های داخلی و استاندارد پیاده سازی کرد.
- پشتیبانی آزمایشی برای محیط های توسعه یکپارچه به تحلیلگر نوع استاتیک TypePro اضافه شده است، که حاشیه نویسی RBS را بر اساس تجزیه و تحلیل کد بدون اطلاعات نوع صریح تولید می کند (به عنوان مثال، یک افزونه برای ادغام TypePro با ویرایشگر VSCode آماده شده است).
- ترتیب پردازش تکالیف متعدد تغییر کرده است. به عنوان مثال، قبلا اجزای عبارت “foo[0], bar[0] = baz, qux” به ترتیب baz، qux، foo، bar پردازش میشد، اما اکنون foo، bar، baz، qux پردازش میشد.
- پشتیبانی آزمایشی برای تخصیص حافظه برای رشته ها با استفاده از مکانیسم VWA (تخصیص عرض متغیر) اضافه شد.
- نسخه های به روز شده ماژول های جواهر داخلی و موارد موجود در کتابخانه استاندارد. بسته های net-ftp، net-imap، net-pop، net-smtp، matrix، prime و debug داخلی هستند.
منبع: opennet.ru