LINUX.ORG.RU

Релиз Ruby 2.1

 


5

9

Прекрасный новогодний подарок преподнес Matz всем любителям и профессионалам программирования на языке Ruby — релиз Ruby 2.1. В целом новый выпуск языка и среды исполнения написанного на нем кода продолжает эволюционное развитие Ruby и практически не вносит кардинальных или ломающих изменений. Кроме того, что стандартный интерпретатор стал работать быстрее, заявлены следующие отличительные особенности Ruby 2.1:

  • Кэширование названий методов. Теперь когда интерпретатор встречает название какого-то метода объекта, он производит поиск этого метода, после чего сохраняет указатель на него в байткоде. Если у вас есть код, в котором для объектов одного и того же типа часто вызывается один и тот же метод, работа этого участка программы будет ускорена. Для проверки корректности сохраненного значения в кэше MRI использует внутренние счетчики потенциально опасных в плане инвалидации кэшированного метода действий.
  • Поддержка профайлинга кода на уровне MRI. Вы можете измерять производительность вашего кода и отслеживать работу сборщика мусора (благодаря подписке на события запуска/останова сборщика мусора и создания/удаления объектов).
  • Обновленный сборщик мусора RGenGC (с поколениями). Более подробно с ним можно ознакомиться в захватывающей презентации [pdf] с RubyConf.
  • Добавлены суффиксы i и r для записи комплексных чисел.
  • Определение функции (def) теперь возвращает символ ее названия вместо nil.
  • Работа над неоднозначностью объявления refinements, то есть расширения модуля или класса в пределах одного локального файла. Подробнее [pdf].
  • Наконец-то Array#to_h — создание хэша из массива.
  • Сокращение записи «замороженных» строк (str = «mystring"f).
  • Для ускорения операций над очень большими числами используется GMP (The GNU Multiple Precision Arithmetic Library).
  • Обновлены стандартные библиотеки BigDecimal, JSON, NKF, Rake, RubyGems и RDoc.
  • Удалена поддержка из коробки curses (гем curses теперь при необходимости надо установить отдельно).
  • А также многое другое! Подробный список изменений прилагается.

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

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

★★★★★

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

Я об этом и не думаю

Но почему-то пишешь об этом %)

Никогда не понимал зачем нужны навороченные IDE для скриптовых языков. Че там дебажить?

Вот когда поймешь, что скриптовые языки - это языки программирования, поймешь.

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

Но почему-то пишешь об этом %)

Просто констатировал факт.

Вот когда поймешь, что скриптовые языки - это языки программирования, поймешь.

Дешевый понт.

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

при чем тут слово «скриптовые»? Кроме всего прочего, у Руби еще и сложность дебага сложнее на порядок, чем у явы, ибо это Руби.

Безотносительно дискуссии о Руби - вчера пытался понять функцию на Кложуре размером всего лишь в 1 экран текста. Несколько часов подряд. Обычный дебаг там не поможет, ведь это по сути одна функция, а не куча императивных циклов, которые можно дебажить отдельно и записывать на бумажке значения счетчиков в for'ах. Леденит душу, сколько банок сгущенки надо съесть, чтобы асилить полноценное приложение, написанное в таком стиле. Тем не менее, Кложура - это божественно, это надо юзать везде.

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

Тем не менее, Кложура - это божественно, это надо юзать везде.

а Скала?

она же не такая лиспообразная.. это ведь хорошо..? :)

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

Просто констатировал факт.

Просто написал о том, чего не знаешь.

Вот когда поймешь, что скриптовые языки - это языки программирования, поймешь.

Дешевый понт.

Ничего, поймешь со временем. Может быть.

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

Просто написал о том, чего не знаешь.

Кажется тебя это сильно задело, значит я не далек от правды.

Ничего, поймешь со временем. Может быть.

Но ты судя по всему сам ничего по теме сказать не можешь, тоже на пути к просвещению?

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

Кажется тебя это сильно задело

Крестись, когда кажется.

Но ты судя по всему сам ничего по теме сказать не можешь, тоже на пути к просвещению?

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

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

при чем тут слово «скриптовые»?

Область применения разная. Например программирование на java без эклипса мне сложно представить, он и доступные методы объекта покажет, и библиотеки подключит, и импорты расставит, и в jar упакует... Руками все это делать не реально утомительно.
А на руби что пишут? Скрипты максимум 1к-2к строчек да сайты на рельсах, в крайнем случае irb помогает. Покрайней мере я не встречал на руби такие же глобальные проекты как на java.

Кроме всего прочего, у Руби еще и сложность дебага сложнее на порядок, чем у явы, ибо это Руби.

Жертва ради скорости и удобства написания скриптов.

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

Крестись, когда кажется.

Я не суеверный.

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

Релиз Ruby 2.1 (комментарий)

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

Крестись, когда кажется.

Я не суеверный.

А это как подкова на счастье - помогает даже не суеверным.

Релиз Ruby 2.1 (комментарий)

Это не область применения, это твое личное представление о ней. Впрочем, Ruby on Rails тоже кто-то должен был написать, а это не 1-2к строк тривиального кода.

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

Кроме всего прочего, у Руби еще и сложность дебага сложнее на порядок, чем у явы, ибо это Руби.

Яблоки лучше апельсинов потому что они яблоки. Эталонный аргумент лоровца. Нужно срочно в кунсткамеру :}

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

хз, я бОльшую часть времени провожу в дебаггере, а теперь вот еще и в REPLе. Когда дебаггер становится слишком затратным - нужно писать автотесты. И использовать языки с возможностью встроенной верификации (см. Checker Framework для жавы). В этом суть - компьютер делает компьютерную работу, моделирует выполнение программы. Человек делает человеческую работу - дает задачи. Неразумно самому читать исходники и моделировать исполнение программы в собственной голове, если можно нажать кнопку, и копмьютер сделает всё гораздо быстрее и лучше. Три строчки еще (может быть) можно удержать в своем собственном уме, но 1к-2к - увольте, пусть это разгребает какой-нибудь компьютер.

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

просто не хочу напоминать срачегонный тезис, что идиоматическое использование Руби - это функциональщина и «ехал DSL через DSL. Видит DSL, в DSL - DSL» и дальше по тексту. Жопу десять раз порвешь преде чем поймешь, чо здесь вообще происходит. А Ява тупая как автомат калашникова и простая как три копейки, в ней такого обычно не делают ибо не могут.

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

Впрочем, Ruby on Rails тоже кто-то должен был написать, а это не 1-2к строк тривиального кода.

Это 8к строчек из которых наверно 80% всякие однотипные библиотеки, а не не пойми как устроенная логика.

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

И использовать языки с возможностью встроенной верификации

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

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

То есть если тебе приходится разбираться в большом проекте написанном на руби это не руби виноват, виноват или руководитель проекта который неправильно выбрал ЯП или программист который через *** написал или ты в том что у тебя недостаточная квалификация.

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

Это 8к строчек

SLOCCount имеет сказать следующее:

SLOC	Directory	SLOC-by-Language (Sorted)
54505   activerecord    ruby=54505
36043   actionpack      ruby=36000,yacc=43
26141   activesupport   ruby=26141
22617   actionview      ruby=22617
17254   railties        ruby=17254
5722    activemodel     ruby=5722
2021    actionmailer    ruby=2021
1043    guides          ruby=1043
102     tasks           ruby=102
96      ci              ruby=96
64      tools           ruby=64

Totals grouped by language (dominant language first):
ruby:        165580 (99.97%)
yacc:            43 (0.03%)

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

Отладчик полезен даже для 20 строк нетривиального кода.

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

хз откуда ты это взял, я вот тут http://rubyforge.org/frs/?group_id=307 скачал gem и посчитал.

Отладчик полезен даже для 20 строк нетривиального кода.

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

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

Еще и не правильно посчитал)

Totals grouped by language (dominant language first):
ruby:          5728 (100.00%)
6к строчек, но это не принципиально.

TDrive ★★★★★
()

Сокращение записи «замороженных» строк (str = «mystring"f)

От этого синтаксиса уже отказались по ряду причин (в превью версиях он уже не работал), замораживать надо так:

'foo'.freeze
Apple-ch ★★
()
Ответ на: комментарий от stevejobs

Ява тупая как автомат калашникова и простая как три копейки

Видимо, поэтому пацаны городят хрени навроде AbstractInterruptibleBatchPreparedStatementSetter — чтобы жизнь мёдом не казалась :D

Apple-ch ★★
()
Ответ на: комментарий от Etch

Таки...

... о языке Ребе и его кошерности ещё в таком тоне ни кто не высказывался. Яхве недоволен...

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

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

Необходим-необходим. «Puts Driven Development» — это тоже особый вид отладчика(специально для тех, кто любит все делать вручную). Кстати, вот в этом докладе продемонстрирован процесс работы с отладчиком с помощью паразитарной кастрации крабов.

я вот тут http://rubyforge.org/frs/?group_id=307 скачал gem

Толсто.

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

Это не костыли, когда разработчик их добровольно пользует, да ещё и бегает быстрее чем без них.

RedPossum ★★★★★
()
Последнее исправление: RedPossum (всего исправлений: 1)

Моя твоя не понимая

В целом новый выпуск языка и среды исполнения написанного на нем кода продолжает эволюционное развитие Ruby и практически не вносит кардинальных или ломающих изменений.

Это предложение написал депутат ЛДПР.

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

static public interface OLOLO{Object invokePrim(Object arg0, long arg1, Object arg2, long arg3);}

Что-то в этом есть. =)

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

Пистон недостаточно илитен,

это мог сказать только анонимус

kto_tama ★★★★★
()

По некоторым бенчмаркам http://miguelcamba.com/blog/2013/10/05/benchmarking-the-ruby-2-dot-1-and-rubi... этот руби весьма быстр, и это прекрасно, господа!

Сокращение записи «замороженных» строк (str = «mystring"f).

https://bugs.ruby-lang.org/issues/9042 Похоже отказались в последний момент. Так что просто оптимизация: не происходит повторной инициализации одних и тех же строк.

irb(main):001:0> 'hello'.freeze.object_id
=> 69897571027040
irb(main):002:0> 'hello'.freeze.object_id
=> 69897571027040
Эх.. я был бы рад, если бы результат символьной конструкции заменили на это. Задолбали символы - никакого толку, любая сериализация сплошной гемор.

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

По указанным бенчмаркам быстр не этот руби, а рубиниус, который наконец-то избавился от багов и ГОТОВ, а стало быть нужен!

Apple-ch ★★
()
Ответ на: комментарий от stevejobs

А Ява тупая как автомат
и простая как три копейки
я бОльшую часть времени провожу в дебаггере
Три строчки еще (может быть) можно удержать в своем собственном уме, но 1к-2к - увольте

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

special-k ★★★★
()
Ответ на: комментарий от Apple-ch

И этот тоже. Рубиниус - да, правда должен констатировать в нем утечку памяти, которая проявилась у меня..

На обычных операциях в одном потоке (вызов методов, создание/заполнение массивов/хешей и т.д.) mri проявляет себя лучше.

special-k ★★★★
()

Поздравляю всех рубистов, рубильников и сочувствующих. Матц - Будда.

anonymous
()

Добавлены суффиксы i и r для записи комплексных чисел.

Скорее это постфиксы, и r, на самом деле, для записи десятичных дробей

irb(main):001:0> 0.1r
=> (1/10)

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

Если скорость руби вырастет еще в пару-тройку раз - ява будет ненужна совсем.

?

скорость руби
в пару-тройку раз

жаль, только жить в эту пору чудесную не доведётся ни мне, ни тебе...

Virtuos86 ★★★★★
()

Какой есть годный десктопный софт, написанный на рубях, если не считать тучу хипстерских веб-сайтиков? Даже на дурном Python'e умудрились написать хотя бы одну отличную программу: Mercurial. А чем может похвастаться Ruby-сообщество?

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

Из того, чем лично я пользуюсь, — ЛаймЧат (клиент для ирки).

Apple-ch ★★
()
Ответ на: комментарий от special-k

На обычных операциях в одном потоке (вызов методов, создание/заполнение массивов/хешей и т.д.) mri проявляет себя лучше.

Преимущество МРИ в том, что он быстрее стартует. Поэтому для разработки на рельсах, например, он выигрывает у Рубиниуса раза в два по моим наблюдениям.

Apple-ch ★★
()

В каждом аннонсе про новую версию Руби пишется, что интерпертатор опять стал быстрее. Он уже уверенно обгоняет Питон или еще не ясно?

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