LINUX.ORG.RU

Ruby 2.4.0

 ,


0

5

25 декабря состоялся первый стабильный релиз ветки Ruby 2.4. В ней представлено много новых возможностей.

  • Улучшения хеш-таблицы (Владимир Макаров). Введены открытая адресация и упорядоченные в порядке добавления массивы. Это обсуждено со многими людьми, в особенности с Юрой Соколовым.
  • Привязка #irb: Старт сессии REPL по аналогии с binding.pry. Вместо логирования переменных множественными вызовами p можно подключить pry через binding.pry для запуска из приложения REPL и выполнения любого Ruby-кода. Теперь в поставку языка включён binding.irb, который позволяет проделать то же самое с irb.
  • Fixnum и Bignum объединены в Integer. Все C-расширения, затрагивающие классы Fixnum или Bignum, нужно поправить.
  • Поддержка соответствий заглавных символов Unicode. String/Symbol#upcase/downcase/swapcase/capitalize(!) теперь работают не только с ASCII.
  • Улучшения производительности. Array#max и Array#min больше не создают временный массив при некоторых условиях. Добавлен Regexp#match?, выполняющий проверку регулярного выражения без создания объекта с обратной ссылкой и изменения $~. Ускорен доступ к переменным экземпляров.

Улучшения отладки:

  • Thread#report_on_exception и Thread.report_on_exception. Ruby игнорирует исключения в потоках, если к ним явно не присоединён другой поток. С report_on_exception = true можно отследить, что поток умер из-за необработанного исключения. Присылайте отзывы, нужно ли включить эту опцию по умолчанию, равно как и report-on-GC, которая сообщает о сборке мусора в неприсоединённом потоке.
  • Отлов тупиков в потоках теперь отображает для потоков трассировку и зависимые потоки.

Другие значимые изменения с версии 2.3:

  • Поддержка OpenSSL 1.1.0 (прекращена поддержка 0.9.7 и более ранних).
  • Из stdlib убраны ext/tk и XMLRPC.

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

>>> Источник

Ломающие новости

И двух недель не прошло

Kilte ★★★★★ ()

Нужно! Самый адекватный скриптовый язык.

Exmor_RS ()

KOI8-R не поломали:

> cat hw8.rb
#!/usr/bin/ruby
# encoding: KOI8-R
print "Всё работает!\n"
> ruby ./hw8.rb
Всё работает!

А в Python'е 3.6.0 пришлось патчить pip.

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

Кто о чём, а saahriktu о КОИ8-Р. Вон давеча опенсорс-фанатика из модераторов выгнали, не хотите вакантное место модератора-фанатика занять? Будете всякие эмодзи тереть по 3.2 ☺

b-adblack- ()
Ответ на: комментарий от AnDoR

Что сломали на этот раз?

1) Fixnum и Bignum объединены в Integer. ВСЕ БИБЛИОТЕКИ нужно править и конпилировать. Теперь 70% RubyGems нерабочие!

2) Прекращена поддержка OpenSSL 0.9.7

3) Убраны ext/tk и XMLRPC.

И это только в Ruby 2.4.0, а сколько дров наломано предыдущими «модернизациями» с 2.0.X до 2.3.9...

Novator ★★★ ()

Прочитал как «Rust 2.4.0» и подумал: «Ну нихрена себе...».

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

ВСЕ БИБЛИОТЕКИ нужно править и конпилировать. Теперь 70% RubyGems нерабочие!

Истеричка, они работают, просто показыают warning'и

2.3.9

Последняя версия ветки 2.3 это 2.3.3, специалист.

сколько дров наломано предыдущими «модернизациями» с 2.0.X до 2.3.9...

Сколько? Почему я просто обновляю версию, пересобираю bundle и у меня все работает?

Alve ★★★★★ ()

Array#max и Array#min

По ссылке: «We often use an idiom [a, b].max because of the lack of Math.max(a, b)».

И поэтому вместо того, чтобы добавить max(a,b) теперь [a, b].max распознаётся компилятором и преобразуется в код без создания массива. Я недоумеваю...

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

ВСЕ БИБЛИОТЕКИ нужно править и конпилировать

эксперт, пля.

конпилировать

марш в школу, неуч

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

не хотите вакантное место модератора-фанатика занять?

Не, не хочу.

saahriktu ★★★★ ()

Зачем оно нужно когда есть python?

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

Чтобы был хоть какой-то язык ещё медленнее, чем python

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

Чтобы был хоть какой-то язык ещё медленнее, чем python

И на каких операциях он медленнее?

TDrive ★★★★★ ()

Ruby 2.4.0

Сперва прочитал «Rust 2.4.0», чуть Кондратий не хватил.

Подумал, какой же сейчас год.

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

Monk как бы намекает, что когда очевидная синтаксическая конструкция работает неочевидно, вернее, является неким особым случаем, исключением, то это странно выглядит.

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

Похоже, язык проектирует anonimous (или как там его, поехавшего на ООП)

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

Когда ты пишешь [a, b].max ты получаешь максимальное значение. Что тут не очевидного?

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

Похоже, язык проектирует anonimous (или как там его, поехавшего на ООП)

На ООП уже лет 30 как поехали посредственные провинциальные институтики, которые плодят бесчисленные орды его адептов. Они там любят все «наглядное», «осязаемое» и квадратно-гнездовое. Anonimus лишь такая же тупая посредственность.

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

Что не создается массив. Потому что «когда ты пишешь [a, b], ты ожидаешь получить массив, содержащий a и b, а не специальный случай синтаксического сахара».

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

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

arr = [a, b]; arr.max

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

когда ты пишешь [a, b] ты получаешь массив [a, b] когда ты пишешь [a, b].max/min ты получаешь максимальное или минимальное значение

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

Сколько? Почему я просто обновляю версию, пересобираю bundle и у меня все работает?

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

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

Как выглядит грамматика Руби после такого нововведения? Это ведь первая ласточка. Потом ведь будет какой-нибудь [a, b].random и т.д. И по-твоему тоже всё нормально будет?

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

может ты уже конкретные примеры приведешь?

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

Как выглядит грамматика Руби после такого нововведения? Это ведь первая ласточка. Потом ведь будет какой-нибудь [a, b].random и т.д. И по-твоему тоже всё нормально будет?

Грамматика руби ни как не изменилась же. Тебя смущает когда хвостовые рекурсии разворачиваются в циклы или когда компилятор C оптимизирует day = 60 * 60 * 24 в day = 86400? Вот в данном случае тоже самое.

TDrive ★★★★★ ()

Годно, нужно. А для GUI его по задумке не хотят использовать? Вроде только GTK был из адекватного, всё остальное какое-то совсем не того, сложилось ощущение.

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

Пример: количество костылей вокруг yaml-модуля в проекте puppet.

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

Он же просто делает require 'yaml' какие там костыли? Из того что реально сломали это например therubyracer там есть такой код

for type in [Class, Object, Array, Hash, String, Symbol, Time, Proc, Method, Fixnum] do
  type.class_eval do
    include V8::Conversion.const_get(type.name)
  end
end
А в ruby 2.4 Fixnum.name возвращает «Integer» Но это скорее исключение, и тут даже и не скажешь сразу кто виноват. И Это явно не 70% гемов.

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

Ну и че ты предлагаешь писать a.max(b).max(c).max(d) вместо [a, b, c, d].max? В руби нету метода max на числах, зато есть в модуле Enumerable который используется не только в массивах, а везде где есть метод each. Чел просто переопределил этот метод для массивов что бы он не использовал each + оптимизация

[a, b, ...].max/min -> a, b, c, opt_newarray_max/min
И все, весь старый код в котором были [a, b, ...].max/min просто будет работать быстрее.

Вы же с monk предлагаете запилить совершенно новый метод на числах, строках и вообще на всем, что можно сравнивать между собой + запилить в линтеры правило которое будет бить по рукам за [a, b, c].max и требовать a.max(b).max(c) и заставить всех переписать их старый код. Разумно...

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

1) Fixnum и Bignum объединены в Integer. ВСЕ БИБЛИОТЕКИ нужно править и конпилировать. Теперь 70% RubyGems нерабочие!

лучше как в питоне тащить две версии не забывая про кучу хлама который будет лежать ведь зачем переписывать под новую версию если и так работает?

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

Ну и че ты предлагаешь писать a.max(b).max(c).max(d) вместо [a, b, c, d].max?

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

>>> reduce(max, [1,3,0])
3
>>> 
Но я вопросов больше не имею, нечего флудить.

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

reduce(max, [1,3,0])

Omg. По смыслу здесь просится функция, max(1, 3, 0). Ну с рубистами бесполезно спорить, они не умеют в абстракции, просто тупой молебен на священную корову с переопределенными ногами.

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

По смыслу здесь просится функция, max(1, 3, 0)

а теперь код подобной функции в студию. или для 100500 функций для разной длины?

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

Вместо массива можно использовать кортеж. Это экономнее.

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

Ну вот, а в руби ты просто всегда используешь массив, а интерпретатор сам решает как это оптимизировать.

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

max(1, 3, 0)

Рубист тебе ответит, что это одни яйца с [a, b].max

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

Код этой функции в исходниках Python, поскольку это встроенная функция.

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

В нормальном ООП пишут не [a,b].max, а a.max(b)

a.max(b) - это нифига не очевидно. Что здесь к чему? Это нужно специально узнавать в доках.

[1, 2, 3, 4, 5].max - конструкция очевидная.
max(1, 2, 3, 4, 5) - вот такой вариант тоже очевиден.

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

max(1, 3, 0)

Рубист тебе ответит, что это одни яйца с [a, b].

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

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