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

Можно подробнее и с примерами?

Это моё общее впечатление. Я походил по ссылкам из этого треда, почитал доки типа символы vs строки, про GC (в презентации), блоки... Например странно видеть что 0 это true в if-statement. Больше по памяти не скажу.

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

Вы пробовали coffeescript? Если да, то чем livescript лучше, в чем отличия? Почему именно livescript?

// с livescript не знаком, на coffeescript есть опыт только для фронтенда

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

В питоне не лучше

Это фигня, такой код в любом случае нельзя писать.

Вот за то что в питоне до сих пор нет string interpolation или так и не засунули встроенные в синтаксис регекспы убивает.

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

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

встроенные в синтаксис регекспы

Это какая-то зависимость после перла?

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

Вы пробовали coffeescript?

Нет, но livescript писался с оглядкой на него и поэтому более продвинут.

чем livescript лучше, в чем отличия?

Инет слабый, не могу скинуть ссылку. На оффсайте этот вопрос раскрыт (лучше гуглить т.к. навигация на сайте отвратная). Местами есть спорные решения, но в целом оно, имхо, лучше.

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

В каком смысле нельзя? Синтаксис и интерпретатор позволяют

Это нерабочий код который ты нигде не увидишь. Который ещё и ошибкой сыплет. Т.е. проблема есть, но она не встречается на практике.

Это какая-то зависимость после перла?

Пиши по существу.

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

Это какая-то зависимость после перла?

к хорошему привыкаешь быстро. перл всё же был намного продвинутее бейсика... ой, в смысле, питона.

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

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

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

к хорошему привыкаешь быстро. перл всё же был намного продвинутее бейсика... ой, в смысле, питона.

Почитайте дедушку Вирта на ночь. Глядишь, и желание глупости говорить пройдёт.

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

нееет, в питоне все очень правильно

tuple.pop()
len(tuple)
" ".join(tuple)

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

перл всё же был
был

Да вы издеваетесь, ёпть!

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

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

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

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

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

«Затем», что все япы пишутся больными на голову. Голова «болит» у каждого по разному. По этой причине один «пациент» не воспринимает бред другого и генерирует свой. Я вот не принимаю приватизацию отступов. Отступы это моё, где хочу там размещаю.
Страдают как обычно нормальные люди. На их компы валятся тонны скриптов, библиотек и багов. Несчастное железо хрипит и тужится пытаясь показать человеку фотки с крестин ребёнка друзей.

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

отладка кода включается в его написание.

Почему нет? Написал пару функций, загрузил их в repl, запустил, словил ошибок, вылетел в дебаггер, поправил, забыл, повторил.

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

Ты заврался уже до того, что 100% времени занимаешься отладкой

Ты бредишь.

Ты как был непрошибаемо тупым десять лет назад, так с тех пор не поумнел нисколько.

У тебя 10 лет баттхерта? Good, good.

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

Вот рассуждал бы ты о том, что знаешь, а не городил бы огороды.

Программу без IDE прочитать не можешь - может IDE за тебя еще код пишет, потому что мозгов самому не хватает? Все таки элегантный Ruby, а не Java где функция на десять листов.

Средства отладки в Ruby - одни из самых лучших, что есть сейчас. Чего стоит Pry, с помощью которого, можно подключиться к работающему приложению, и изучать его во время его работы. Такое, насколько я знаю, только в Erlang через аттач к процессам делать можно.

В Python'е такого не было, и скорее всего нет, да и не будет.

Что же касается Clojure функции в 1 экран. Тебе не кажется, что это не проблема языка, а просто у автора функции руки из жопы. В Ruby мире, есть рекомендация - если метод занимает больше 5-10 строк - разбивай его на более мелкие. И я думаю, такая рекомендация подходит к любому языку, только количество строк варьировать надо, в зависимости от языка (в той же Java в 10 строк не уместить ничего).

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

о том, что во всём цивилизованном мире основной праздник в году - это 25

O, RLY? Муслимы не отмечают, африканцы не отмечают, китайцы не отмечают. Да и в России так никогда не было. 7 января у православных рождество.

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

В коммон лиспе это все было в 80х, ну или около того времени.

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

Pry, с помощью которого, можно подключиться к работающему приложению, и изучать его во время его работы. Такое, насколько я знаю, только в Erlang через аттач к процессам делать можно.

Тот же gdb умеет присоединяться к процессам.

В Python'е такого не было, и скорее всего нет, да и не будет.

Вполне реализуемо: http://docs.celeryproject.org/en/latest/tutorials/debugging.html

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

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

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

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

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

избавление от религиозного мракобесия — это однозначное достижение коммунистов

Ибоваистену!

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

избавление от религиозного мракобесия — это однозначное достижение коммунистов

PHP - результат коммунизма.

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

Я рулетку только на ruby нашел, gruler или как-то так. Еще acoc был.. Пожалуй, все (из того, что использовал).

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

Нафига до сих пор используют однобайтовые кодировки? (комментарий)

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

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

я бОльшую часть времени провожу в дебаггере

А надо бы большую часть времени проводить за написанием юнит-тестов.

Немодно, лучше за изучением теории категорий.

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

а я про Хскель ничего и не говорил. Я вот использую одновременно как Python, так и Haskell

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

Слышь, умник, может теперь на php молиться? И на 1С.

Ваше право :-)

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

На моей памяти это первый релиз Ruby, в котором ничего не сломали.

Ну, сильно сломанный был 1.9.x, я не него с 1.8.7 так и не осилил тяжелый проект портировать, и висел он на 1.8, пока не вышел 2.0. На 2.0 почему-то оказалось перенести проще, чем на 1.9, почти всё заработало сразу, пару гемов пришлось обновить и в нескольких строках своего кода внести незначительные изменения.

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

Какие-то странные у тебя ассоциации с лиспом.

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

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

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

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

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

Это не правило, это просто твои предпочтения. Я считаю по-другому. Впрочем, бог с ними, по сравнению с форматированием строк через .format() это незначительная проблема.

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

ну у тебя проблемы. Строковый метод не нравится, регекспы отдельной библиотекой не нравятся :D

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

Желаю тебе всю жизнь программировать на жабаскрипте и его потомках

Эй, за что ты меня так? :( Я js ненавижу даже больше чем php. Но ты посмотри на livescript... Это же бомба! Там даже есть раскрытие аргументов в сигнатуре функции, ну где ты такое встретишь в ЯП для простых смертных? Или каррирование и копия prelude из хаскела? Короче, оч. грамотно задизайнено — функциональщина для простых смертных во все поля. Плюс ООП и такая фича как backcalls что особенно полезно для такого изврата как node.

Есть и весьма стрёмные фишки типа символ '-' разрешён в именах (для работы с css) или, скажем, «10km» будет интерпретировано как число 10. Однако мне это не мешает.

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