Ruby 2.0 скорее эволюция, чем революция 20/10/2011
Приветстую всех! Питер Купер опубликовал в своем блоге о руби rubyinside.com очень инетересный пост о старте работ над ruby 2.0. Предлагаю вашему вниманию его перевод.
19 октября, Матц выложил коммит в MRI репозитарий ruby, в котором переключил версию основной ветки разработки с версии 1.9.4 на 2.0.0, тем самым начав работы над реализацией давно обсуждаемых идей в Ruby 2.0.
Что означает 2.0?
Ruby 2.0 это следующая основная версия релиза MRI ruby, официальной реализации ruby.
Ruby 1.9.3 скоро выйдет, а версия 1.9.4 находится в активной разработке (сейчас она перемещена в другую ветку, т.к основной стала 2.0.0). Мы недавно узнали, что версия 2.0 пойдет следующей после 1.9.4.
Станет ли Ruby 2.0 большим шагом вперед?
Нет. Пока 2.0 будет включать некоторые изменения синтаксиса, несколько новых доработок и улучшений (см. ниже). Ожидается сохранение обратной совместимости с 1.9.3. Матц заявил, что эти изменения менее значительны чем те, что были сделаны при переходе с 1.8 на 1.9.
Матц: Версия повысится до 2.0, однако изменения небольшие. Меньше тех, что были сделаны в 1.9.
Разговоры вокруг возможностей Ruby 2.0 длятся уже несколько лет (в основном, на ruby-talk и в списках рассылки ruby-core) и изначально шла речь о значительных изменениях синтаксиса и обратной несовместимости. Все поменялось с выходом в свет версии 1.9 (изначально она была только для разработки) и 2.0 скорее эволюция, чем революция.
Что нового будет (возможно) в ruby 2.0?
Точного ответа пока еще нет. На текущий момент новые идеи и возможности активно предлагаются и обсуждаются. Вот список тех возможностей которые уже планируется включить в 2.0 :
Ключевые аргументы
В своем выступлении Ruby 2.0: Чего мы хотим достичь в ближайшем будущем (от 2010 года), Матц показывал пример, в котором 1.step(20, 2)
можно было написать так 1.step(by: 2, to:20)
с объявленным методом def step(by: step, to: limit)
.
Реализация ключевых аргументов от Юсуки Эндо (Yusuke Endoh) вызвала дискуссию насчет включения в 2.0.0, так что этот вопрос сейчас активно решается.
Экспорт/импорт байт-кода
Версия ruby 1.9 работает на виртуальной машине YARV, 2.0 будет работать на ней же, но ожидается, что эта версия сделает более простым сохранение предварительно скомпилированных скриптов в байт-код и его непосредственное выполнение. Выполнение предварительно скомпилированного байт-кода позволит избежать этапа парсинга, присущего процессу интерпретации. Если вы пользуетесь Rubinius или JRuby, то скорее всего уже знакомы с данной концепцией.
Усовершенствования (refinements)
Усовершенствования это конструкции для более безопасного обезъяннего патчинга (monkey patching, на самом деле к обезъянам он не имеет никакого отношения, прим. переводчика). По существу, вы можете усовершенствовать глобальный класс в контексте конкретного модуля, в результате чего обезъяний патчинг будет применятся в определенном контексте. Иегуда Катц написал отличную статью на эту тему в прошлом году.
Усовершенствования противоречивы… Негативно отражаясь на производительности они становятся менее желаемыми в 2.0, однако я не верю, что их можно списывать со счетов. Тем не менее, некоторые модификации пространства имен класса скорее всего реализуют их. Другая реализация называется ‘типажи’ (traits) и была также продемонстрирована Матцем в видео (см. ссылку выше).
Стандартные библиотеки станут гемами
В твиттере, 20 октября, Аарон ‘tenderlove’ Паттерсон (Aaron Patterson) из команды разработчиков ядра ruby сказал, что стандартные библиотеки в ruby 2.0 будут гемами, хотя некоторые из них по-прежнему останутся в ядре (т.е. не нужно будет загружать их дополнительно).
И еще…
Как я уже говорил, слухи летают в воздухе, но идеи относительно ruby 2.0 должны начать воплощаться в жизнь в ближайшие годы. Пару недель назад, Коичи Сасада (Koichi Sasada) выложил опросник об основных особенностях ruby 2.0 в лист рассылки ruby-core и предложил чиателям расширить его. Это не просто список возможностей, которые будут в ruby 2.0, это попытка узнать, что необходимо людям.
Изначальная версия списка Коичи:
- Еще более понятный синтаксис
- Экспорт в байт-код
- Сборщик мусора (GC) для символов
- Отсутствие биндинга Proc
- Макросы
- Получение дерева разбора
- Доступ к исходному коду
- Cross thread Fiber
- Стандартный гем
- Обзор всех стандартных библиотек
- Отсуствие устаревших библиотек
- Улучшеный Proc#curry
- Неблокирующий ввод/вывод
- Dtrace
- API сборщика мусора (заменяемый сборщик мусора)
Посколько работа над ruby 2.0 продолжается, я буду регулярно освещать основные события и рассказывать о новых возможностях на rubyinside.com, смотрите в оба.