Две функции, которые уже реализованы в YARV и, скорее всего, в конечном итоге появятся в Ruby 2.0, - это черты (mix
) и Module#prepend
.
Метод mix
, в отличие от текущего метода include
, принимает список модулей и смешивает их все одновременно, следя за тем, чтобы у них не было конфликтующих методов. Это также дает вам возможность легко разрешать конфликты, например, два модуля, которые вы хотите смешать, определяют один и тот же метод. Таким образом, в принципе, хотя метод include
позволяет вам рассматривать модуль как миксин, метод mix
позволяет трактовать модуль как черту.
Module#prepend
смешивает модуль с классом или модулем, опять же, как include
, но вместо того, чтобы вставить его в цепочку наследования просто над классом, он вставляет просто ниже класс. Это означает, что методы в модуле могут переопределять методы в классе, и они могут делегировать переопределенным методам с super
, что невозможно при использовании include
. Это в основном делает alias_method_chain
устаревшим.
Одной из функций, которая обсуждалась в течение пары месяцев (или 10 лет, в зависимости от того, как вы считаете), являются уточнения. Уже более 10 лет ведется дискуссия о том, как добавить в Ruby безопасный безопасный патч для обезьян. То есть способ, которым я могу обезьяна исправить патч базового класса, но только мой код видит это обезьяна патч, другой код не видит. В течение многих лет лидером для такого рода безопасных исправлений для обезьян были пространства имен Selector, однако в последнее время Classboxes привлекали к себе большое внимание, и еще совсем недавно была представлена прототипная реализация и спецификация Refinements, вариант Classboxes. вперед.
Вообще говоря, главной темой Ruby 2.0 является масштабируемость: масштабирование вверх для более крупных команд, больших кодовых баз, больших размеров задач, больших машин, большего количества ядер. Но также масштабирование вниз для небольших машин, таких как встроенные устройства.
Три функции, которые я упомянул выше, предназначены для масштабирования на большие команды и большие кодовые базы. Некоторые предлагаемые функции для масштабирования до более крупных размеров задач и большего количества ядер - это параллельные коллекции и параллельные реализации методов Enumerable
, таких как map
, а также улучшенные абстракции параллелизма, такие как будущее, обещания, агенты, актеры, каналы, шаблоны соединения или что-то в этом роде.