Выпуск 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 — простое тестирование веб-приложений | Содержание | Интервью с Филиппом Брухатом
Нас уже 1393. Больше подписчиков — лучше выпуски!

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