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)

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

>>> Источник

Ответ на: комментарий от theNamelessOne

Аргументируй

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

bread ()

нельзя написать о релизе рубятины и не сказать «элегантный». видимо какое-то правило есть на этот счет.
сколько смотрел на код редмайна - элегантности не увидел. долго смотрел, до крови из глаз, но элегантности нет. птичий синтаксис зато есть

SevikL ★★★★ ()

Новый JIT-компилятор, который вместо работы в памяти сохраняет на диск код на языке C и обрабатывает его внешним компилятором (поддерживаются GCC, Clang и Microsoft VC++)

Вот это жит так жит!

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

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

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

В общем мало того, что рантайм не готов к функциональщине, так еще сам язык никак не располагает к ней. Веб-мастеры как всегда фееричны в своих заскоках.

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

сначала развернул saltstack, но оказалось избыточно, на гетерогенную среду стэйт-файлов не наберёшься. сейчас в пару десятков скриптов ансибля укладываюсь.

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

нет, мой любимый редактор есть в дебьянах из коробки, а когда нет я и вимом не брезгую.

у меня достаточная свобода действий, могу делать всё, что не ломает бизнес-процессы.

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

Нужна какая-то запредельная самодисциплина, чтобы там не свалиться в императивщину

Нужно всего-то реакт и https://facebook.github.io/immutable-js/

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

а ты не читатель, верно? давай я повторю для тебя более понятными словами:
я волен делать на своих серверах всё, что угодно, если это не мешает работе основных продуктов. ни один из оркестраторов - не основной продукт моей конторы. так яснее?

и да, паппет не умеет в ad-hoc, вешается на исполнении с сжиранием 1 ядра cpu и тащит с собой руби, которой на сервере не надо в 90% случаев.

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

сам язык никак не располагает к ней

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

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

Дык вроде я написал нахрена питон. Его все равно надо знать, вне зависимости от личных предпочтений, т.к. он везде, т.е. нужна мотивация учить и использовать руби дополнительно. Я могу легко вообразить мотивацию учить почти любой язык, от жабаскрипта до хаскеля и брэйнфака, а вот для руби не могу ее придумать.

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

Ага, обмазались лямбдами, и уже матерые функциональщики. Если «любой язык» не гарантирует иммутабельность и не контролирует сайд-эффекты, это провал.

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

Его все равно надо знать, вне зависимости от личных предпочтений, т.к. он везде

Где везде? Если ты заюзал руби, то 100% питон тебе не понадобится в той нише. В вебе вообще мало кто с питоном работает (ибо нафига). На винде никто про питон и не слышал, в геймдеве его очень редко используют. Вообще мотивации учить питон никакой нет, если ты не девопс какой.

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

Боюсь это школьники и аспиранты накрутили. Кстати, на мобилках тоже питона нетути, и в кровавом тырпрайзе. Так что хз какие задачи решают все эти фанбои питона. Лабы и домашка наверно.

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

на 60тр не нанять в любой момент как жс студента? Если требования такие то понятно кадров не будет.

А сколько веб-макаке надо платить? И будет ли результат лучше, если применить нанотехнологии из телекома для доставки данных из БД к сотне юзверей (в сутки)?

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

можно такого наставить

А потом удивляются, что нагенеренный через пять прокладок код тормозит. А кстати зачем так делать? В олдовой гуйне как-то обходились без функциональщины.

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

А потом удивляются

Удивляются только ЛОРовские нищеброды, на девелоперских макпуках вся эта гора говнокода не тормозит, и у платежеспособной аудитории тоже, а на неплатежеспособную насрать. Ты в курсе, что дефолтном конфиге реакта, например, давно not op_mini all и not ie <= 11, хотя рыночная доля у них, казалось бы, больше, чем у какого-нибудь эджа?

как-то обходились

Да вообще, деды на ассемблере писали, всем KolibriOS, а этот ваш линукс и весь юниксвей — жирное тормозное говно, а уж bash — и подавно, об этом даже в мануале написано:

BUGS
       It's too big and too slow.

Moondancer ()

Он имеет элегантный синтаксис: интуитивно понятный и простой для написания.

АХАХАХАХАХА.

Интуитивно-понятность своя для каждого, хотя в среднем у Ruby на уровне. А «простой для написания» - это точно не про него. inb4 и не про Python тоже.

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

QML?

Альзо, гуйня гуйне рознь; если не обмазываться моднявым говном, а исходить из возможностей HTML, можно и на вебне высрать что-то вменяемое, типа вебморд на роутерах или какого-нибудь PMA.

Moondancer ()

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

А через 10 лет, в раби 4, они добавят аннотации типов? На старых рельсах не угнаться за поездом хайпа

spoonbob ()