Релиз языка программирования Ruby 1.9.3

Увидел свет релиз языка программирования Ruby 1.9.3. Ruby - относительно молодой, мощный и динамический объектно-ориентированный язык программирования, отличающийся высокой эффективностью разработки программ и вобравший в себя лучшие черты Perl, Java, Python, Smalltalk, Eiffel, Ada и Lisp. Новый выпуск характеризуется как версия, продолжающая развитие Ruby 1.9.2 и несодержащая кардинальных функциональных изменений.

Начиная с Ruby 1.9.3 код проекта распространяется под лицензиями BSD ("2-clause BSDL") и "Ruby", в то время как прошлые версии распространялись под лицензиями "GPLv2" и "Ruby". В качестве причины смены лицензии называется желание обеспечить совместимость кода одновременно с лицензиями GPLv3 и BSD. Лицензия "Ruby" ссылается на последний вариант GPL и полностью совместима с GPLv3, но указание GPLv2 в качестве второй лицензии ограничивало максимальную версию GPL и делало код несовместимым с GPLv3. Второй проблемой было то, что код прошлых версий Ruby не был совместим с лицензией BSD и не позволял обмениваться наработками с BSD-проектами. В новой версии Ruby эти недостатки устранены.

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

  • В состав стандартных библиотек включен модуль io/console, предназначенный для организации управления консолью;
  • Улучшена работа модуля openssl, что связано с появлением у данной ruby-бибилиотеки активного мэйнтейнера;
  • Реализован режим параллельного юнит-тестирования в модуле test/unit;
  • Изменена стратегия выполнения внутренних блокировок, что позволило повысить эффективность организации работы многопоточных программ;
  • С целью увеличения производительности переписаны на языке Си библиотеки "pathname" и "date" (скорость работы с датами увеличилась в 5 раз);
  • Внесены изменения, позволившие сократить время загрузки rails-приложений. RubyGems обновлён до версии 1.8.10;
  • Поддержка символов Unicode 6.0 в регулярных выражениях;
  • Поддержка указания диапазонов значений в Random.rand;
  • В класс String добавлены новые методы String#prepend и String#byteslice;
  • В класс ARGF добавлены новые методы: ARGF.print, ARGF.printf, ARGF.putc, ARGF.puts, ARGF.read_nonblock, ARGF.to_write_io, ARGF.write;
  • В классе Bignum задействован новый алгоритм умножения больших чисел (более 150 цифр);
  • В класс IO добавлены новые методы: IO#advise, IO.write(name, string, [offset] ) и IO.binwrite(name, string, [offset]). В методе IO#putc реализована поддержки многобайтных символов;
  • Расширен API для написания модулей на языке Си: добавлена функция ruby_vm_at_exit() для перехвата события завершения работы VM, добавлена функция rb_reserved_fd_p() для закрытия всех файловых дескрипторов, реализована поддержка извлечения аргументов хэша в rb_scan_args();
  • В модуле net/http добавлена поддержка SNI (Server Name Indication) для HTTPS; обеспечена возможность определения времени ожидания перед отправкой тела запроса через заголовок '100-continue'; добавлен метод Net::HTTPRequest#set_form для обеспечения одновременной поддержки application/x-www-form-urlencoded и multipart/form-data;
  • В модуле yaml в качестве движка по умолчанию теперь используется Psych, для задействования старого движка Syck следует указать YAML::ENGINE.yamler = 'syck';
  • В модуле zlib добавлены новые методы Zlib.deflate и Zlib.inflate;
  • В модуле FileUtils добавлена возможность указания в методе FileUtils#chmod прав доступа в символьном виде.

© OpenNet