[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