Выпуск 26. Апрель 2015

Грамматики в Perl 6 | Содержание | Интервью с Виктором Турским

Обзор CPAN за март 2015 г.

Рубрика с обзором интересных новинок CPAN за прошедший месяц.

Статистика

  • Новых дистрибутивов — 212
  • Новых выпусков — 932

Новые модули

re::engine::GNU

re::engine::GNU, как видно из названия, является движком регулярных выражений, основанный на библиотеке gnulib. Теперь для регулярных выражений становится возможно использовать синтаксис регулярных выражений emacs, egrep/grep, awk, sed и прочих вариаций, поддерживаемых в gnulib. Существует три альтернативных варианта записи регулярных выражений:

use re::engine::GNU;

# классический вариант
'test' =~ /\(tes\)t/;

# массив: синтаксис, шаблон
'test' =~ [ 0, '\(tes\)t' ];

# хеш: синтаксис, шаблон
'test' =~ { syntax => 0, pattern => '\(tes\)t' };

Time::Monotonic

Измерение периодов времени простым вычитанием показаний функции time() может иногда быть абсолютно неточным, вплоть до получения отрицательных показаний. Причина в том, что часы компьютера могут быть изменены как вручную, так и утилитами, например, ntpdate. Запущенный ntpd хоть и не изменяет время скачками, но может замедлять или ускорять часы, что также приводит к неаккуратным подсчётам периодов времени.

Модуль Time::Monotonic даёт доступ к показаниям источника монотонного времени, существующий на различных платформах, которое позволяет точно вычислять периоды времени.

List::Prefixed

List::Prefixed позволяет создавать список строк-префиксов, который можно использовать, например, для создания регулярного выражения, которое совпадает с любой строкой из списка. Так, например, для списка строк

"Ba", "Bar", "Baz", "Foo", "Food", "Foot", "For", "Form", "Fu"

генерируется регулярное выражение, совпадающее с любой из этих строк

/(?:Ba(?:r|z)?|F(?:o(?:o(?:d|t)?|r(?:m)?)|u))/

Это можно использовать для создания тестов на вхождение слов в тексте, эффективной реализации автодополнения и даже сжатия.

Plack::Util::Load

Модуль Plack::Util::Load позволяет загружать PSGI-приложение из файла, класса или URL. Экспортируемая функция load_app() возвращает ссылку на код или генерирует исключение в случае ошибки.

# Загрузка приложения из файла
$app = load_app('app.psgi');

# Загрузка приложения по имени класса
$app = load_app('MyApp::PSGI');

# Загрузка по URL (приложение работает как прокси на базе HTTP::Tiny)
$app = load_app("http://example.org/");

Rapi::Fs

Rapi::Fs — это Plack-приложение, созданное на основе фреймворка RapidApp, которое представляет собой файловый браузер. Веб-сервер запускается скриптом rapi-fs.pl, которому передаётся в качестве параметра путь к каталогу. Получаем довольно функциональный файловый браузер, которым можно пользоваться в любом браузере.

Скриншот Rapi::Fs

Скриншот Rapi::Fs

Deep::Hash::Exists

Полезный модуль Deep::Hash::Exists для проверки наличия глубоко вложенного ключа. Как известно, выражение

exists $hash_ref->{a}{b}{c}{d};

благодаря автовификации создаст все промежуточные элементы за исключением последнего ключа d. Та же самая операция с помощью функции key_exists

key_exists( $hash_ref, [ qw(a b c d) ] );

не обладает таким побочным эффектом и может быть безопасно использована.

Plack::Middleware::GNUTerryPratchett

Модуль Plack::Middleware::GNUTerryPratchett добавляет в PSGI-приложение HTTP-заголовок

X-Clacks-Overhead: GNU Terry Pratchett

Таким образом весь мир отдаёт дань памяти известному английскому писателю Терри Прачетту, который умер 12 марта 2015 года. Происхождение заголовка связано с сюжетом книги «Опочтарение», в котором присутствовали щёлкающие башни — семафоры (аналог телеграфа), которые передавали сообщения. Расшифровка кодов: G — передача сообщения, N — не вести лог сообщения, U — отправить сообщение назад, если оно достигло конца линии. Соответственно сообщение, отправленное с кодом GNU будет вечно циркулировать в линии. «Человек не умер, пока его имя произносится» говорится в прологе 4-й главы книги. Таким образом пытаются сохранить память о Терри Прачетте.

Crypt::Ed25519

Crypt::Ed25519 — это реализация алгоритма цифровой подписи EdDSA с использованием эллиптической кривой Twisted Edwards. Особенность данной эллиптической кривой — в высокой производительности операций и при этом высокой стойкости ко взлому. Как указано в описании модуля, стойкость получаемой подписи (512 бит) эквивалентна 3000 бит RSA или AES-128.

Обновлённые модули

Moo 2.001

Вышел второй мажорный релиз ООП-фреймворка Moo. Основное несовместимое изменение — отказ от фатальных предупреждений. В этом отношении Moo стал соответствовать поведению Moose. Кроме того, раньше классы без атрибутов сохраняли все параметры, переданные в new(), внутри объекта. Теперь этого не происходит — поведение приведено в соответствие с классами, которые имеют атрибуты. Попытка переопределить существующий конструктор или изменить тот, который был использован, теперь приводит к ошибке.

DBIx::Class 0.082820

Появилось обновление ORM DBIx::Class с исправлениями ошибок и улучшениями в документации. DBIx::Class теперь требует Moo не ниже версии 2, чтобы обеспечить более предсказуемую и безопасную работу модуля.

HTTP::BrowserDetect 2.00

Вышел второй мажорный релиз модуля HTTP::BrowserDetect для определения веб-браузера, версии и платформы по HTTP-заголовку User-Agent. В новой версии стандартизирован интерфейс, добавлена информация о новых браузерах. Основное несовместимое изменение — методу user_agent больше нельзя передавать параметр для задания строки веб-агента, для этих целей нужно использовать конструктор HTTP::BrowserDetect->new().

Raisin 0.58

В новом релизе микро-фреймворка Raisin для создания REST API появилась поддержка спецификации Swagger 2.0.

Devel::PPPort 3.31

Вышло обновление модуля Devel::PPPort для поддержки новых функции Perl API в старых версиях Perl. Релиз в частности содержит исправление функции SvPV_renew, в которой параметр длины строки имел тип int вместо size_t, что потенциально могло быть источником проблем. Проблема была обнаружена сканером Coverity.

Rex 1.1.0

В марте вышел первый мажорный релиз Rex — фреймворка автоматизации задач по администрированию. Ветка 1.0 объявлена как LTS-релиз и будет поддерживаться до марта 2017 года. В новом релизе произошёл переход от использования libssh2 (Net::SSH2) к openssh (Net::OpenSSH) по умолчанию, восстановлена совместимость с Perl 5.8.9, появилась поддержка команд PkgConf для запроса изменения конфигурации пакета (особенно полезно на Debian/Ubuntu). Также большое число багфиксов и других улучшений.

Net::OpenSSH 0.64

Новый стабильный релиз модуля Net::OpenSSH содержит достаточно много внутренних изменений, и не исключены регрессии или новые баги. Будьте внимательны при обновлении.

Server::Starter 0.23

Обновлён модуль супердемона Server::Starter. В новом релизе удалены все зависимости, которых нет в базовой поставке Perl. Появилась поддержка ipv6.

perl 5.21.10

Вышел новый релиз Perl ветки 5.21 для разработчиков. Основные изменения:

  • Операторы в выражениях для экспериментальных расширенных классов символов (?[...]) теперь следуют стандартным правилам приоритетов операций в Perl. Операция пересечения классов символов & теперь имеет более высокий приоритет, чем другие бинарные операции.
  • Функции utf8::native_to_unicode() и utf8::unicode_to_native() теперь оптимизированы для платформ ASCII. Написание кода, переносимого между ASCII и EBCDIC, теперь не будет испытывать пенальти в производительности.
  • Perl теперь корректно компилируется и работает на z/OS с кодовой страницей 1047 EBCDIC.
  • Исправлена проблема, когда повторяемый глобальный поиск шаблона в скалярном контексте на больших tainted-строках приводил к экспоненциальному замедлению.
  • Очередная пачка исправлений крахов Perl, найденных с помощью фаззера AFL.
  • Исправлена регрессия в операторе readline, появившаяся после добавления нового оператора двойного бриллианта <<>>.

DBD::Firebird 1.19

В новом релизе DBI-драйвера СУБД Firebird помимо других исправлений ошибок исправлено переполнение буфера в dbdimp.c. Сообщения об ошибках помещаются с помощью sprintf в буфер фиксированной длины, который в некоторых ситуациях может оказаться слишком мал. Проблема получила идентификатор CVE-2015-2788.

Владимир Леттиев


Грамматики в Perl 6 | Содержание | Интервью с Виктором Турским
Нас уже 1393. Больше подписчиков — лучше выпуски!

Комментарии к статье