Size: a a a

2020 November 23

W

Warstone in Modern::Perl
Суть:
У тебя есть пакет-миксин со всем твоим добром. Пусть будет так и называться mixin
У тебя есть твой плагин. Пусть будет назваться plugin
И есть конечный класс, пусть будет называться api.

Варианты решения все крутятся вокруг:
В plugin ты в isa засовываешь модуль заглушку. Что-то типа контракта. А во время инициализации в isa модуль-заглушку пушишь mixin. Таким образом у тебя api настраивает mixin для plugin.
источник

b

basiliscos in Modern::Perl
@Warstone Тут надо сказать, что это "плагинизация наизнанку", немного. В том смысле, что в конечный класс (mixin?) напихиваются плагины, которые потом вызываются. Наоборот, потому, что конечный класс уже знает обо всех плагинах, это точка сборки (в общем-то во время компиляции).

В классическом смысле, прилага/архитектура работает без плагинов. А плагины добавляют опциональный функционал (или модифицируют основной), причём в рантайме.
источник

W

Warstone in Modern::Perl
Напихивается mixin в plugin во время инициализации api. Как наш XServer только проще
источник

VG

Vadim Goncharov in Modern::Perl
а раз уж зашла речь про плагины, насоветуйте, что есть хорошего, может из готового на CPAN, для их реализации? задача - не веб, а классический десктоп, подключение в рантайме
источник

b

basiliscos in Modern::Perl
А что ты для декстопа на перле пишешь?
источник

VG

Vadim Goncharov in Modern::Perl
а есть разница?
источник

b

basiliscos in Modern::Perl
А так проще самому с-му простую плагинов сделать
has plugins => (...);

$_->on_start() for($self->plugins->@*);
$_->on_finish() for($self->plugins->@*);
$_->on_event($event) for($self->plugins->@*);
источник

b

basiliscos in Modern::Perl
Vadim Goncharov
а есть разница?
для реализации нет, просто интересно, что сейчас ещё для десктопа на перле пишут.
источник

b

basiliscos in Modern::Perl
basiliscos
А так проще самому с-му простую плагинов сделать
has plugins => (...);

$_->on_start() for($self->plugins->@*);
$_->on_finish() for($self->plugins->@*);
$_->on_event($event) for($self->plugins->@*);
Впрочем, надо отметить, что система c3-плагинов, будет побыстрей (в плане вызова), ну и, наверное, в плане передачи управления посложней/погибче.
источник

VG

Vadim Goncharov in Modern::Perl
я еще не пишу, я только проектирую :)
источник

VG

Vadim Goncharov in Modern::Perl
basiliscos
для реализации нет, просто интересно, что сейчас ещё для десктопа на перле пишут.
ну вот живой пример с плагинами на питоне прямо сейчас работает
источник

b

basiliscos in Modern::Perl
да, это скорее классические плагины.
источник

VG

Vadim Goncharov in Modern::Perl
хочу нечто подобное
источник

VG

Vadim Goncharov in Modern::Perl
use ..../plugins/*.par выглядит соблазнительно, но внутри что-то всё равно должно быть же
источник

b

basiliscos in Modern::Perl
зачем тебе par для плагинов? Обычный .zip, там xml/json/yaml/toml с метой о плагине (как на скрине), и уже основным файлом/пускалкой.
источник

VG

Vadim Goncharov in Modern::Perl
basiliscos
зачем тебе par для плагинов? Обычный .zip, там xml/json/yaml/toml с метой о плагине (как на скрине), и уже основным файлом/пускалкой.
затем, что доступ и загрузку из зипа в нём уже сделали за меня?..
источник

b

basiliscos in Modern::Perl
par - это пускалка, т.е. perl.exe + zip + твоя борода. Зачем тебе перл шипить каждый раз...?
источник

VG

Vadim Goncharov in Modern::Perl
а, еще кажется лицензия активперла не позволяет интерпретацию произвольных скриптов
источник

VO

Vyacheslav Olkhovche... in Modern::Perl
погоди, ты же для десктопа, причем тут винда?
источник

VG

Vadim Goncharov in Modern::Perl
толсто
источник