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)
Ответ на: комментарий от EnterpriseMobility

зачем нужен Ruby, если есть Python?

Python слишком безгеморойный.. неинтересно.. там меньше возможностей запутаться.

к примеру если ты в Рython вызываешь функцию foo(), то ты точно знаешь что вызываешь функцию foo() , а НЕ функцию self.foo(), и НЕ функцию bar_module.foo()

а в Ruby — если ты вызываешь foo() — то это может быть что угодно: или метод класса foo(), или импортированная функция foo() (при чём непонятно из какого модуля), или просто функция foo() определённая локально..

так намного прикольнее, и как-то по-хакерске!!:-)

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

Зачем нужен ты, если есть я?

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

руби тоже есть, и зачем теперь питон

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

что бы не делать отступы?

Но кому захочется быть такой быть ебанашкой?

anonymous
()

Определение функции (def) теперь возвращает символ ее названия

какой именно символ не уточняется?

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

так намного прикольнее, и как-то по-хакерске!!:-)

ОЧЕ ТОЛСТО!

проблема высосана

anonymous
()

А почему новогодний подарок? Сегодня вообще-то Рождество, а не НГ. А как известно, во всём западном мире Рождество празднуется как основной праздник в году. Именно перед Рождеством начинается сезон скидок и т.п. А Новый Год на Западе далеко не такой почитаемый праздник, как у нас в СНГ.

lucentcode ★★★★★
()

А документацию нормальную по языку сделали?

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

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

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

Строки по-дефолту мутабельны, да. Символы != строки. Методы == объекты, всё == объекты.

irb(main):001:0> def method ; end
=> :method
irb(main):002:0> method.class
=> NilClass
anonymous
()
Ответ на: комментарий от mashina

Не осилили придумать нормальное название.

Использование термина «символ» в таком смысле восходит еще к 1960-м годам и Лиспу.

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

Интересно:

irb(main):002:0> z = def foo; end
=> :foo
irb(main):003:0> z
=> :foo
irb(main):004:0> z.class
=> Symbol
irb(main):005:0> foo.class
=> NilClass

Не пойму — почему foo.class дает NilClass?

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

В документации пишут, что методы не объекты, но можно завернуть в объект. Зачем тогда def возвращает строку метода, а не его объект?

Символы != строки.

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

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

Использование термина «символ» в таком смысле восходит еще к 1960-м годам и Лиспу.

ок, взяли неудачный термин.

mashina ★★★★★
()

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

gwinn ★★★★
()

Братия во Христе, радостливые Вы мои! Во имя Всевышнего благославляю любую программу, написанную с использованием новофич языка Ruby 2.1, ибо возвернётся всеобъемлящая богоявленская удача программисту-скриптовику, не согрешившему, да написавшему во славу Божия. Аминь!

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

Не так изначально понял. NilClass потому что сам метод возвращает nil, попробуй объявить его например как

def foo; 'test' end

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

в этом вашем Руби даже в IntelliJ IDEA дебаггер что ли не работает?

ды чёрт из знает этих IDE и Дебаггеров :) .., я про случай когда смотришь на код — через web-браузер, например на web-сайте github :)

...изучаешь что и как оно делает....

затем тип, если всё подходит — то.. а дайка я набиру

$ sudo pacman -S ruby
...затем выполнили что нам нужно и через пол часа со спокойным состоянием
$ sudo pacman -Rs ruby
до следующего раза :)

а вы мне тут про дебаггеры какие-то говорите :-)

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

Символ - это любое имя, к которому можно обратиться (переменная, функция, etc).

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

а в Java-программах (в отличии от Ruby) — к тому же ещё и тонна кода :D

и какие-то XML-файлы бывает встречаются :)

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

зачем нужен Ruby, если есть Python?

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

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

зачем нужен Ruby, если есть Python?

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

А зачем ты думаешь об этом так часто?

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

в этом вашем Руби даже в IntelliJ IDEA дебаггер что ли не работает?

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

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