Вышел Ruby 2.0.0-p0

Опубликовал Yusuke Endoh 24-02-2013
Перевел: gazay

Мы рады сообщить о релизе 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. Даже неполный раздел благодарностей, только для нескольких нововведений был бы слишком большой, чтобы представить его здесь. Извините, но я оставлю здесь лишь ссылку на страницу со специальными благодарностями.

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

Последние новости

Вышел Ruby 3.4.11

Вышел Ruby 3.4.11. Это очередное обновление по графику релизов, содержащее исправления ошибок.

Опубликовал nagachika 23-09-2026

Больше новостей...