Выпуск 30. Август 2015
← SWAT — простое тестирование веб-приложений | Содержание | Интервью с Филиппом Брухатом →Обзор CPAN за июль 2015 г.
Рубрика с обзором интересных новинок CPAN за прошедший месяц
Статистика
- Новых дистрибутивов — 198
- Новых выпусков — 715
Новые модули
Coro::Multicore
Как известно, треды Coro не могут работать параллельно даже на многопроцессорных и/или многоядерных системах. Данный модуль позволяет исправить подобную ситуацию, но накладывает серьёзные ограничения на код, который может исполняться параллельно. Это могут быть только XS-функции, которые подготовлены специальным образом, и которые при работе не меняют никаких структур Perl.
Parallel::WorkUnit
Очередное прибавление в пространстве имён Parallel
. Модуль Parallel::WorkUnit
упрощает выполнение параллельных задач с возможностью возврата данных в родительский процесс.
my $wu = Parallel::WorkUnit->new();
my $pid = $wu->async( sub { 'child' }, sub { 'parent' } );
$wu->waitall();
Для запуска параллельной задачи модуль использует вызов fork
, за исключением платформы windows, где используется модуль threads
.
Perl::Tokenizer
Модуль Perl::Tokenizer
— это попытка создания лексического анализатора Perl-кода с использованием регулярных выражений. В состав дистрибутива также входят несколько утилит:
- pfilter — фильтр кода, позволяющий, например, удалить комментарии и pod-документацию,
- pl2html — конвертация perl-кода в html-документ с подсветкой синтаксиса,
- pl2term — вывод perl-кода на консоль с подсветкой синтаксиса.
App::perlsh
Небольшая утилита perlsh
— это очередная реализация REPL-консоли (read-execute-print loop — цикл чтения-выполнения-печати) для Perl. Данное приложение базируется на Lexical::Persistence
, которое позволяет сохранять лексические переменные между циклами исполнения:
$ perlsh
eval: my $one = 1;
'1'
eval: my $two = 2;
'2'
eval: $one + $two
'3'
Attribute::Params::Validate
Модуль Attribute::Params::Validate
для проверки параметров функций с помощью атрибутов был выведен из состава Params::Validate
в отдельный дистрибутив. Автор не рекомендует его использовать, но если модуль кому-то интересен, автор готов передать права на сопровождение.
Capstone
Capstone
— это обвязка к одноимённому фреймворку дизассемблера, поддерживающего множество аппаратных архитектур. Модуль можно использовать для создания дизассемблера и анализа бинарных исполняемых файлов.
experimentals
Модуль experimentals
позволяет включить все существующие в данный момент экспериментальные возможности. То есть вместо записи:
use v5.22;
use experimental qw(
fc postderef current_sub say regex_sets
unicode_eval state array_base postderef_qq switch
smartmatch lexical_subs bitwise signatures lexical_topic
evalbytes refaliasing unicode_strings autoderef
);
Достаточно просто:
use v5.22;
use experimentals;
Keyword::Declare
Keyword::Declare
позволяет задавать новые синтаксические конструкции языка с довольно сложной логикой. Используется keyword API Perl, поэтому для работы модуля требуется Perl ≥ 5.12. Синтаксический разбор кода происходит на этапе компиляции. Например, так можно создать новый оператор цикла loop
:
use Keyword::Declare;
keyword loop (Int $count?, Block $block) {
defined $count ?
"for (1..$count) $block" :
"while (1) $block";
}
loop 10 {
...
}
Dios
Dios
— это ещё одна реализация ООП для Perl, которая основана на Keyword::Declare
и технике изнаночных (inside-out) объектов. Синтаксически всё очень похоже на Perl6/Moose, но есть и некоторые уникальные особенности. Пример, класса:
use Dios;
# Indetity наследуется от Trackable
class Identity is Trackable {
# Общие(разделяемые) переменные для всех объектов класса
shared Num %!allocated_IDs; # приватная и только для чтения
shared Num $.prev_ID is rw; # публичная для чтения и записи
# Каждый объект получает свою копию этих атрибутов
has Num $.ID = _allocate_ID(); # Инициализация функцией
has Str $.name //= '<anonymous>'; # Инициализация значением по умолчанию
has Passwd $!passwd; # Приватная переменная
# Функция (без объекта)
func _allocate_ID() { ... }
# Метод (получает объект $self и доступ к атрибутам)
method identify ($pwd) {
return "$name [$ID]" if $pwd eq $passwd;
}
# Деструктор (субметод не наследуется)
submethod DESTROY {
say "Пока, $name!";
}
}
Perl-ToPerl6
В соответствии с названием данный модуль предназначен для конвертации Perl 5 кода в код Perl 6. В состав дистрибутива входит утилита perlmogrify, которая имеет множество опций и может выполнить трансформацию как одного файла, так и дерева исходных кодов. Впрочем, работоспособность полученного Perl 6 кода не гарантируется.
AnyEvent::InfluxDB
AnyEvent::InfluxDB
— это асинхронный клиент для набирающей популярность базы данных InfluxDB, предназначенной для хранения всевозможных метрик, событий и аналитики.
B::Utils1
Модуль B::Utils1
— это форк B::Utils
, который создал Рейни Урбан, чтобы исправить проблемы модуля в связи с несовместимыми изменениями в Perl 5.22. Поскольку Рейни (как и Марк Леманн) за словом в карман не лезет, то конфликт интересов в конечном счёте привёл к его бану в рассылке perl5-porters.
Обновлённые модули
File::Slurper 0.006
Вменяемый модуль для чтения содержимого файлов File::Slurper
обновлён до версии 0.006. Автор указывает, что с модуля снят статус экспериментального и он может заменить небезопасный File::Slurp
.
Sisimai 4.1.27
Обновлён модуль Sisimai
, который предназначен для анализа почтовых сообщений об отказах в доставке (bounced mail). В новой версии исправлено несколько ошибок и добавлен метод dump()
, позволяющий обработать сразу весь почтовый ящик с сообщениями формата mailbox или maildir и вернуть json-строку с результатом.
Devel::Cover 1.20
Обновлён модуль Devel::Cover
, позволяющий проверить покрытие кода тестами. Исправлена работа модуля на Perl 5.22.0, также добавлены тесты для проверки работы с Perl 5.23.0.
Net::FTPSSL 0.29
Вышел новый релиз клиента защищённой передачи данных по FTP Net::FTPSSL
. В новой версии реализована возможность повторного использования сессии, что сокращает задержку при повторных подключениях.
RPerl 1.000007
В июле состоялся первый мажорный релиз оптимизирующего компилятора RPerl. RPerl позволяет преобразовать Perl программу в С++ код, который затем компилируется с помощью Inline::CPP
в бинарный модуль. Итоговый исполняемый файл в некоторых случаях работает на несколько порядков быстрее оригинальной программы. RPerl накладывает ограничения на используемые конструкции языка Perl.
Sidef 0.0900001
Sidef — это новый язык программирования реализованный на Perl. Sidef вобрал в себя лучшие идеи Ruby, Go, Perl 6 и JavaScript. Проект активно развивается и регулярно выпускает релизы на CPAN.
HTTP::Message 6.10
После трёх лет забвения стали выходить обновления модуля HTTP::Message
, в которых исправлены многие ошибки, накопившиеся в багтрекере за эти годы. Новый сопровождающий модуля Karen Etheridge.
Convert::UUlib 1.5
В новой версии модуля Convert::UUlib
— обвязки к библиотеке uulib исправлена ошибка с переполнением буфера.
Plack::Middleware::ETag 0.05
Обновлён модуль Plack::Middleware::ETag
, предназначенный для автоматического добавления заголовка ETag в ответ http-сервера. Исправлена ошибка в формировании значения ETag на основе номера inode файла: раньше вместо значения inode по ошибке использовалось значение битов прав доступа.
DBD::mysql 4.032
Состоялся релиз новой версии драйвера СУБД MySQL DBD::MySQL
. В новой версии появился новый атрибут mysql_enable_utf8mb4
, который схож с mysql_enable_utf8
, но добавляет поддержку 4-байтовых символов Юникода (эмодзи и другие). Также добавлена поддержка передачи атрибутов подключения mysql_conn_attr
для MySQL ≥ 5.6.6.
Encode 2.76
Обновлён модуль Encode
. В новой версии исправлена давняя ошибка в таблице кодировки KOI8-U для символа BULLET OPERATOR
(раньше он имел неверное наименование BULLET
).
← SWAT — простое тестирование веб-приложений | Содержание | Интервью с Филиппом Брухатом →