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)

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

>>> Источник

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

Под каждую платформу свою гуйню, очевидно же

Под каждую платформу свою делать позволительно, когда прототип на каком-то говне уже обкатан и рынок завоёван. А пока ты будешь пилить свою нативную гуйню — конкуренты задавят, этой тенденции уже лет 30 и пуристы-теоретики её не изменят. Да и зачем, если есть, например, максимально приближённый к вебне React Native, генерирующий эти самые нативные гуйцы, или хотя бы мимикрирующие по них?

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

QML?

И писать на плюсах? Уж лучше js. Можно, конечно, на pyQt. И собирать для всех платформ инсталяторы с питоном и qt. Но оно будет мало олтличаться от электрона, а для мобил вообще непригодно

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

А через 10 лет, в раби 4, они добавят аннотации типов?

Нет, их начальник сказал никаких аннотаций не будет пока он командует. Вывод типов может и запилят. Вообще, есть Crystal, если хочется типолюбствовать.

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

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

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

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

И писать на плюсах? Уж лучше js

Так там именно что на JS можно.

Но оно будет мало олтличаться от электрона

Легковеснее и шустрее будет, как минимум. Разница между Viber/Telegram (на Qt) и Skype/Slack (на Electron) видна невооружённым взглядом даже хомячкам.

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

И это, кстати, видно на тех же примерах: у Telegram кроссплатформенная десктопная версия вечно отстаёт по фичам от версий по мобильники и под Mac (кодовая база у них разная). А у Viber вообще уже год как забросили клиент под GNU/Linux и всякие там WinXP/старые Mac OS X. А Slack/Skype стабильно и равномерно развиваются и обрастают новыми фичами.

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

А так прям нужна кроссплатформенность? Делаешь под винду, а там видно будет. Это если приложение, а если нужен сайт-переросток, то делаешь сайт-переросток для арбузера, а не для абстрактной «любой платформы». Если ты саахрикту, делаешь tui на ncurses и забиваешь на хомячков с лопатами, вёндами и хрюникодом.

bread ()

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

Вау, это теперь JIT называется

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

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

Неплохой способ разобраться с задачами.

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

На самом деле работа над jit не закончена. Владимир Марков сейчас работает над второй версией так сказать

А где-нибудь можно за всё это почитать или посмотреть исходники? Да, Владимир Макаров разрабатывал какой-то там JIT, там была еще аббревиатура RTL, он и сейчас над ним работает или это другая разработка?

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

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

А паппет ломает бизнес-процессы?

Вас приветствует логический бот. У вас ошибка в логике: из «могу делать всё, что не ломает бизнес-процессы» никак не следует «запрещено менять то, что не ломает бизнес-процессы».

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

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

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

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

Регистрант, вероятно, имел в виду распространённость си-подобного синтаксиса в it-среде. В этой среде да, си-подобный синтаксис, несмотря на всё его уродство, понимают почти все.

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

Можно, конечно, на pyQt.
Но оно будет мало олтличаться от электрона

Слабо верится. Есть какие-нибудь пруфы?

Я ни разу не любитель Qt, но мне всегда казалось, что такого уникально говённого говна, как электрон, больше нету (среди юникс-совместимой современной гуйни, конечно).

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

Статья k0kubun
https://medium.com/@k0kubun/ruby-2-6-jit-progress-and-future-84e0a830ecbf

выступление где говорит про планы новой реализации
https://rubykaigi.org/2018/presentations/vnmakarov

Старый доклад
https://vmakarov.fedorapeople.org/VMakarov-RubyKaigi2017.pdf

Да, Владимир Макаров разрабатывал какой-то там JIT, там была еще аббревиатура RTL, он и сейчас над ним работает или это другая разработка?

ну от планов внедрения RTL не отказались еще, но не понятно как и кто это будет делать. Там друга разработка.

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

Ну я тогда пробовал по часу в день своим проектам уделять, чтобы они хоть как-то с мёртвой точки двигались. Книги какие-то читал, которые впалу было читать: ohaskell, ещё что-то. А потом каникулы закончились, и я это всё дропнул.

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

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

Вроде как в нём первом utf8 нормально сделали, соответственно японцы тему раздули. Но то было давно.

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

Ну покажи тогда офисный пакет с тимворкингом через интернеты не в браузере.

От того, что такого пакета нет, идиотизм не перестаёт быть идиотизмом. Только серьёзнее становится.

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

И без гарантий удобно использовать filter, map, reduce или лямбды в целом.

Но это не ФП, это стихийное применение функциональной декомпозиции. От этого код в целом не перестает быть императивным.

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

Видимо, оно многократно во время выполнения может вызваться, потому и не AOT.

Не AOT потому что заранее типы не известны, и толку канпелировать никакого нет. По ходу исполнения можно накопить статистику и сгенерить что-то более адекватное на сишке. Ну так по-ламерски я это представляю. И все равно толку нет, потому что код на руби занят в основном перепаковкой указателей и дерганьем сишных либ. Самое узкое место там — это аллокатор и GC. И как оно будет тормозить зависит от того, как кодер напишет свою высокоуровневую лапшу (а пишут скрипты в основном не приходя в сознание).

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

Неоднократно в универе групповые проекты так пилили — в гуглодоке. Причём зачастую все одновременно, дополняя разные части документа. Предложи альтернативу, не требующую от контрагентов изучать какой-то пердольный плейнтекстовый синтаксис :P

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

Неоднократно в универе групповые проекты так пилили — в гуглодоке. Причём зачастую все одновременно, дополняя разные части документа.

Код тоже толпой набиваете в одном файле?

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

Та блин любая командная работа без этого неудобна

Без офиса? Почесал репу, вспомнив когда я последний раз такое запускал. Наверно еще ворд 97 это был.

bread ()