The OpenNET Project / Index page

[ новости /+++ | форум | wiki | теги | ]

В день двадцатилетия проекта представлен релиз языка программирования Ruby 2.0

24.02.2013 19:11

Спустя ровно 20 лет с момента основания проекта представлен первый релиз новой ветки языка программирования Ruby 2.0. 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 на 2.0 должна пройти заметно легче, чем с 1.8 на 1.9. Также отмечается, что в отличие от 1.9.0 выпуск 2.0.0 является полностью стабильным и готовым для повсеместного внедрения.

Основные улучшения, добавленные в Ruby 2.0.0:

  • Ключевые слова в качестве аргументов: например, кроме "1.step(20, 2)" можно писать "1.step(by: 2, to: 20)" c определением метода как "def step(by: step, to: limit)", что значительно улучшает читаемость кода;
  • Поддержка конструкции "Refinements" ( Module#refine) для повышения безопасности внесения изменений в код на лету ("monkey patching"). Например, можно применить "уточнение" к глобальному классу в контексте только определённого модуля, при этом изменения будут применены только к указанному контексту. Возможность отмечена как экспериментальная, поэтому не исключается, что логика работы в будущем может поменяться;
  • Новый способ расширения классов при помощи конструкции 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 и Enumerator::Lazy с реализацией "ленивых" перечислений, не выполняемых сразу, а только при непосредственной необходимости в данных. Lazy-перечисления работают примерно в два раза медленнее обычных;
  • Новые методы Enumerator#size и Range#size, позволяющие вычислить размер перечисления до того как оно будет выполнено;
  • Поддержка метода "#to_h" для преобразования класса в хэш (car = Car.new('Toyota', 'Prius', 2014); car.to_h # => {:make=>"Toyota", :model=>"Prius", :year=>2014});
  • Использование символа "_" перед именами неиспользуемых переменных, приводит к отсутствию вывода соответствующего предупреждения ( "warning: assigned but unused variable");
  • Новые методы Array#bsearch и Range#bsearch для выполнения бинарного поиска (ary = [0, 4, 7, 10, 12]; ary.bsearch {|x| x >= 6 });
  • Переход на Onigmo (форк Oniguruma), новый движок для выполнения регулярных выражений;
  • API для обработки исключений в асинхронном режиме;
  • Поддержка системы динамической отладки DTrace, при помощи которой можно организовать диагностику работы немодифицированного скрипта во время его выполнения;
  • TracePoint - улучшенный API для трассировки приложений;
  • Оптимизация производительности сборщика мусора, например, задействование техники маркировки по битовым картам;
  • Оптимизация работы конструкции Kernel#require, что позволило заметно ускорить запуск Rails;
  • Оптимизация работы виртуальной машины;
  • Оптимизация производительности операций с плавающей запятой;

Такие популярные проекты, как Rails и tDiary, уже проверены на полную совместимость с Ruby 2.0. Тем не менее, ряд изменений в новой версии приводит к появлению отдельных несовместимостей:

  • кодировкой по умолчанию является UTF-8;
  • удалена поддержка библиотеки Iconv;
  • нарушена совместимость ABI (требуется пересборка библиотек-расширений);
  • #lines, #chars, #codepoints и #bytes теперь возвращают результат с типом Array вместо Enumerator;
  • Object#inspect теперь всегда возвращает строковые значения.


  1. Главная ссылка к новости (http://www.ruby-lang.org/en/ne...)
  2. OpenNews: Первый выпуск Topaz, высокопроизводительной реализации Ruby, написанной на языке Python
  3. OpenNews: Релиз JRuby 1.7.0
  4. OpenNews: Ruby 1.8.7 перешёл на завершающую стадию поддержки
  5. OpenNews: Релиз языка программирования Ruby 1.9.3
  6. OpenNews: Создатель языка Ruby сообщил, что работает над диалектом языка для мобильных устройств
Лицензия: CC-BY
Тип: Интересно / Программы
Короткая ссылка: https://opennet.ru/36211-ruby
Ключевые слова: ruby
При перепечатке указание ссылки на opennet.ru обязательно


Обсуждение (37) Ajax | 1 уровень | Линейный | +/- | Раскрыть всё | RSS
  • 1.1, Аноним (-), 20:27, 24/02/2013 [ответить] [﹢﹢﹢] [ · · · ]  
  • +2 +/
    Ура, товарищи!
     
  • 1.2, Аноним (-), 20:27, 24/02/2013 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Ура, ура, ура!
     
     
     
     
     
    Часть нити удалена модератором

  • 5.29, Аноним (-), 09:39, 25/02/2013 [ответить]  
  • +/
    По твоей же ссылке
    > Фонетическая транскрипция:ˈruːbi
     

  • 1.3, Аноним (-), 20:44, 24/02/2013 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    А рельсы всё-таки поломало :3
    Из-за того, что видимость Kernel#initialize_dup сменили с public на private.
     
     
  • 2.28, Andrey Mitrofanov (?), 09:34, 25/02/2013 [^] [^^] [^^^] [ответить]  
  • +2 +/
    > А рельсы всё-таки поломало :3

    Как, ты ещё не вкурсе, что они 4 раза за минорный релиз переписывают список рекомендованных версий руби на своей давнлоад пейдж?? Тогда поделом же.

     
     
  • 3.39, Аноним (-), 14:09, 25/02/2013 [^] [^^] [^^^] [ответить]  
  • +/
    Нет, не слышал. Лишь бы на новую версию языка не 5 лет мигрировали, как питонолюбы, остальное неважно.
     
  • 2.43, Арс (?), 19:13, 25/02/2013 [^] [^^] [^^^] [ответить]  
  • +/
    Фикс то уже давно есть в edge, но непонятно почему его они его не добавили в 3.х перед выпуском релиза руби. :(
     

  • 1.4, Kriss (?), 20:59, 24/02/2013 [ответить] [﹢﹢﹢] [ · · · ]  
  • +5 +/
    Вообще такого не может быть чтобы Руби было 20 лет
     
     
  • 2.5, Аноним (-), 21:01, 24/02/2013 [^] [^^] [^^^] [ответить]  
  • +5 +/
    Отрицание реальности - это так весело.
     
  • 2.6, V (??), 21:12, 24/02/2013 [^] [^^] [^^^] [ответить]  
  • +4 +/
    Да о нём общественность узнала только году в 2008-м, и то только благодаря rails и навязчивой рекламе MVC.
     
     
  • 3.9, exn (??), 22:01, 24/02/2013 [^] [^^] [^^^] [ответить]  
  • +/
    2006м
     
     
  • 4.36, Michael Shigorin (ok), 11:19, 25/02/2013 [^] [^^] [^^^] [ответить]  
  • +2 +/
    > 2006м

    Общественность -- начиная с 2000, поскольку вышла книжка Programming Ruby (http://ruby.osdn.org.ua/pickaxe -- в альте местами водится как ruby-doc-extra).  Вот до Энди с Дэйвом и впрямь приходилось сильно сложнее, насколько понимаю...

    PS: опять забыл, что запятые к ссылкам прилипают; объехал.

     
  • 3.16, kemm (?), 22:45, 24/02/2013 [^] [^^] [^^^] [ответить]  
  • +2 +/
    Вот и выросло поколение... (c)

    Фришный portupgrade появился году так в 2000ом примерно (в портах с 2001го точно). Намекнуть, на чём он написан?

     
     
  • 4.25, Аноним (-), 08:12, 25/02/2013 [^] [^^] [^^^] [ответить]  
  • +4 +/
    Слишком долго мы терпели это г-но, слава богу теперь есть portmaster.
     
     
  • 5.41, Клыкастый (ok), 16:09, 25/02/2013 [^] [^^] [^^^] [ответить]  
  • +1 +/
    ну что сказать... portmaster, как ни крути, практичнее и красивее.
     
  • 2.11, Anonim (??), 22:10, 24/02/2013 [^] [^^] [^^^] [ответить]  
  • +1 +/
    "Ruby was conceived on February 24, 1993 by Yukihiro Matsumoto" (c) http://en.wikipedia.org/wiki/Ruby_(programming_language)
     
     
  • 3.35, лох (?), 10:35, 25/02/2013 [^] [^^] [^^^] [ответить]  
  • +/
    conceive -- задумать, запланировать, имеет также значение "зачать".
    или мне кажется, или возраст ребёнка обычно не от зачатия измеряют? а то так можно  сказать, что вася из деревни мухоловщина запланировал руби ещё за 15 лет до мацумото.
     

  • 1.7, Аноним (-), 21:37, 24/02/2013 [ответить] [﹢﹢﹢] [ · · · ]  
  • +2 +/
    tDiary -- популярный проект?
     
  • 1.8, Аноним (-), 21:54, 24/02/2013 [ответить] [﹢﹢﹢] [ · · · ]  
  • –4 +/
    > "1.step(by: 2, to: 20)"

    Вот это я понимаю, ООП головного мозга. Единичка? Объект!

     
     
  • 2.10, exn (??), 22:01, 24/02/2013 [^] [^^] [^^^] [ответить]  
  • –1 +/
    dsl
     
  • 2.13, антонимус (?), 22:22, 24/02/2013 [^] [^^] [^^^] [ответить]  
  • +2 +/
    Будешь смеяться, но даже nil - объект. И всё это вместе - скрипт, а не компилируемое приложение. Но ведь тебя и не просят отказываться от любимого C
     
  • 2.18, all_glory_to_the_hypnotoad (ok), 01:29, 25/02/2013 [^] [^^] [^^^] [ответить]  
  • –5 +/
    что число объект это вполне нормально, но полный треш давать возможность прямо у литерала числа вызывать метод. И, конечно, тупо запихивать генераторы и прочую хрень в методы числа. В общем, не ООП это, а помесь функциональщины, перла и привычки вносить фичи в ЯП в стиле php
     
     
  • 3.19, Аноним (-), 01:39, 25/02/2013 [^] [^^] [^^^] [ответить]  
  • +4 +/
    > полный треш давать возможность прямо у литерала числа вызывать метод

    Почему? Недостаточно паршиво для тебя?

     
  • 3.22, arisu (ok), 06:45, 25/02/2013 [^] [^^] [^^^] [ответить]  
  • +5 +/
    Алан Кей стыдливо забивается в угол и краснеет.
     
  • 3.37, Аноним (-), 11:21, 25/02/2013 [^] [^^] [^^^] [ответить]  
  • +2 +/
    > 3.times { |e| puts e }

    0
    1
    2
    => 3
    Я конечно не фанат ООП, но по мне, так вполне себе вменяемо

     
  • 3.40, Аноним (-), 15:38, 25/02/2013 [^] [^^] [^^^] [ответить]  
  • +/
    В перле-то как раз по уму сделано.

    http://perldoc.perl.org/perltie.html / Tying scalars

     
     
  • 4.42, Аноним (-), 16:13, 25/02/2013 [^] [^^] [^^^] [ответить]  
  • +/
    То, о чем вы пишете, это "увязывание" переменной и класса Perl (прошу извинения, если я ошибаюсь в терминологии).
    А оригинатор этой ветки негодует об объектной сути литерала (точнее, численного литерала, м.б. потому что, например, объектность списочного литерала для него вполне применима).
     
     
  • 5.45, Аноним (-), 20:42, 26/02/2013 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Вот это и есть "по уму".
    У нас уже есть объект "скаляр", у него уже есть простой, понятный, привычный и удобный для работы с этим типом объектов интерфейс. (А у массива или хэша - свой)
    Хотите объектности - пожалуйста, реализуйте этот интерфейс в своем классе.
    А навязывать всем под видом ОО идиотизм в виде "всё есть класс, наследуемый от одного корня, с одним и тем же интерфейсом" - несколько туповато, из этого получаются чудовища типа число.умножь_себя_на_десять().
     
     
  • 6.47, Аноним (-), 16:07, 06/03/2013 [^] [^^] [^^^] [ответить]  
  • +/
    Что в этом чудовищного? Стандартную инфиксную нотацию 2 * 2 никто не отменял, это же не лишп.
     
  • 2.23, arisu (ok), 06:46, 25/02/2013 [^] [^^] [^^^] [ответить]  
  • +3 +/
    > Вот это я понимаю, ООП головного мозга. Единичка? Объект!

    что, тяжело неучем расти, да? иди, что ли, читай про Smalltalk, откуда у драгоценности растут лапки. про Self ещё можешь потом почитать, тоже полезно будет.

     

  • 1.14, Safort2 (?), 22:39, 24/02/2013 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    А на сколько сильно возросла производительность?
     
     
  • 2.20, anonymous (??), 02:25, 25/02/2013 [^] [^^] [^^^] [ответить]  
  • +8 +/
    "возросла"? А ты оптимист. :-)
     

  • 1.15, Аноним (-), 22:41, 24/02/2013 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Пару лет назад о нем все узнали, а оно уже страшнее C++
     
     
  • 2.24, arisu (ok), 06:48, 25/02/2013 [^] [^^] [^^^] [ответить]  
  • +5 +/
    > Пару лет назад о нем все узнали, а оно уже страшнее C++

    для укушеных симульным псевдооп всё, что на цпп не похоже, страшно.

     
  • 2.38, CPP (??), 13:54, 25/02/2013 [^] [^^] [^^^] [ответить]  
  • +/
    > Пару лет назад о нем все узнали, а оно уже страшнее C++

    Что значит страшнее C++?

     
     
  • 3.44, XoRe (ok), 20:14, 25/02/2013 [^] [^^] [^^^] [ответить]  
  • +/
    >> Пару лет назад о нем все узнали, а оно уже страшнее C++
    > Что значит страшнее C++?

    Ещё более неканонiчно (с) адепт ANSI C

     

  • 1.46, анноним (?), 17:59, 28/02/2013 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    perl 2.0
     

     Добавить комментарий
    Имя:
    E-Mail:
    Текст:



    Спонсоры:
    PostgresPro
    Inferno Solutions
    Hosting by Hoster.ru
    Хостинг:

    Закладки на сайте
    Проследить за страницей
    Created 1996-2022 by Maxim Chirkov
    Добавить, Поддержать, Вебмастеру