LINUX.ORG.RU

Pragmatic Perl - вышел первый номер


0

3

Pragmatic Perl - первый в мире русскоязычный журнал, посвященный проблемам программирования на языке perl.

Содержание номера:

  • Возрождение Perl
  • YAPC::Europe 2013 «Future Perl»
  • Moo — современный минимальный ООП-фреймворк
  • Dancer2 — Революция (1 Comment и 0 Reactions)
  • Padre IDE. В шаге от релиза 1.0
  • Всё, что вы хотели знать об AnyEvent, но боялись спросить
  • Что нового в Perl 5.17.9
  • Обзор CPAN за февраль 2013 г.
  • Интервью с Tatsuhiko Miyagawa
  • Perl Quiz

>>> Подробности



Проверено: tazhate ()
Последнее исправление: tazhate (всего исправлений: 2)

посвященный проблемам программирования на языке perl

Трудно было подколоть лучше.

tazhate ★★★★★
()
Ответ на: комментарий от tazhate

Для английского языка и языка науки воплне нормально. Хотя на русский лучше было бы как «тематика» перевести.

P.S. Угу, я перле (в том числе) пишу. И прилично писать на нём легко и приятно, это вам не PHP какой. Задолбали подколки тех, кто видел только кошмары, сисадминами писаные.

crazy_alex
()
Ответ на: комментарий от crazy_alex

P.S. Угу, я перле (в том числе) пишу. И прилично писать на нём легко и приятно, это вам не PHP какой. Задолбали подколки тех, кто видел только кошмары, сисадминами писаные.

Я нормально к перлу отношусь, просто фраза понравилась :)

tazhate ★★★★★
()

Посмотрим, протянет ли сей журнал дольше, чем «Практика функционального программирования».

CARS ★★★★
()

» perldancer.org

То-то легко и приятно писать, что у разработчиков фреймворка нет времени поправить вёрстку на главной ихнего сайта...

anonymous
()

perldancer.org

интересно, тоже с синатры утянули, хотя все же по реализации больше похоже на flightphp

rikardoac
()

Замечательно же!

fero ★★★★
()
Ответ на: комментарий от science

flightphp

yet another php microframework, впрочем я ошибся. там что-то другое, название вспомнить не могу.

rikardoac
()

Первые 8 страниц журнала похожи на «плач Ярославны» и попытку откопать Perl. Очень уважительно отношусь к Перлу, но думаю, что в его развитии произошла стагнация и в данный момент он не отвечает запросам рынка. Python, PHP и Ruby перехватили эстафету и уже далеко впереди.

Pirr ★★
()

проблемам программирования на языке perl.

Главная проблема программирования на языке perl это программисты на perl.

raorn
()
Ответ на: комментарий от anonymous

about для слабаков. может ты еще, наверное, и README читаешь?

rikardoac
()

Одна из интересных особенностей интерфейса AnyEvent — это необходимость использования замыканий, поскольку нет другой возможности передать параметры в колбэк-функцию.

4.2

#!/usr/bin/perl

use strict;
use warnings;

use EV;
use AnyEvent;
use JSON::XS qw/encode_json/;

my $w = AE::timer 1, 1, sub {
  my ($x) = @_;
  AE::log fatal => "bullshit: %s", encode_json($x->data());
};

$w->data({"truth" => "somewhere else"});

EV::run;

Надеюсь не надо пояснять почему так работает?

Создав переменную состояния, никогда не запускайте метод recv(), если знаете, что в коде нигде не будет вызываться метод send(). Разные реализации СОП ведут себя по-разному в подобной ситуации. EV, например, просто начинает загружать процессор на 100%.

Пруф в студию или не было.

#!/usr/bin/perl

use EV;
use AnyEvent;

my $cv = AE::cv;

my $t = AE::timer 1, 1, sub {
  AE::log error => "ales good";
};

my $t = AE::timer 1, 1, sub {
  AE::log error => "bullshit 2", $cv->recv();
};

EV::run;

Кроме того нельзя использовать die() внутри колбэка, поскольку нормально обработать это событие будет затруднительно. Впрочем в EV, будет выдано предупреждение о смерти колбэка, но програм- ма при этом продолжит выполнение.

4.2

#!/usr/bin/perl

use strict;
use warnings;

use EV;
use AnyEvent;

$EV::DIED = sub {
  AE::log fatal => "$@";
};

my $t = AE::timer 1, 1, sub {
  die "bullshit 3";
};

EV::run;
gh0stwizard ★★★★★
()
Последнее исправление: gh0stwizard (всего исправлений: 4)
Ответ на: комментарий от raorn

Главная проблема программирования на языке perl это программисты на perl.

К сожалению, эта проблема не разрешима, поскольку взявшись программировать на Перл, люди неизбежно становятся программистами на Перл.

anonymous
()
Ответ на: комментарий от anonymous

а что, не должно в нём смотреться?

anonymous
()
Ответ на: комментарий от Pirr

Python и Ruby перехватили эстафету и уже далеко впереди.

fxd

actionless ★★★★★
()
Ответ на: комментарий от alx_me

Их покусает перл, и они тоже превратятся в зомби?

Oleaster ★★★
()
Ответ на: комментарий от Pirr

В эпоху, когда чуть не целые DE пишут на джаваскрипте с очевидной целью снижения порога входа для разработчиков, Перл совершенно обречён. Странно не то, что он умирает, а то, что он ещё довольно жив.

Oleaster ★★★
()
Ответ на: комментарий от theNamelessOne

Лев Валкин на конференции по Ruby говорил что готовится новый номер «Практика функционального программирования»

BillDver ★★★
()

Замечательно, perl, не смотря ни на что, - самый лучший скриптовый инструмент. После баша.

Pm7vLB
()

Книга мёртвых

fero ★★★★
()
Ответ на: комментарий от Pirr

Очень уважительно отношусь к Перлу, но думаю, что в его развитии произошла стагнация и в данный момент он не отвечает запросам рынка. Python, PHP и Ruby перехватили эстафету и уже далеко впереди.

Напиши разработчикам, подскажи, объясни. Может они не знают?

Turbo_Mascal
()
Ответ на: комментарий от gh0stwizard

В статье всё-таки речь шла об AnyEvent, а не об Ev.

Если Вы вместо

use EV
поставите
use AnyEvent::Loop
То увидете, что метода data у него нет. Т.е. это ограничение с параметрами связано с тем, что не все реализации event loop имеют возможность передавать параметры.

Второй пример у меня не работает, выдаёт ошибку о которой я и говорил:

2013-03-07 19:50:12.036843 +0400 error main: ales good
EV: error in callback (ignoring): AnyEvent::CondVar: recursive blocking wait attempted at 2.pl line 13.
EV: error in callback (ignoring): AnyEvent::CondVar: recursive blocking wait attempted at 2.pl line 13.

Какая у Вас версия AnyEvent? У меня сейчас стоит 7.02

Насчёт 100% CPU в Ev, вот пруф

$ time perl -MEV -MAnyEvent -e 'AE::cv->recv'
^C
perl -MEV -MAnyEvent -e 'AE::cv->recv'  2,17s user 0,88s system 99% cpu 3,058 total

Третий пример опять связан с особенностями Ev, который может обрабатывать die() в колбэках (об этом в статье, кстати, упомянуто). В общем случае - это не так.

truecrux
()

Perl - это инструмент профессионала.

Если снова вернуться к кривой нормального распределения, то мы получим что людей со средними способностями мозга (iq) больше всего. Perl требует повышенных значении iq, тогда как его просто нет у большинства. Что там у большинства было в моде? Питон? Джава? Руби? JScript?

PS: Те кто ориентируется в теории систем, пожалуйста проанализируйте экосистему perl'а с позиции законов развития систем. Вы найдете очень интересный феномен.

anonymous
()
Ответ на: комментарий от Turbo_Mascal

Напиши разработчикам, подскажи, объясни. Может они не знают?

Они то как раз таки и знают. Читал, что на съезде разработчиков Perl (это лет 5 назад было) был поставлен вопрос, что делать и как дальше развивать язык. Развивать дальше не поломав обратной совместимости было нельзя, и было принято решение развивать две ветки 5 и 6. Но судя по результату... 6 версия Перла так и не родилась до конца, а 5 тихоничко загибается.

Pirr ★★
()
Ответ на: комментарий от truecrux

То увидете, что метода data у него нет.

Так и не надо лгать и строить из себя самого умного.

EV: error in callback (ignoring)

Это не ошибка, как вы выразились в своей статье. Ошибка проектирования это «recursive blocking wait attempted». Вы об этой, самой главной ошибке, не сказали ни слова. Вот пример, который никогда нельзя делать:

my $coro = async {
  long_wait_function();
};

sub super_cool_function() {
  my $cv = AE::cv;

  my $w; $w = AE::timer 100, 100, sub {
    undef $w;
    $cv->send;
  };

  $cv;
}

my $t = AE::timer 1, 1, sub {
  $coro->join(); # error number 1

  my $cv = super_cool_function();
  $cv->recv(); # error number 2
};

Иными словами, нельзя вызывать никакие функции, выполнение которых дольше чем указано. Потому что при приходе нового ивента, выполнение предыдущего еще не закончено. Более того, в некоторых случаях даже Coro + Coro::AnyEvent не спасет от подобной кривизны.

Насчёт 100% CPU в Ev, вот пруф

У меня менее 1%. Perl 5.16.2, AnyEvent последний.

Третий пример опять связан с особенностями Ev, который может обрабатывать die() в колбэках (об этом в статье, кстати, упомянуто). В общем случае - это не так.

Опять же вы говорите одно, хотя в деталях это другое. Я больше чем уверен, что в других event-библиотеках также настраивается подобное поведение.

Претензия только одна - голословные утверждения, без оговорок и без проверенного кода. Зачем врать и лгать? Сложно было изучить вопрос в деталях и дать конкретные примеры?

gh0stwizard ★★★★★
()

прагматик перл - трудно придумать аналогичное сочетание 2-х слов

kto_tama ★★★★★
()
Ответ на: комментарий от truecrux

И еще насчет ваших отговорок о том, что где-то что-то работает, а у меня вот не работает. В самом начале вы что говорите ?AnyEvent позволяет задействовать различные библиотеки и выступать в роли надкласса для: EV, Event, POE, PP и т.п. Таким образом, AnyEvent по сути выступает в роли субкласса (в контексте ООП) для тех или иных реализаций.

Соответственно, человек знающий, как работает наследование классов в перле, от ваших отговорок и явных утверждений раздвинет глаза, чтобы еще раз перечитать что вы написали. Код ниже работает только потому, что происходит поиск метода data() таким же образом как делает перл при поиске методов из родительского класса:

package EV;

sub new {
  bless [], shift;
}

sub data {
  die "ales gut";
}

package AnyEvent;
use parent -norequire qw(EV);

package main;

my $obj = new AnyEvent;

$obj->data();

vs.

use EV; # our "parent class"
use AnyEvent;

my $t = AE::timer 1, 1, sub {
  my ($w) = @_; # our parent is EV::timer here !
  $w->data();
};

Понятно, что если будут использовать POE, Event, то поведение аналогичных watchers из этих модулей AnyEvent полностью наследует.

Но что вы пишите, еще раз:

Одна из интересных особенностей интерфейса AnyEvent — это необходимость использования замыканий, поскольку нет другой возможности передать параметры в колбэк-функцию.

Правильно было написать. В ситуации когда используется реализация событий на чистом перле (и другие, <список>) нельзя передать параметры, необходимо использовать замыкании. В ситуации когда используется EV, <и тут проверенный список модулей> это возможно, так как описано в документации к EV, через метод data.

gh0stwizard ★★★★★
()
Последнее исправление: gh0stwizard (всего исправлений: 3)
Ответ на: комментарий от gh0stwizard

Так и не надо лгать и строить из себя самого умного.

Претензия только одна - голословные утверждения, без оговорок и без проверенного кода. Зачем врать и лгать? Сложно было изучить вопрос в деталях и дать конкретные примеры?

Большинство «голословных» утверждений - это выдержки из документации AnyEvent. Возможно я в чём-то заблуждаюсь, что-то неправильно интерпретирую, но уж точно не лгу.

Где-то в комментариях к выпуску журнала я видел просьбу рассказать о Coro в следующих номерах. Если у Вас есть желание и возможность рассказать о Coro в связке AnyEvent/EV было бы интересно почитать Вашу статью в апрельском номере, т.к. судя по всему опыт у Вас есть. А опытом надо делиться, иначе вымрем как мамонты ))

truecrux
()
Ответ на: комментарий от truecrux

Возможно я в чём-то заблуждаюсь, что-то неправильно интерпретирую, но уж точно не лгу.

Хорошо, считаем это как «первый блин комом». С одной стороны журнал позиционируется для «продвинутых», раз уж зашла речь про YAPC, интервью у Миягавы и т.п. А оказывается, что этим «продвинутым» такие короткие очерки и не нужны, так ничего нового не несут и особенно плохо, когда это оказывается неправдой (хоть и частичной).

Ну и главное про событийку на AE/EV про то, что два события можно связать только через какую-то несобытийную модель хранения данных (иначе самоблокировка происходит) не сказали! А ведь это основа всего понимания проектирования подобных приложений. И из-за этого некоторые вещи, которые делаются в других парадигмах не работают и надо пересматривать порой всю архитектуру приложения.

«А вот тут у нас будет $coro->join(); или $cv->recv()»

И бац, что-то пошло не так! Благо, если при первом запуске появится ошибка вида «$CORO::IDLE blocked himself», а чаще она может проявиться уже в продакшен-коде, не в тестовом окружении, под совершенно другой нагрузкой. И все, разрыв шаблона :)

Если у Вас есть желание и возможность рассказать о Coro в связке AnyEvent/EV было бы интересно почитать Вашу статью в апрельском номере, т.к. судя по всему опыт у Вас есть.

Рассказать можно много чего. Как я понял у вас формат такой, что много текста не напишешь. Поэтому, если и делать, то серией выпусков. Это касается не только Coro, AnyEvent, а любого «фреймворка», например, Plack/PSGI тоже сюда попадают.

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

Просто для меня, сначала событийка, а потом и Coro + СОП изменили вообще весь взгляд на написание приложений. Т.к. там совсем «другие правила» :)

gh0stwizard ★★★★★
()
Последнее исправление: gh0stwizard (всего исправлений: 1)
Ответ на: комментарий от truecrux
$ time perl -MEV -MAnyEvent -e 'AE::cv->recv'

AE::cv->recv
AE::cv->recv

Опа, не заметил. No comments.

Condition variables can be created by calling the AnyEvent->condvar method, usually without arguments. The only argument pair allowed is cb, which specifies a callback to be called when the condition variable becomes true, with the condition variable as the first argument (but not the results).

http://search.cpan.org/~mlehmann/AnyEvent-7.04/lib/AnyEvent.pm#CONDITION_VARI...

Все, больше не хочу «срывать покрывала». А то всем окружающим станет совсем грустно или радостно :)

gh0stwizard ★★★★★
()

Последний релиз Padre версии 0.96 состоялся 23 апреля 2012 г. С тех пор не было ни одного выпуска. Связано это прежде всего с тем, что один из самых активных контрибуторов проекта Adam Kennedy сменил рабочее место и переехал из Австралии в США. На новом месте у него практически не осталось времени на участие в этом проекте и на поддержку своих CPAN модулей вообще, поскольку он вместе с местом работы сменил и основной язык программирования, им стал C# (новый работодатель работает полностью на стеке языков и продуктов Microsoft).

Вот, что происходит с Перл программистами... новым работодателям Перл не нужен. А тут кто то говорил, что Перл - инструмент профессионалов. Почему же для профессионала не нашлось работы связанной с Перлом?

Pirr ★★
()
Ответ на: комментарий от Pirr

Почему же для профессионала не нашлось работы связанной с Перлом?

Враки это. Текущее состояние на западных рынках по перлу всегда можно узнать на http://jobs.perl.org

gh0stwizard ★★★★★
()
Ответ на: комментарий от gh0stwizard

Можно попробовать что-то набрасать, скажите о чем нужно рассказать и для какой аудитории расчет, я попробую.

Темы могут быть любые, связанные с Perl. Уровень тестов может быть любой - для новичков, и для гуру. Если ориентироваться на пожелания читателей, то для следующего номера просили написать о Coro, про использование Perl в «облаках», про тестирование в Perl, про отладку. Но повторюсь, что подойдёт любая тема, о которой есть что написать.

p.s. пообощаться по всем темам можно на irc.perl.org на канале #ru.pm или почтой на editor эт pragmaticperl дот com

truecrux
()
Ответ на: комментарий от truecrux

Уровень тестов может быть любой - для новичков, и для гуру.

Это хорошо. Но еще важно знать максимальный объем - есть какие-то пожелания? Также как я понял у вас только текст, без картинок и прочего. И что насчет соотношения статья / код ? Вообще какие планы на размещение кода ? ИМХО, сухой текст без кода в журнале про программирование согласитесь очень странно, хотя... если аудитория расчитывает на «истории успеха», то можно и в таком виде, а исходники простым линком на архив.

о Coro

Введение и обзор можно написать для начала. Вообще тема очень широкая, теже Coro::Channel's заслуживают своей истории. Про использование в связке с AnyEvent это тоже отдельный случай. Про симуляцию потоков (threads) через Coro (т.е. параллельные вычисления, но не параллельное исполнение разных задач) и различия между ними также описывать по идее нужно или хотя указать на архитектурные различия.

Про continuations это особый случай, когда программа управляется через готовые результаты уже выполненных функций, а не запросы на получение самих данных. Эту тему наверняка мало кто знает вообще.

про использование Perl в «облаках»

Не мое. Есть опыт с AnyEvent::MP (Coro::MP), но близость только в распределении задач, но не данных, что несколько не то, что просят.

про тестирование в Perl

Опыт есть, но не мое. Хотя написание тестов для серверных приложений на AnyEvent (+Coro) это конечно заслуживает внимания.

про отладку

Опыт есть, но не мое. Хотя, можно рассказать про утечки памяти как в PP, так в XS. Однозначно тема интересная.

gh0stwizard ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.