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)

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

>>> Источник

Опоздали с --jit лет так на пять. Кому сейчас нужен Ruby с высокой скоростью работы? Всё равно все взлетевшие стартапы переписывают на каком-нибудь Go.

balsoft ()

Единственный ЯП, который мне удалось освоить и написать пару приложений, которыми пользовались и возможно до сих пор пользуются десятки, если не сотни, людей. Не сетевых, не джанга.

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

Кому сейчас нужен Ruby с высокой скоростью работы?

Да неплохо бы собратьям по скриптам не сливать драматически. Особенности языка делают его очень чувствительным к кривым ручкам. На какой-нибудь простейшей итерации можно уронить производительность под плинтус и выжрать всю память, если не знать о граблях. Даже книжку написали про это (со слоном на обложке). Не уверен правда, что jit тут хоть как-то поможет.

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

Опоздали с --jit лет так на пять.

А вот вопрос для общего развития. Почему для Апача есть mod_perl, php_fpm, mod_wsgi а вот для сабжа нет ?

( про CGI и прочее я в курсе ... )

mx__ ★★★★ ()

Новый JIT-компилятор, который вместо работы в памяти сохраняет на диск код на языке C

Вот пишу:

 puts "hello" 
затем
me@~/test: ruby --jit hello.rb
hello
me@~/test: ls
hello.rb
Где сишный файл?

medossa ★★ ()

достигнуто ускорение в 1.7 раз по сравнению с Ruby 2.5

Почему так мало? jit конечно странноватый, но все же - нативный код против интерпретации.

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

Почему так мало? jit конечно странноватый, но все же - нативный код против интерпретации.

Смотря какой код. Для типичного кода на руби боюсь ускорение будет еще менее заметным.

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

потому что гладиолус. На самом деле работа над jit не закончена. Владимир Марков сейчас работает над второй версией так сказать, а Takashi Kokubun пытается все это впилить в YARV непоколечив сильно совместимость. Ну и jit сейчас только для тестирования.

st4l1k ★★ ()
Последнее исправление: st4l1k (всего исправлений: 1)
Ответ на: комментарий от balsoft

Кому сейчас нужен Ruby с высокой скоростью работы? Всё равно все взлетевшие стартапы переписывают на каком-нибудь Go.

На Elixir их переписывают. Заголяют щиколотки, обматывают шею одеялом и переписывают на Elixir, сидя в кофешопе. Пока нормальные люди продолжают получать кайф от программирования на Ruby.

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

А тебе не приходило с голову, что те, кто переписывают проект на Elixir, тоже нормальные люди и тоже получают удовольствие от программирования? Что за мания вешать ярлыки?

theNamelessOne ★★★★★ ()

Вот для меня руби это самый загадочный язык в плане того, нахрена он нужен. Т.е. он ничем не лучше питона, но при этом имеет относительно него весомые минусы вроде менее развитой инфраструктуры и библиотек, меньшего комьюнити и отсутствия спроса на рынке труда. Это если не вдаваться в технические подробности и вкусовщину, где тоже много чего можно сказать.

Т.е. какие есть мотивы его использовать, кроме «нравится синтаксис» (мне нет), я не могу придумать.

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

Т.е. какие есть мотивы его использовать, кроме «нравится синтаксис» (мне нет), я не могу придумать.

а это очень даже весомый аргумент

спрос на рынке труда есть на php и js, но никто в трезвом уме не назовёт их лучшими языками

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

ничем не лучше питона

в голос с этого дауна. то что питон сосёт по мете, так это нет, не видели, связывание там осилили уже или всё ещё надо self передавать? есть ооп? или там ооп уровня того как гвидо понял?

развитой инфраструктуры

погоди это какая инфра под питон? мне что ещё майнфрэйм надо покупать чтобы запустить говноперделку?

и библиотек

ну да машин лёрнинк, как питонодибилы могут обучить компьютеры, если сами сидят необучаемые? (вопрос риторический можешь не отвечать)

меньшего комьюнити

джуны, повсюду джуны.

отсутствия спроса на рынке труда

даже проверять ненадо, и так ясно что ты умственно-отсталый.

Это если не вдаваться в технические подробности

вдайся плез)))))

anonymous ()

интуитивно понятный

как по мне - не может быть интутивно понятных языков с синтаксисом отличным от Си-семейстава или Ада/Паскаль семейства.

Вот Питон например - совершенно не интуитивный если его специально не изучать.

Руби часто сравнивают с Питоном - а это наталкивает на мысль что он такой же малословный и такой же «интуитивно понятный» :)

bonta ()
Последнее исправление: bonta (всего исправлений: 1)
Ответ на: комментарий от anonymous

в голос с этого дауна. то что питон сосёт по мете, так это нет, не видели, связывание там осилили уже или всё ещё надо self передавать? есть ооп? или там ооп уровня того как гвидо понял?

+100500. Но это аргументы против питона, а не в пользу руби. If you catch my meaning.

dimgel ()
Последнее исправление: dimgel (всего исправлений: 1)
Ответ на: комментарий от bonta

как по мне - не может быть интутивно понятных языков с синтаксисом отличным от Си-семейстава

+1. И дело не в идеальности этого синтаксиса, а в его повсеместной распространённости.

или Ада/Паскаль семейства.

А вот тут не факт.

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

Из того, что юзаю:

1) screenruler;

2) самописный скрипт, который чекает остаток трафика на lifecell при помощи соответствующего гема;

3) какой-то тасктрекер на Sinatra, года три назад юзал, набил задачами, а потом забыл, как называется, и всё никак не могу его найти на винте.

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

Руби часто сравнивают с Питоном - а это наталкивает на мысль что он такой же малословный и такой же «интуитивно понятный» :)

Сравнивают разве что как два скриптовых языка общего назначения. Синтаксически - небо и земля. Питон действительно интуитивный (кроме отдельных моментов) и деревянный, а сабж - гибкий и хитровывернутый. Может, японцам оно интуитивно...

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

хоть что-то серьёзное пишут на Elixir

Для веба ничего серьёзного вообще никто не пишет, веб - это про «еще один стартап по доставке пиццы через убер для айпада». И все программирование там - «сходил в БД, достал что-то, отрендерил страничку». Зачем ради этой убогости функциональный язык - сам ума не приложу.

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

Интуитивно понятный для гуманитариев же. Их эти ваши фигурные скобочки отпугивают. Хотя на просторах СНГ поскакаль ввиду насильного вдалбливания в школах таки «интуитивно понятнее», да.

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

Для веба ничего серьёзного вообще никто не пишет

Чо, Office365 — это тоже несерьёзно?

Зачем ради этой убогости функциональный язык

Затем, что макака, специально обученная функциональному языку, безопаснее.

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

о, Office365 — это тоже несерьёзно?

Офис в браузере это идиотизм, как и весь софт в браузере, электроне и вообще всё дерьмо, которому для запуска нужен весь вебкит и джаваскрипт движок.

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

ничем не лучше питона

А нахрена питон? Он ничем не лучше го или пыха. Какие мотивы его использовать, кроме «нравится синтаксис»? Короче, кому и кобыла невеста.

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

Идиотизм или нет, но WebAssembly пилят по этой же причине: очередная попытка забабахать-таки тонкие клиенты и забрать все данные всех человеков к себе в облака.

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

Зачем ради этой убогости функциональный язык - сам ума не приложу.

Для расчесывания ЧСВ. Ну и писали бы сразу на ерланге, казалось бы. А лучше на хаскеле.

bread ()