Вышел Ruby 2.0.0-p0

Мы рады сообщить о релизе Ruby 2.0.0-p0.

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

Наслаждайтесь программированием с Ruby 2.0.0!

Скачать

Что такое Ruby 2.0.0

Новые фичи

Кое-что из нового:

  • Новое в ядре языка
    • Для повышения гибкости при проектировании API добавлены keyword arguments
    • Новый способ расширения класса: Module#prepend
    • Литер %i, который служит для быстрого создания массивов символов
    • __dir__ возвращает имя директории, в которой происходит выполнение кода
    • Кодировка по-умолчанию теперь UTF-8, что делает ненужными магические комментарии (# encoding: utf-8 в начале файла)
  • Встроенные библиотеки
    • Enumerable#lazy и Enumerator::Lazy для ленивых вычислений (практически бесконечных)
    • Enumerator#size и Range#size для ленивого вычисления размера
    • #to_h для новой конвенции перевода в Hash
    • Onigmo – новый движок регулярных выражений (форк Onigurama)
    • API асинхронной обработки ошибок
  • Поддержка дебага
    • Поддержка DTrace, которая включает рантайм диагностику в продакшене
    • Улучшенный API для отслеживания через TracePoint
  • Улучшения в производительности
    • Оптимизации сборщика мусора с использованием bitmap marking
    • Оптимизация Kernel#require, как следствие запуск Rails намного быстрей
    • Оптимизации виртуальной машины, например, отправки метода
    • Операции с дробными числами

Можно добавить, что хотя как и эксперемент, но 2.0.0 включает Refinements, который добавляет новый концепт к модульности Ruby.

Также, просмотрите новости про другие изменения, улучшения и детали.

Совместимость

Создавая 2.0.0 мы также старались сохранить совместимость с 1.9. В итоге, намного проще перейти с 1.9 на 2.0 чем это было с 1.8 и 1.9 (Важные несовместимости будут описаны позже).

На самом деле, спасибо сторонним командам, которые сделали часть работы. Многие приложения, типа Rails и tDiary, присылали репорты о результатах работы на релиз-кандидате версии 2.0.0.

Документация

Мы также улучшили документацию, о чем нас просили многие рубисты. Мы добавили огромное количество rdoc документации для модулей и методов. 2.0.0 документирован примерно на 75%, когда 1.9.3 был документирован примерно на 60%. Также мы добавили описание синтаксиса Ruby. Вы можете попробовать:

ri ruby:syntax

Стабильность

Заметьте, что в отличие от 1.9.0, 2.0.0 – СТАБИЛЬНЫЙ релиз, даже не смотря на то что TEENY номер равен нулю. Всем авторам библиотек строго рекомендуется поддерживать версию 2.0.0. Как было сказано выше, это очень просто – мигрировать с 1.9 на 2.0.

Ruby 2.0.0 готов для практического использования и точно улучшит вашу Ruby жизнь.

Заметки

Вступительные статьи

Далее несколько вступительных статей о нововведения 2.0.0 от сторонних разработчиков:

Следующие статьи тоже полезны, но немного устарели из-за refinements:

А также, недавний выпуск "Rubyist Magazine" включает несколько статей, которые были написаны авторами нововведений, представляющих новые фичи в 2.0.0.

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

Несовместимости

Существует пять заметных несовместимостей, о которых мы знаем:

  • Кодировка по-умолчанию для скриптов ruby теперь UTF-8 [#6679]. Некоторые люди присылают сообщения, что это затрагивает существующие программы. Например некоторые программы бенчмаркинга стали слишком медленными [ruby-dev:46547].
  • Iconv был убран. Он был уже отмечен как устаревший, когда M17N был представлен в ruby 1.9. Используйте String#encode и другие методы вместо Iconv.
  • Был сбой ABI [ruby-core:48984]. Мы думаем, что обычные пользователи могут/должны просто переустановить библиотеки расширений. Вы должны быть осторожны: НЕ КОПИРУЙТЕ .so ИЛИ .bundle ФАЙЛЫ ИЗ 1.9.
  • #lines, #chars, #codepoints, #bytes теперь возвращают Array вместо Enumerator [#6670]. Это изменение позволяет вам избежать частой идеомы "lines.to_a". Используйте #each_line и другие методы, чтобы получить Enumerator.
  • Object#inspect всегда возвращает строку вида #<ClassName:0x…> вместо делегирования на #to_s. [#2152]

Также есть несколько сравнительно небольших несовместимостей: [ruby-core:49119]

Статус Refinements

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

Благодарности

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

Спасибо вам всем!