Выпуск 33. Ноябрь 2015

Perl 6 для веба | Содержание | Интервью с Рикардо Мартинесом

Обзор CPAN за октябрь 2015 г.

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

Статистика

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

Новые модули

PEF::CacheLRU

PEF::CacheLRU — это реализация алгоритма кеширования LRU (вытеснение давно неиспользуемых ключей) на чистом Perl. В описании модуля приводится сравнение производительности с реализацией Cache::LRU, в котором PEF::CacheLRU оказывается существенно более быстрым.

Term::Choose_HAE

С помощью модуля Term::Choose_HAE можно создавать консольные интерактивные меню для выбора одного или нескольких значений из списка. В отличие от Term::Choose, данный модуль не удаляет экранирующие последовательности ANSI, что позволяет использовать цвета для элементов меню. Также появилась опция fill_up, которая задаёт стиль закраски курсора.

Exporter::Attributes

Exporter::Attributes позволяет указывать какие символы модуля могут быть экспортированы или экспортируются по умолчанию с помощью атрибутов. Например, сравнение с Exporter:

package My::Module;         |  package My::Module;
use Exporter;               |  use Exporter::Attributes qw(import);
                            |
our @EXPORT = qw(foo bar);  |  sub foo : Exported;
                            |  sub bar : Exported;
                            |
our @EXPORT_OK = qw(baz);   |  sub baz : Exportable(qux);
our %EXPORT_TAGS =          |
    qw(qux => [qw(baz)]);   |

Модуль является аналогом Exporter::Simple, который уже давно заброшен и не работает на современных версиях Perl.

Devel::Unstate

Модуль Devel::Unstate позволяет превратить state-переменные в my. Это может быть полезно при тестировании, когда требуется, чтобы данные в кеше обновлялись при каждой итерации теста. Эффект действия Devel::Unstate глобальный, но затронуты будут только те переменные, которые были объявлены после загрузки модуля.

IPC::Lockfile

IPC::Lockfile — это реализация классического способа обеспечения запуска только одного экземпляра текущей программы путём установки лока на исходный код программы:

open SELF, "< $0" or die ...;
flock SELF, LOCK_EX | LOCK_NB  or exit;

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

Perlito5

Впервые на CPAN выложен компилятор Perl 5, написанный на Perl 5. Компилятор позволяет также транслировать Perl 5 код в любой из поддерживаемых бекендов: js, perl5, perl6, xs, java. Таким образом, существует возможность для бутстрапа самого Perlito5, например в js-код, тем самым позволив запускать Perl 5 программы на node.js и, вероятно, и в браузере:

$ perlito5 --bootstrapping -Cjs \
    `which perlito5` > perlito5.js

$ node perlito5.js -e ' print "hello, world!\n" '
hello, world!

Acme::Test::VW

Скандал вокруг дизельных двигателей Volkswagen оставил свой след и в фольклоре программистов. В октябре стали появляться реализации модулей, которые при детектировании выполнения тестов внутри автоматизированных систем CI/QA делают все падающие тесты успешными. Для Perl был создан модуль Acme::Test::VW, который при запуске тестов в CPAN Testers, Jenkins, Travis CI и других системах всегда будет давать успешный результат.

# export PERL5OPT=-MAcme::Test::VW

use Test::More;
ok 1 == 2;
done_testing;

Acme::Excuse

В отличиe от Acme::Test::VW, Acme::Excuse не пытается скрыть наличие ошибок в вашем коде, но зато пытается найти оправдание им. В случае, если происходит фатальная ошибка, Acme::Excuse загружает и выводит сообщение с сайта www.programmerexcuses.com:

$ perl -MAcme::Excuse -e 'use Perl or die'
Well done, you found my easter egg!

App::Mimic

Если же так получилось, что в вашем коде нет багов, то их можно добавить, причём так, что найти их будет совсем непросто. Утилита mimic может внести случайные изменения в исходный код программы, выполняя замену ASCII-символов на схожие Юникод омоглифы, например:

  • ; U+003B SEMICOLON
  • ; U+037E GREEK QUESTION MARK
  • U+FE54 SMALL SEMICOLON
  • U+FF1B FULLWIDTH SEMICOLON
  • U+FE14 PRESENTATION FORM FOR VERTICAL SEMICOLON

Выводимые сообщения об ошибках могут поставить в тупик любого перловика.

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

Test::Stream 1.302021

Преемник Test::More и Test::Builder модуль Test::Steam теперь больше не имеет статуса экспериментального, что вполне можно интерпретировать, как сигнал к началу использования. Также если заявленный грант для Test::Stream будет принят, то это в скором времени приведёт к созданию подробного мануала по использованию модуля.

Gazelle 0.36

В новой версии высокопроизводительного веб-сервера Gazelle появилась экспериментальная поддержка FreeBSD, а также исправлена проверка наличия системного вызова accept4.

EV::ADNS 3.0

Вышел новый мажорный релиз модуля EV::ADNS для выполнения асинхронных DNS-запросов с помощью библиотеки adns и EV. Появилась поддержка ipv6, произошёл переход на libev 4 API, реализован вызов EV::ADNS::reinit для сброса всех выполняющихся запросов и реинициализации библиотеки adns.

Data::Alias 1.20

Обновлён модуль Data::Alias, предоставляющий набор подпрограмм для выполнения операций с алиасами (псевдонимами). Новая версия теперь собирается и работает на Perl 5.22, но в документации теперь указывается, что появившиеся в Perl 5.22 средства по созданию алиасов работают гораздо надёжнее и лучше сопровождаются, хотя их синтаксис отличается, и функционал не так богат. Поэтому если вы используете последние версии Perl в разработке — есть смысл отказаться от использования Data::Alias.

BSD::Resource 1.2908

В новой версии BSD::Resource добавлено множество новых значений RLIMIT для различных систем и особенно linux 2.6: RLIMIT_PTHREAD, RLIMIT_RTPRIO, RLIMIT_RTTIME и другие. Поддерживается расширение PRIO_THREAD, если оно доступно в системе.

DBD::mysql 4.033

В новой версии драйвера СУБД MySQL DBD::mysql исправлено несколько ошибок, включая утечку памяти в $sth->{ParamValues}, патч для которой два с половиной года ждал своего часа в RT. Также внесены изменения для совместимости с последним релизом MySQL 5.7.9.

Minilla v3.0.0

Вышел новый мажорный релиз утилиты Minilla для подготовки дистрибутивов для CPAN. В новой версии совсем немного изменений, поэтому релиз скорее всего просто фиксирует стабильное состояние.

Search::Elasticsearch 2.00

Выпущен новый мажорный релиз официального клиента Elasticsearch. В данной версии по умолчанию используется API 2_0::Direct, но по-прежнему поддерживаются предыдущие версии 1.0 и 0.90.

Devel::MAT 0.21

Обновлён модуль Devel::MAT для анализа использования памяти Perl-программой. В новой версии обеспечена совместимость с Perl 5.22, а также обновлён формат хранения дампов.

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


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

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