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)

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

>>> Источник

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

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

что за софт, если не секрет?

anonymous ()

Кстати, релизную версию кто-нибудь уже собирал? Что-то какой-то странный квест. Пререлизные версии хорошо же собирались, а тут взяли и чего-то нагородили. То

ld: unrecognized option '-Wl,--compress-debug-sections=zlib'
То
ld: -f may not be used without -shared
А то и вовсе
undefined reference to `__dso_handle'
...
relocation R_X86_64_PC32 against undefined hidden symbol `__dso_handle' can not be used when making a shared object

В Gentoo уже появился ебилд. Пробовал его читать, но решения там не увидел.

saahriktu ★★★★★ ()
Ответ на: комментарий от shell-script

Ну проверил.

bq:00:10:45:/tmp$ vi 1/pisek

[1]+  Остановлен    vi 1/pisek
bq:00:19:25:/tmp$ jobs -l
[1]+ 12447 Остановлено  vi 1/pisek
bq:00:19:29:/tmp$ kill -9 12447
bq:00:19:34:/tmp$ vi 2/pisek
[1]   Убито              vi 1/pisek

[2]+  Остановлен    vi 2/pisek
bq:00:19:52:/tmp$ jobs -l
[2]+ 14869 Остановлено  vi 2/pisek
bq:00:19:54:/tmp$ kill -9 14869
bq:00:19:57:/tmp$ mv 2/pisek 3/
[2]+  Убито              vi 2/pisek
bq:00:20:09:/tmp$ vi 3/pisek 
И шо, где мой свопфайл, сцучечке? Говорю же, фигня вышла ;-)

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

На самом деле нет. Я тут додебажился до того, что это поломанные (по крайней мере, для меня) следующие файлы в исходниках:

tool/config.guess
tool/config.sub
Если заменить их на версии хотя бы из -rc2 (там они 2013-го года), то всё начинает собираться.

А что именно поломали в этих файлах - это ещё нужно выяснять.

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

GDoc

GDoc — это больше для «гуманитарных» задач, и если вы ничем подобным не занимаетесь, то не надо говорить, что это не нужно никому. Я, к примеру, писал так в соавторстве статьи для НФ-журнала (короткие НФ-рассказы тоже так можно). Ещё, к примеру, в Русской Википедии есть такая штука как арбитражный комитет — 3-7 человек избираемых на пол-года, призванных решать не разрешаемые иначе конфликты. Тоже все решения через GDoc пишутся. Ну и т.д., и т.п. Надеюсь теперь UseCase для подобных онлайн-офисов (и почему git+emacs/vim тут не подойдут) для вас стал яснее.

ps. Забавно, что всё это в теме о Ruby

be_nt_all ()
Последнее исправление: be_nt_all (всего исправлений: 2)
Ответ на: GDoc от be_nt_all

GDoc — это больше для «гуманитарных» задач, и если вы ничем подобным не занимаетесь, то не надо говорить, что это не нужно никому.

А я такого нигде и не говорил, ты выдумываешь

Надеюсь теперь UseCase для подобных онлайн-офисов для вас стал яснее

Да он и был для меня ясен, на мой взгляд, оно очевидно

и почему git+emacs/vim тут не подойдут

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

Я от офиса как такового (не только онлайнового) особых восторгов не испытываю. Превращения компьютера в печатную машинку — суть стрельба из пушек по воробьям. Компьютер — мощное средство автоматизации и связи, а люди, через свою деградацию, дальше, чем напечатать бумажку и не умеют ничего. Что говорит не столько об офисе, сколько о людях.

// это не в твой лично огород камень, я понимаю как жизнь устроена и тоже постоянно вынужден делать не так как мне кажется правильным

ps. Забавно, что всё это в теме о Ruby

Пфф... забавно, что до сих пор не о геях и Путине, это да )

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

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

Чат — параллельно, но можно и без него, комментарии на полях — неплохая замена. Вики — не, там нужно редактировать по очереди и/или разруливать конфликты редактирования через всё те же diff'ы — а это именно для работы в режиме мозгового штурма. Когда ты пишешь предложение и можешь одновременно наюлюдать, как твой соавтор правит предыдущее. Звучит непривычно (ну нет аналогов такому режиму в докомпьютерную эру, кроме доски и мела, конечно, но так много не напишешь) но бывает весьма полезно.

Голосовалки и вика — это для чего то монументального хорошо, ну, допустим, если это художественная проза — романа. А для рассказика или котроткого эссе — самое то онлайн офис.

be_nt_all ()
Последнее исправление: be_nt_all (всего исправлений: 2)
Ответ на: комментарий от Moondancer

Что значит «не смекнул»? У меня LFS почти что Bleeding Edge, Fedora во многом позади. Это именно поломанные файлы, которые подсовывают нерабочие опции. Там вот такие вот фокусы. Рабочие опции такие:

< S["DLDSHARED"]="$(LD)"
< S["LIBRUBY_ALIASES"]="lib$(RUBY_SO_NAME).$(SOEXT)"
< S["LIBRUBY_DLDFLAGS"]="-Wl,--compress-debug-sections=zlib"
< S["LIBRUBY_LDSHARED"]="$(LD)"
< S["STRIP"]="strip"
< S["LDSHAREDXX"]=""
< S["LDSHARED"]="$(LD)"
< S["MJIT_LDSHARED"]="ld"
< S["X_FIBER_COROUTINE_H"]=""
< S["LDFLAGS"]="-L. -fstack-protector-strong"
А с новыми файлами вместо них подсовывается такое:
> S["DLDSHARED"]="$(CC) -shared"
> S["LIBRUBY_ALIASES"]="$(LIBRUBY_SONAME) lib$(RUBY_SO_NAME).$(SOEXT)"
> S["LIBRUBY_DLDFLAGS"]="-Wl,--compress-debug-sections=zlib -Wl,-soname,$(LIBRUBY_SONAME) "
> S["LIBRUBY_LDSHARED"]="$(CC) -shared"
> S["STRIP"]="strip -S -x"
> S["LDSHAREDXX"]="$(CXX) -shared"
> S["LDSHARED"]="$(CC) -shared"
> S["MJIT_LDSHARED"]="$(MJIT_CC) -shared"
> S["X_FIBER_COROUTINE_H"]="coroutine/amd64/Context.h"
> S["LDFLAGS"]="-L. -fstack-protector-strong -rdynamic -Wl,-export-dynamic"
Т.е. вместо «$(LD)» вписывается «$(CC) -shared», а вместо «ld» вписывается «$(MJIT_CC) -shared». Вот сборка и падает.

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

Использовать в именах переменных помимо латиницы другие символы, вроде как, разрешили только в свежей 2.6.0 версии. В 2.6.0 этот скрипт работает.

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

«получать кайф» от языка, в котором выражение «ough my god! they killed kenny!»

Ну да, больше кайфа было бы от

function() { ough(my(god(they(killed(kenny)))); }();

Да, действиельно, охуенно выглядит.

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

А он достаточно свободен? На нём же можно писать несвободные программы.

Кухонный нож достаточно безопасен? Им можно зарезать и расчленить.

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

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

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

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

Он значительно приятнее питона и есть свои интересные самобытные фишки (например блоки).

какие есть мотивы его использовать, кроме «нравится синтаксис»

На данный момент - никаких, как и питон.

no-such-file ★★★★★ ()