LINUX.ORG.RU

Ruby 2.6.0

 , ,


1

3

Ruby — динамический, опенсорсный язык с прицелом на простоту и продуктивность. Он имеет элегантный синтаксис: интуитивно понятный и простой для написания.

В этом выпуске представлен ряд новых возможностей и улучшений производительности. Самые важные:

  • Новый JIT-компилятор, который вместо работы в памяти сохраняет на диск код на языке C и обрабатывает его внешним компилятором (поддерживаются GCC, Clang и Microsoft VC++). Включается ключом --jit. На активно нагружающих процессор задачах достигнуто ускорение в 1.7 раз по сравнению с Ruby 2.5.
  • Модуль RubyVM::AbstractSyntaxTree (экспериментальный, поддержание будущей совместимости пока не гарантируется). Он предоставляет методы parse и parse_file для превращения соответственно строки или файла с кодом на Ruby в узлы абстрактного синтаксического дерева, представленного объектами класса Node из того же модуля.

Другие важные нововведения:

  • Добавлен алиас #then для Kernel#yield_self.
  • Имена констант могут начинаться с не входящих в ASCII заглавных букв.
  • Добавлены бесконечные диапазоны вида (1..).
  • Добавлены Enumerable#chain и Enumerator#+.
  • Для Proc и Method добавлены операторы композиции функций << и >>.
  • Добавлен метод Binding#source_location, возвращающий массив из __FILE__ и __LINE__, соответствующих местоположению привязки в исходном коде. Он рекомендуется к использованию вместо Kernel#eval, поскольку поведение последнего планируется изменить.
  • Для Kernel#system добавлен параметр exception:, с которым он бросает исключение вместо возврата false.
  • Добавлен упрощённый режим для Coverage, при котором проверяется лишь факт вызова строк хотя бы раз.
  • Добавлен FileUtils#cp_lr. Он работает как cp_r, но вместо копирования делает ссылки.

Улучшения производительности:

  • Ускорен в 1.4 раза Proc#call путём избавления от временного создания $SAFE.
  • Ускорен в 2.6 раза block.call в случаях, когда переданный block является блочным параметром.
  • Добавлена Преходящая Куча (theap) — управляемая куча для краткоживущих объектов определённых классов (Array, Hash, Object и Struct), давшая улучшение производительности на 6-7%.
  • Нативные реализации (arm32, arm64, ppc64le, win32, win64, x86 и amd64) корутин ради значительного улучшения производительности переключения контекстов в Fiber: на 64-разрядном Linux Fiber.yield и Fiber#resume отрабатывают в 5 раз быстрее; в среднем стоит ожидать до 5% улучшения производительности для программ, активно использующих Fiber.

Другие важные изменения по сравнению с 2.5:

  • $SAFE теперь является глобальным состоянием процесса и может быть сброшен в 0.
  • Передача safe_level в ERB.new объявлена устаревшей. Аргументы trim_mode и eoutvar сделаны именованными.
  • Поддержка Unicode обновлена до 11-й версии, а в следующем минорном выпуске ожидается также поддержка 12 и 12.1.
  • Влит RubyGems 3.0.1. Убраны ключи --ri и --rdoc, используйте вместо них --document и --no-document.
  • Гем Bundler теперь устанавливается по умолчанию.
  • В блоках обработки исключений else без rescue теперь вызывает синтаксическую ошибку.

>>> Скачать (SHA1=c95f4e86e21390270dad3ebb94491fd42ee2ce69)

>>> Подробности

>>> Источник



Проверено: maxcom ()
Последнее исправление: cetjs2 (всего исправлений: 4)

Ответ на: Он ещё жив? от Vladimir1982

В умах почитателей его творчества.

Вот, и с рубином примерно так. Вроде лоровцы давно его похоронили, но японцы пилят упорно интерпретатор, на rubygems активность тоже не сильно снизилась. У ruby 2.x вполне нормальная реализация в сравнении со старыми рубями, на которых взлетали рельсы. Ускорили интерпретатор на порядок, завезли приличный GC с поколениями, теперь вот и JIT. При этом сохранили обратную совместимость (так можно было оказывается, а питонщики и не знали).

bread
()
Ответ на: Он ещё жив? от Vladimir1982

Если в ruby 3 завезут статическую типизацию с выводом типов на манер crystal, на что вроде намекают японцы, это будет пушка.

bread
()
Ответ на: комментарий от Moondancer

Расчеты тоже. Программирование это когда роботу крышку срывают, подключают проводки и вводят новое задание машкодами.

bread
()
Ответ на: комментарий от bread

Если в ruby 3 завезут статическую типизацию

Не завезут. Как например никогда на завезут рубишные классы в lisp. потому что нахрен не нужно)

Alve ★★★★★
()
Ответ на: комментарий от Alve

Не так давно фанбои утверждали, что питону не нужен статический тайпчекер, мол динамика пострадает и ваще против природы. Теперь typing и mypy главные фичи у них. Ну а Матц сказал, что аннотаций он не хочет, но насчет вывода типов надо думать.

bread
()
Ответ на: комментарий от Alve

В JS натаскали — взлетело. Посмотрим, карго-культ это или реально поможет.

Moondancer
() автор топика
Ответ на: комментарий от Alve

Фишка в том, что в язык много и не надо втаскивать. В кристале для полного вывода хватает крошечного количества аннотаций в самых неоднозначных местах как например переменные экземпляра. Конечно неясно как это скрестить с метапрограммированием в рантайме. В любом случае дальняя перспектива, сейчас пока наблюдаем как JIT себя покажет.

bread
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.