Ruby бағдарламалау тілінің шығарылымы 3.2

Ruby 3.2.0 шығарылды, ол бағдарлама әзірлеуде жоғары тиімді және Perl, Java, Python, Smalltalk, Eiffel, Ada және Lisp тілдерінің ең жақсы мүмкіндіктерін қамтитын динамикалық объектіге бағытталған бағдарламалау тілі. Жоба коды BSD («2-тармақты BSDL») және «Ruby» лицензиялары бойынша таратылады, бұл GPL лицензиясының соңғы нұсқасына сілтеме жасайды және GPLv3-пен толық үйлесімді.

Негізгі жақсартулар:

  • Веб-шолғышта немесе wasmtime сияқты оқшау жұмыс уақытында іске қосу үшін WebAssembly аралық кодына құрастырылатын CRuby аудармашысының бастапқы порты қосылды. Бөлек іске қосылған кезде операциялық жүйемен тікелей әрекеттесу үшін WASI (WebAssembly System Interface) API пайдаланылады. Басқа нәрселермен қатар, WASI үстіңгі жағында VFS қаптамасы қамтамасыз етілген, ол бүкіл Ruby қолданбасын бір wasm файлы түріндегі презентацияға буып алуға мүмкіндік береді. Браузерде іске қосу TryRuby сияқты оқыту және демонстрациялық веб-қызметтерді жасау үшін пайдаланылуы мүмкін. Әзірлеудің қазіргі кезеңінде порт Thread API қолданбайтын негізгі және жүктеу сынақ пакеттерінен сәтті өтеді. Порт сонымен қатар Талшықтарды, ерекше жағдайларды немесе қоқыс жинауды қолдамайды.
  • Rails негізін қолданатын және көптеген әдістерді шақыратын Ruby бағдарламаларының өнімділігін арттыру бастамасының бөлігі ретінде Shopify электрондық коммерция платформасын әзірлеушілер жасаған YJIT процессіндегі JIT компиляторы тұрақты және дайын деп жарияланды. өндірістік пайдалану. Бүкіл әдістерді өңдеуге негізделген және Си тілінде сыртқы компиляторды пайдаланатын бұрын қолданылған MJIT JIT компиляторынан негізгі айырмашылығы, YJIT Lazy Basic Block Versioning (LBBV) қолданады және біріктірілген JIT компиляторын қамтиды. LBBV көмегімен JIT алдымен әдістің басын ғана құрастырады, ал қалғандарын орындау кезінде қолданылатын айнымалылар мен аргументтердің түрлері анықталғаннан кейін біраз уақыттан кейін құрастырады. YJIT Linux, MacOS, BSD және басқа UNIX платформаларында x86-64 және arm64/aarch64 архитектуралары үшін қол жетімді.

    Ruby-ден айырмашылығы, YJIT коды Rust тілінде жазылған және компиляция үшін rustc 1.58.0+ компиляторын қажет етеді, сондықтан YJIT құрастыру әдепкі бойынша өшірілген және міндетті емес. YJIT пайдалану кезінде интерпретацияны пайдаланумен салыстырғанда yjit-bench сынағы орындалғанда өнімділіктің 41% артуы тіркелді.

    Ruby бағдарламалау тілінің шығарылымы 3.2

  • Тиімсіз және уақытты қажет ететін тұрақты өрнектерде (ReDoS) сыртқы деректерді өңдеу кезінде қызмет көрсетуден бас тарту шабуылдарынан қосымша қорғаныс қосылды. Есте сақтау техникасын қолданатын сәйкестендіру алгоритмі айтарлықтай жетілдірілді. Мысалы, '/^a*b?a*$/ =~ «a» * 50000 + «x»' өрнегінің орындалу уақыты 10 секундтан 0.003 секундқа дейін қысқарды. Оңтайландыру құны - бұл жадты тұтынудың ұлғаюы, оның тұтынуы кіріс деректерінің өлшемінен шамамен 10 есе жоғары. Екінші қауіпсіздік шарасы - қалыпты өрнек өңделуі қажет күту уақытын анықтау мүмкіндігі (мысалы, “Regexp.timeout = 1.0”).
  • Жетіспейтін немесе қосымша жабылатын «соңы» өрнегімен байланысты қателердің себептерін диагностикалауға көмектесетін синтаксистік_ұсыныс режимі қосылған. Сәйкес емес `соңы', жетіспейтін кілт сөз ('do', 'def', 'if', т.б.) ? 1 класс Ит > 2 дефбарк > 3 соңы 4 ұшы
  • Түрлер мен аргументтерге қатысты қателер үшін аргументтерді белгілеу мүмкіндігі қате орнын көрсету режиміне қосылды, мысалы: test.rb:2:in `+': nil мәнін Integer (TypeError) сомасына мәжбүрлеу мүмкін емес. [0] + ары [1] ^^^^^^
  • Аргументтер жиынын басқа әдістерге қайта бағыттау үшін жаңа синтаксис қосылды: def foo(*) bar(*) end def baz(**) quux(**) end
  • Ruby_vm/mjit/compiler ұсынылады - ескі MJIT JIT компиляторының Ruby тілінде қайта жазылған нұсқасы. MJIT жұмысшы ағынында емес, MJIT бөлек процесте жұмыс істейтініне көз жеткізіңіз.
  • Bundler 2.4 нұсқасында тәуелділікті өңдеу PubGrub нұсқасының детекторын пайдаланады, сонымен қатар Dart тілі үшін паб бума менеджерінде қолданылады. Бұрын қолданылған Molinillo алгоритмі RubyGems-те қолданылуын жалғастыруда, бірақ сонымен бірге болашақта PubGrub ауыстырылады.
  • Кірістірілген асыл модульдердің және стандартты кітапханаға енгізілгендердің жаңартылған нұсқалары.

Ақпарат көзі: opennet.ru

пікір қалдыру