Выпуск языка программирования Ruby 3.0
Автор
Сообщение
news_bot ®
Стаж: 6 лет 9 месяцев
Сообщений: 27286
Состоялся релиз Ruby 3.0.0, динамического объектно-ориентированного языка программирования, отличающегося высокой эффективностью разработки программ и вобравшего в себя лучшие черты Perl, Java, Python, Smalltalk, Eiffel, Ada и Lisp. Код проекта распространяется под лицензиями BSD ("2-clause BSDL") и "Ruby", которая ссылается на последний вариант лицензии GPL и полностью совместима с GPLv3. Ruby 3.0 является восьмым значительным выпуском, подготовленным в рамках планового процесса разработки, подразумевающего отведение года на подготовку функциональных улучшений и формирование каждые 2-3 месяца корректирующих выпусков.
Отмечается, что разработчики шли к версии 3.0 с 2015 года, целью которой является производительность, параллелизм и типизация.
Юкихиро Мацумото (Yukihiro Matsumoto), автор языка программирования Ruby, пять лет назад предложил концепцию Ruby 3x3, подразумевающую, что выпуск Ruby 3 станет возможным, когда удастся добиться трёхкратного прироста производительности, по сравнению с веткой Ruby 2. Благодаря усовершенствованию поддержки JIT-компиляции подобные показатели стали реальностью.
Основные улучшения:
- В MJIT реализовано множество улучшений. Заметно повышена производительность при некоторых рабочих нагрузках, таких как игры (тест Optcarrot), AI (тест Rubykon) или любое другое приложение, которое тратит большую часть времени на многократный вызов нескольких методов. В Ruby 3.0 также значительно уменьшен размер кода, генерируемого JIT-компилятором. При этом отмечается, что JIT ещё не готов для оптимизации приложений, использующих фреймворк Rails, которые охватывают очень много методов, что приводит к неэффективной работе кэша i-cache (проблему планируется решить в выпуске Ruby 3.1).
- Добавлен инструментарий для аннотации типов RBS, который поддерживает наиболее часто встречающиеся шаблоны в программах на языке Ruby. Аннотации RBS позволяют выполнять статический анализ кода без явного определения типов. Предоставляются средства для описания определений классов и модулей: методы, определённые в классе, переменные экземпляра и их типы, а также иерархию наследования или подмешивания модулей. Дополнительно предложен экспериментальный анализатор типов TypeProf, который читает код, анализирует определение и использование методов, и генерирует прототип аннотаций типов в формате RBS.
module ChatApp
VERSION: String
class Channel
attr_reader name: String
attr_reader messages: Array[Message]
attr_reader users: Array[User | Bot] # `|` means union types, `User` or `Bot`.
def initialize: (String) -> void
def post: (String, from: User | Bot) -> Message # Method overloading is supported.
| (File, from: User | Bot) -> Message
end
end
- Экспериментальная поддержка модели акторов Ractor, предоставляющую абстракцию, подобную "акторам" (ruby actor), разработанную для обеспечения потокобезопасного параллельного выполнения программы. Поддерживается создание нескольких ракторов и их параллельный запуск. Между собой ракторы взаимодействуют путем передачи сообщений.
require 'prime'
# n.prime? with sent integers in r1, r2 run in parallel
r1, r2 = *(1..2).map do
Ractor.new do
n = Ractor.recv
n.prime?
end
end
# send parameters
r1.send 2**61 - 1
r2.send 2**61 + 15
# wait for the results of expr1, expr2
p r1.take #=> true
p r2.take #=> true
- Добавлен планировщик легковесных fiber-потоков Fiber#scheduler, поддерживающий перехват блокирующих операций для обеспечения легкого параллелизма, не требующего изменения существующего кода. В настоящее время поддерживаются следующие классы/методы (IO#select не поддерживается):
- Mutex#lock, Mutex#unlock, Mutex#sleep
- ConditionVariable#wait
- Queue#pop, SizedQueue#push
- Thread#join
- Kernel#sleep
- Process.wait
- IO#wait, IO#read, IO#write и связанные с ними методы (например #wait_readable,#gets, #putsи так далее).
require 'async'
require 'net/http'
require 'uri'
Async do
["ruby", "python", "c"].each do |topic|
Async do
Net::HTTP.get(URI "https://www.google.com/search?q=#{topic}")
end
end
end
- Переработаны однострочники сопоставления с образцом.
- Добавлен оператор "=>" (значения => переменная), который используется для правостороннего присваивания значений.
0 => a
p a #=> 0
{b: 0, c: 1} => {b:}
p b #=> 0
- Изменено поведение "in", который теперь возвращает true или false.
# version 3.0
0 in 1 #=> false
# version 2.7
0 in 1 #=> raise NoMatchingPatternError
- Добавлен экспериментальный шаблон для поиска значений:
case ["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
- Встроен метод Hash#except.
h = { a: 1, b: 2, c: 3 }
p h.except(:a) #=> {:b=>2, :c=>3}
- Добавлена поддержка однострочного определения метода без использования ключевого слова "end":
def square(x) = x * x
- Стабилизирована конструкция сопоставления с образцом ("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.
===========
Источник:
OpenNet.RU
===========
Похожие новости
- Главная ссылка к новости (https://www.ruby-lang.org/en/n...)
- OpenNews: Выпуск языка программирования Ruby 2.7.0
- OpenNews: В RubyGems выявлено 724 вредоносных пакета
- OpenNews: Релиз 19.3.0 виртуальной машины GraalVM и реализаций Python, JavaScript, Ruby и R на её основе
- OpenNews: Доступен интерпретатор mruby 2.0
- OpenNews: Проект Ruby перешёл с Subversion на Git
Похожие новости:
- [Ruby, Oracle, Python, JavaScript, Java] Опыт сопряжения Java, JavaScript, Ruby и Python в одном проекте посредством GraalVM
- Серия вредоносных дополнений в Chrome Web Store и модулей в RubyGems
- [Ruby, Ruby on Rails] Почему в 2020 году мы по-прежнему выбираем Ruby?
- [Ненормальное программирование, Ruby, Программирование] Программирование только классами (перевод)
- [Ruby, Занимательные задачки] Игра в Code Golf: сжатие кода и его сабмит на конкурс платформы AtCoder (перевод)
- Результаты опроса разработчиков, использующих Ruby on Rails
- [Ruby, Ruby on Rails] Неофициальный гайд по Active Admin
- [Ruby, Python, Программирование] Как работают профайлеры в Ruby и Python?
- [Ruby, Ruby on Rails, Администрирование баз данных, Хранение данных, Хранилища данных] Миграции данных в Ruby On Rails
- [Ruby, Совершенный код, Компиляторы, Софт] Сложности работы с ANTLR: пишем грамматику Ruby
Теги для поиска: #_ruby
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы не можете скачивать файлы
Текущее время: 22-Ноя 14:43
Часовой пояс: UTC + 5
Автор | Сообщение |
---|---|
news_bot ®
Стаж: 6 лет 9 месяцев |
|
Состоялся релиз Ruby 3.0.0, динамического объектно-ориентированного языка программирования, отличающегося высокой эффективностью разработки программ и вобравшего в себя лучшие черты Perl, Java, Python, Smalltalk, Eiffel, Ada и Lisp. Код проекта распространяется под лицензиями BSD ("2-clause BSDL") и "Ruby", которая ссылается на последний вариант лицензии GPL и полностью совместима с GPLv3. Ruby 3.0 является восьмым значительным выпуском, подготовленным в рамках планового процесса разработки, подразумевающего отведение года на подготовку функциональных улучшений и формирование каждые 2-3 месяца корректирующих выпусков. Отмечается, что разработчики шли к версии 3.0 с 2015 года, целью которой является производительность, параллелизм и типизация. Юкихиро Мацумото (Yukihiro Matsumoto), автор языка программирования Ruby, пять лет назад предложил концепцию Ruby 3x3, подразумевающую, что выпуск Ruby 3 станет возможным, когда удастся добиться трёхкратного прироста производительности, по сравнению с веткой Ruby 2. Благодаря усовершенствованию поддержки JIT-компиляции подобные показатели стали реальностью. Основные улучшения:
=========== Источник: OpenNet.RU =========== Похожие новости
|
|
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы не можете скачивать файлы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы не можете скачивать файлы
Текущее время: 22-Ноя 14:43
Часовой пояс: UTC + 5