Спустя ровно 20 лет с момента основания проекта 24 февраля 1993 года представлен (http://www.ruby-lang.org/en/news/2013/02/24/ruby-2-0-0-p0-is... первый релиз новой ветки языка программирования Ruby 2.0 (http://www.ruby-lang.org). Ruby - мощный и динамический объектно-ориентированный язык программирования, отличающийся высокой эффективностью разработки программ и вобравший в себя лучшие черты Perl, Java, Python, Smalltalk, Eiffel, Ada и Lisp. Код проекта распространяется под лицензиями BSD ("2-clause BSDL") и "Ruby", которая ссылается на последний вариант лицензии GPL и полностью совместима с GPLv3. Ruby 2.0 продолжает развитие ветки 1.9.x и не содержит революционных изменений, и несмотря на ряд существенных новшеств, сохраняет полную обратную совместимость с Ruby 1.9.3. Также отмечается, что в отличие от 1.9.0 выпуск 2.0.0 является полностью стабильным и готовым для внедрения. По словам разработчиков, благодаря внимательному отношению к обеспечению совместимости с существующими приложениями, миграции с ветки 1.9 на 2.0 должна пройти заметно легче, чем с 1.8 на 1.9.
Популярные проекты, такие как Rails и tDiary, уже проверены на полную совместимость с Ruby 2.0. Тем не менее ряд изменений в новой версии может привести к нарушению совместимости, например, в качестве кодировки по умолчанию в Ruby 2.0 используется UTF-8; удалена поддержка библиотеки Iconv; нарушена совместимость ABI (требуется пересборка библиотек-расширений); #lines, #chars, #codepoints и #bytes теперь возвращают результат с типом Array вместо Enumerator; Object#inspect теперь всегда возвращает строковые значения.
Основные (http://blog.marc-andre.ca/2013/02/23/ruby-2-by-example/) улучшения (https://speakerdeck.com/shyouhei/whats-new-in-ruby-2-dot-0), добавленные (http://svn.ruby-lang.org/repos/ruby/tags/v2_0_0_0/NEWS) в Ruby 1.9.3:
- Ключевые слова в качестве аргументов: например, кроме "1.step(20, 2)" можно писать "1.step(by: 2, to: 20)" c определением метода как "def step(by: step, to: limit)", что значительно улучшает читаемость кода;
- Поддержка конструкции "Refinements" ( Module#refine) для повышения безопасности внесения изменений в код на лету ("monkey patching (http://en.wikipedia.org/wiki/Monkey_patch)"). Например, можно применить "рафинирование" к глобальному классу в контексте только определённого модуля, при этом изменения будут применены только к указанному контексту. Возможность отмечена как экспериментальная, поэтому не исключается, что логика работы в будущем может поменяться;
- Новый способ расширения классов при помощи конструкции Module#prepend, позволяющей добавить модуль в начало цепочки вызова;
- Поддержка литерала "%i", предназначенного для упрощённого создания массива символов ("KEYS = %i[foo bar baz]" вместо "KEYS = [:foo, :bar, :baz]");
- Поддержка переменной __dir__, которая возвращает путь к директории текущего запущенного файла (например, File.read(__dir__ + '/.config')
);
- Использование кодировки UTF-8 по умолчанию. При указании символов в кодировке UTF-8 в скриптах отныне больше нет необходимости в использовании таких ухищрений как спецкомментарий "# encoding: utf-8";
- Новые методы Enumerable#lazy (http://ruby-doc.org/core-2.0/Enumerable.html#method-i-lazy) и Enumerator::Lazy с реализацией
"ленивых" перечислений, не выполняемых сразу, а только при непосредстенной необходимости в данных. Lazy-перечисления работают примерно в два раза медленнее обычных;- Новые методы Enumerator#size (http://ruby-doc.org/core-2.0/Enumerator.html#method-i-size) и Range#size, позволяющие вычислить размер перечисления без его выполнения;
- Поддержка метода "#to_h" для преобразования класса в хэш (car = Car.new('Toyota', 'Prius', 2014); car.to_h # => {:make=>"Toyota", :model=>"Prius", :year=>2014});
- Переход на Onigmo (https://github.com/k-takata/Onigmo) (форк Oniguruma), новый движок для выполнения регулярных выражений;- API для обработки исключений в асинхронном режиме;
- Поддержка системы динамической отладки DTrace, при помощи которой можно организовать диагностику работы скрипта во время его выполнения;
- TracePoint - улучшенный API для трассировки приложений;
- Оптимизация производительности сборщика мусора, за счёт задействования техники маркировки по битовым картам;- Оптимизация работы конструкции Kernel#require, что позволило заметно ускорить запуск Rails;- Оптимизация работы виртуальной машины- Оптимизация производительности операций с плавающей запятой;
URL: http://www.ruby-lang.org/en/news/2013/02/24/ruby-2-0-0-p0-is.../
Новость: http://www.opennet.ru/opennews/art.shtml?num=36211