Ruby 3.0.0 – это планируемое обновление динамического языка с открытым исходным кодом, которое уже доступно в качестве предварительной версии. Основные особенности новой версии включают возможности параллельного выполнения и описания типов.
Ractor
Параллельное выполнение осуществляется в форме экспериментальной функции, получившей название «Ractor», которая представляет собой абстракцию параллелизма, подобную модели Actor, предназначенную для обеспечения параллельного выполнения без проблем безопасности потоков. Разработчики могут создавать несколько «ракторов» и запускать их параллельно. Эти параллельные программы можно сделать потокобезопасными, поскольку «ракторы» не могут совместно использовать обычные объекты. Связь между «ракторами» поддерживается посредством передачи сообщений.
Чтобы ограничить совместное использование объектов, Ractor вводит несколько ограничений в синтаксис Ruby.
Спецификация и внедрение не дорабатываются и не изменяются в будущем, поэтому эта функция помечена как экспериментальная.
пример использования Ractor
RBS
Ruby 3.0.0 также представляет RBS, заявленный как язык для описания типов программ Ruby. Он позволяет анализировать и обрабатывать определения типов. Средства проверки типов, включая профилировщики типов и другие инструменты, поддерживающие RBS, будут лучше понимать программы Ruby.
RBS предназначен для поддержки часто встречающихся шаблонов в программах Ruby. Поддерживаются расширенные типы, включая типы объединения, перегрузка методов и универсальные типы. Программисты смогут использовать определение классов и модулей: методы, определенные в классе, переменные экземпляра и их типы, а также отношения наследования/смешивания.
пример RBS
Планировщик
В 3 версии языка также добавлен планировщик, который находится на экспериментальной стадии, для перехвата блокирующих операций. Обозначаемая как Thread#scheduler, возможность обеспечивает легкий параллелизм без изменения существующего кода.
Поддерживаемые в настоящее время классы / методы:
- Mutex#lock, Mutex#unlock,Mutex#sleep
- ConditionVariable#wait
- Queue#pop, SizedQueue#push
- Thread#join
- Kernel#sleep
- IO#wait, IO#read, IO#write и связанные с ними методы (например #wait_readable, #gets, #puts).
- IO#select не поддерживается.
Текущая точка входа для параллелизма, Fiber.schedule{...}, однако, может измениться к моменту выпуска Ruby 3.
Другие примечательные функции
- Представление памяти, еще одна экспериментальная функция, представляет собой набор C-API для обмена необработанной областью памяти, такой как числовой массив или растровое изображение, между библиотеками расширений. Эти библиотеки также могут совместно использовать метаданные области памяти, которая состоит из формы, формы элемента и т. д.
- Повышена производительность компилятора Ruby MJIT (Just In Time на основе методов).
- Добавлено отделение аргументов ключевого слова от других аргументов.
- Hash#except теперь встроенный.
- Добавлен оператор присваивания вправо.
- Добавлено бесконечное определение метода.
- Добавление шаблона поиска.
Предварительная версия Ruby 3.0.0 была представлена 25 сентября и доступна для скачивания с официального сайта. Во второй предварительный просмотр разработчики Ruby планируют включить профилировщик типов, который служит функцией статического анализа. Текущие стабильные выпуски Ruby – это версии 2.7.1 и 2.6.6.
Напомним, что по данным опроса Stack Overflow среди программистов, Ruby вошел в десятку «самых высокооплачиваемых» языков в этом году.