[Moscow.pm] Встреча Moscow.pm

Ilya Chesnokov chesnokov.ilya на gmail.com
Вт Мар 18 15:30:42 PDT 2014


18 марта 2014 г., 23:28 пользователь Андрей П. Ковбович
<akovbovich на gmail.com> написал:
> Глянул что нового в Moo появилось: оказывается MOP там тоже есть, правда
> средствами class::mop.

=== README:
    There is no meta object. If you need this level of complexity you wanted
    Moose - Moo succeeds at being small because it explicitly does not
    provide a metaprotocol. However, if you load Moose, then
      Class::MOP::class_of($moo_class_or_role)
    will return an appropriate metaclass pre-populated by Moo.
===

Т.е. Class::MOP используется только если Moose уже загружен (это и по
коду видно - вызовы только вида if ($INC{"Moose.pm"} &&
Class::MOP::class_of(...))).

> Аксессоры генерятся через class::xsaccessor, если он
> доступен.

Круто :)

> Ну а библиотека типов (MooseX::Types?)

А также Moose::Util::TypeConstraints.

> это круто конечно, только
> мы же про Перл говорим. А в контексте перла никакая библиотека типов не
> запретит заткнуть круглое квадратным.

А что помешает запретить?
Мы у себя в проекте вполне успешно используем типы, предоставляемые
Moose, созданные на их основе, да и просто вручную. Туда, где тип
данных круглый, никакое квадратное не влезет.

> Поэтому считаю Moo крайне практичным
> инструментом.

Никто и не спорит. Весьма практичный в своей области.

> От себя еще пожелание к докладчикам: может про MOP кто-нибудь расскажет, где
> на практике получить от него выигрышь?

Вкратце: везде, где нужно в рантайме оперировать классами - изменять
методы, модификаторы методов, присваивать роли, получать информацию
обо всем этом и т.д.
Простейший пример:
https://github.com/ichesnokov/Yandex-Direct-API-JSON/blob/master/lib/Yandex/Direct/API/JSON.pm#L193

В качестве более интересного примера можно посмотреть код Test::Class::Moose.

В целом это действительно хорошая тема для доклада.

>
> вторник, 18 марта 2014 г. пользователь Ilya Chesnokov написал:
>>
>> 18 марта 2014 г., 21:24 пользователь Андрей П. Ковбович
>>
>> <akovbovich на gmail.com> написал:
>> > Почему не use Moo? Если нет зависимостей от moose, то вполне себе
>> > отличная
>> > альтернатива для ОО.
>>
>> Потому что в Moo нет вообще ни черта - ни библиотеки типов, ни MOP :)
>> Только аксессоры + роли - впрочем, поэтому он и достаточно легковесный.
>> Плюс его аксессоры медленнее, чем XS-ный Mouse (не смог найти запись
>> того доклада с YAPC, про который говорил выше - но насколько помню,
>> XS-решения, и в частности Mouse, рвали всех на бенчмарках).
>>
>> К счастью, есть еще такой проект как mop, который, возможно, окажется
>> в ядре через пару лет: https://github.com/stevan/p5-mop-redux.
>> Тогда все, начинающееся на Mo* можно будет переписывать )
>>
>> Кстати, довольно забавно - появился Moose для Ruby:
>> https://github.com/peczenyj/MooseX
>> --
>> Best regards,
>> Ilya Chesnokov
>> --
>> Moscow.pm mailing list
>> moscow-pm на pm.org | http://moscow.pm.org
>
>
> --
> Moscow.pm mailing list
> moscow-pm на pm.org | http://moscow.pm.org
>



-- 
Best regards,
Ilya Chesnokov


Подробная информация о списке рассылки Moscow-pm