Состоялся релиз языка программирования Ruby 3.0.0, главное преимущество обновление в том, что его скорость увеличилось в три раза, разработка шла с 2015 года.
Также посмотрите статью: «Что нового в PHP 8.0», если вы интересуетесь и этим языком, то вам будет интересно.
Достичь этого в каком то смысле позволило благодаря Юкихиро Мацумото (Yukihiro Matsumoto), автору языка программирования Ruby, которые предложил концепцию Ruby 3×3, подозревалась что выпустят Ruby 3.0 только тогда, когда смогут достичь скорость в три раза, чем а Ruby 2.
Что нового в Ruby 3.0:
- В MJIT реализовано множество улучшений. Заметно повышена производительность при некоторых рабочих нагрузках, таких как игры (тест Optcarrot), AI (тест Rubykon) или любое другое приложение, которое тратит большую часть времени на многократный вызов нескольких методов. В Ruby 3.0 также значительно уменьшен размер кода, генерируемого JIT-компилятором. При этом отмечается, что JIT ещё не готов для оптимизации приложений, использующих фреймворк Rails, которые охватывают очень много методов, что приводит к неэффективной работе кэша i-cache;
- Добавлен инструментарий для аннотации типов RBS, который поддерживает наиболее часто встречающиеся шаблоны в программах на языке Ruby. Аннотации RBS позволяют выполнять статический анализ кода без явного определения типов. Предоставляются средства для описания определений классов и модулей: методы, определённые в классе, переменные экземпляра и их типы, а также иерархию наследования или подмешивания модулей. Дополнительно предложен экспериментальный анализатор типов TypeProf, который читает код, анализирует определение и использование методов, и генерирует прототип аннотаций типов в формате RBS.
1234567891011module ChatAppVERSION: Stringclass Channelattr_reader name: Stringattr_reader messages: Array[Message]attr_reader users: Array[User | Bot] # `|` means union types, `User` or `Bot`.def initialize: (String) -> voiddef post: (String, from: User | Bot) -> Message # Method overloading is supported.| (File, from: User | Bot) -> Messageendend - Экспериментальная поддержка модели акторов Ractor, предоставляющую абстракцию, подобную «акторам» (ruby actor), разработанную для обеспечения потокобезопасного параллельного выполнения программы. Поддерживается создание нескольких ракторов и их параллельный запуск. Между собой ракторы взаимодействуют путем передачи сообщений;
1234567891011121314require 'prime'# n.prime? with sent integers in r1, r2 run in parallelr1, r2 = *(1..2).map doRactor.new don = Ractor.recvn.prime?endend# send parametersr1.send 2**61 - 1r2.send 2**61 + 15# wait for the results of expr1, expr2p r1.take #=> truep r2.take #=> true - Добавлен планировщик легковесных fiber-потоков Fiber#scheduler, поддерживающий перехват блокирующих операций для обеспечения легкого параллелизма, не требующего изменения существующего кода;
- Добавлен экспериментальный шаблон для поиска значений:
1234567case ["a", 1, "b", "c", 2, "d", "e", "f", 3]in [*pre, String => x, String => y, *post]p pre #=> ["a", 1]p x #=> "b"p y #=> "c"p post #=> [2, "d", "e", "f", 3]end - Добавлена поддержка однострочного определения метода без использования ключевого слова «end»;
- Стабилизирована конструкция сопоставления с образцом («case .. in»), которая больше не является экспериментальной;
- Добавлен экспериментальный C-API для обмена областями памяти между библиотеками-расширениями и предоставления метаданных о содержимом памяти. Например через новый C-API можно передавать такие данные, как числовые массивы и растровые изображения;
- Удалены специализированные C-API методы $SAFE. $SAFE и $KCODE теперь являются обычными глобальными переменными;
- Существенно повышена производительность интерактивного интерпретатора IRB, вставка больших отрывков кода в который теперь производится в 53 раза быстрее, чем в Ruby 2.7. Добавлена команда «measure» для вывода статистики о времени выполнения кода;
- Обновлены gem-модули, входящие в stdlib. Из базового набора исключены модули sdbm, webrick, net-telnet и xmlrpc. В основной состав включены модули rexml и rss;
Вывод:
В этой статье вы прочитали что нового в Ruby 3.0, думаю вам было интересно, так же по ссылке посмотрите статью оригинал, там чуть более подробно всё описано.
Источник: OpenNet;
Подписываетесь на соц-сети:
Также рекомендую:
Подписаться
0 комментариев