Спустя ровно 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.me/opennews/art.shtml?num=36211
Ура, товарищи!
Ура, ура, ура!
По твоей же ссылке
> Фонетическая транскрипция:ˈruːbi
А рельсы всё-таки поломало :3
Из-за того, что видимость Kernel#initialize_dup сменили с public на private.
> А рельсы всё-таки поломало :3Как, ты ещё не вкурсе, что они 4 раза за минорный релиз переписывают список рекомендованных версий руби на своей давнлоад пейдж?? Тогда поделом же.
Нет, не слышал. Лишь бы на новую версию языка не 5 лет мигрировали, как питонолюбы, остальное неважно.
Фикс то уже давно есть в edge, но непонятно почему его они его не добавили в 3.х перед выпуском релиза руби. :(
Вообще такого не может быть чтобы Руби было 20 лет
Отрицание реальности - это так весело.
Да о нём общественность узнала только году в 2008-м, и то только благодаря rails и навязчивой рекламе MVC.
2006м
> 2006мОбщественность -- начиная с 2000, поскольку вышла книжка Programming Ruby (http://ruby.osdn.org.ua/pickaxe -- в альте местами водится как ruby-doc-extra). Вот до Энди с Дэйвом и впрямь приходилось сильно сложнее, насколько понимаю...
PS: опять забыл, что запятые к ссылкам прилипают; объехал.
Вот и выросло поколение... (c)Фришный portupgrade появился году так в 2000ом примерно (в портах с 2001го точно). Намекнуть, на чём он написан?
Слишком долго мы терпели это г-но, слава богу теперь есть portmaster.
ну что сказать... portmaster, как ни крути, практичнее и красивее.
"Ruby was conceived on February 24, 1993 by Yukihiro Matsumoto" (c) http://en.wikipedia.org/wiki/Ruby_(programming_language)
conceive -- задумать, запланировать, имеет также значение "зачать".
или мне кажется, или возраст ребёнка обычно не от зачатия измеряют? а то так можно сказать, что вася из деревни мухоловщина запланировал руби ещё за 15 лет до мацумото.
tDiary -- популярный проект?
> "1.step(by: 2, to: 20)"Вот это я понимаю, ООП головного мозга. Единичка? Объект!
dsl
Будешь смеяться, но даже nil - объект. И всё это вместе - скрипт, а не компилируемое приложение. Но ведь тебя и не просят отказываться от любимого C
что число объект это вполне нормально, но полный треш давать возможность прямо у литерала числа вызывать метод. И, конечно, тупо запихивать генераторы и прочую хрень в методы числа. В общем, не ООП это, а помесь функциональщины, перла и привычки вносить фичи в ЯП в стиле php
> полный треш давать возможность прямо у литерала числа вызывать методПочему? Недостаточно паршиво для тебя?
Алан Кей стыдливо забивается в угол и краснеет.
> 3.times { |e| puts e }0
1
2
=> 3
Я конечно не фанат ООП, но по мне, так вполне себе вменяемо
В перле-то как раз по уму сделано.http://perldoc.perl.org/perltie.html / Tying scalars
То, о чем вы пишете, это "увязывание" переменной и класса Perl (прошу извинения, если я ошибаюсь в терминологии).
А оригинатор этой ветки негодует об объектной сути литерала (точнее, численного литерала, м.б. потому что, например, объектность списочного литерала для него вполне применима).
Вот это и есть "по уму".
У нас уже есть объект "скаляр", у него уже есть простой, понятный, привычный и удобный для работы с этим типом объектов интерфейс. (А у массива или хэша - свой)
Хотите объектности - пожалуйста, реализуйте этот интерфейс в своем классе.
А навязывать всем под видом ОО идиотизм в виде "всё есть класс, наследуемый от одного корня, с одним и тем же интерфейсом" - несколько туповато, из этого получаются чудовища типа число.умножь_себя_на_десять().
Что в этом чудовищного? Стандартную инфиксную нотацию 2 * 2 никто не отменял, это же не лишп.
> Вот это я понимаю, ООП головного мозга. Единичка? Объект!что, тяжело неучем расти, да? иди, что ли, читай про Smalltalk, откуда у драгоценности растут лапки. про Self ещё можешь потом почитать, тоже полезно будет.
А на сколько сильно возросла производительность?
"возросла"? А ты оптимист. :-)
Пару лет назад о нем все узнали, а оно уже страшнее C++
> Пару лет назад о нем все узнали, а оно уже страшнее C++для укушеных симульным псевдооп всё, что на цпп не похоже, страшно.
> Пару лет назад о нем все узнали, а оно уже страшнее C++Что значит страшнее C++?
>> Пару лет назад о нем все узнали, а оно уже страшнее C++
> Что значит страшнее C++?Ещё более неканонiчно (с) адепт ANSI C
perl 2.0