Подтвердить что ты не робот

Каковы основные/незначительные различия между ruby ​​1.9.2 и ruby ​​2.0?

Мне сказали, что ruby ​​1.9.2 - ruby ​​2.0, но ruby ​​1.9.3 планируется выпустить в ближайшем будущем, и он будет содержать некоторые улучшения производительности.

Итак, что они планируют использовать для 2.0? Будет ли это сильно отличаться от ruby ​​1.9.x?

4b9b3361

Ответ 1

Две функции, которые уже реализованы в YARV и которые, скорее всего, окажутся в Ruby 2.0, являются чертами (mix) и Module#prepend.

Метод mix, в отличие от текущего метода include, принимает список модулей и одновременно смешивает все из них, убедившись, что у них нет противоречивых методов. Это также дает вам возможность легко разрешать конфликты, если, например, два модуля, которые вы хотите смешивать, определяют один и тот же метод. Итак, в основном, в то время как метод include позволяет обрабатывать модуль как mixin, метод mix позволяет обрабатывать модуль как признак.

Module#prepend смешивает модуль с классом или модулем, опять же как и include, но вместо того, чтобы вставлять его в цепочку наследования чуть выше класса, он вставляет чуть ниже класса. Это означает, что методы в модуле могут переопределять методы в классе, и они могут делегировать методы переопределения с помощью super, оба из которых невозможны при использовании include. Это в основном делает alias_method_chain устаревшим.

Одна функция, которая обсуждалась в течение нескольких месяцев (или 10 лет, в зависимости от того, как вы считаете), - это уточнения. Уже более 10 лет обсуждается вопрос о том, как добавить рубиновый, безопасный патч обезьян в Ruby. То есть способ, которым я могу обезвредить основной класс, но только мой код видит, что патч обезьяны, другой код этого не делает. На протяжении многих лет лидером такого безопасного безопасного обезвреживания было пространство имен Selector, но в последнее время Classboxes уделяет большое внимание, а еще недавно была реализована прототипная реализация и спецификация Refinements, вариант Classboxes вперед.

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

Три функции, о которых я упоминал выше, предназначены для масштабирования для больших команд и больших кодовых баз. Некоторые предлагаемые функции для масштабирования больших размеров проблем и большего количества ядер представляют собой параллельные коллекции и параллельные реализации методов Enumerable, таких как map, а также лучшие абстракции concurrency, такие как фьючерсы, promises, агенты, актеры, каналы, объединяйте шаблоны или что-то в этом роде.