Адаптеры (или плагины на любых языках и с любым интерфейсом)

Разработка Far.
User avatar
DrKnS
Posts: 6114
Joined: Thu 04 Aug, 2005 06:44
Location: Kyiv
Has thanked: 12 times
Been thanked: 426 times

Re: Адаптеры (или плагины на любых языках и с любым интерфей

Post by DrKnS »

Latest post of the previous page:

Не правильнее ли спросить "адаптер" пусть поищет, скажет сколько у него плагинов, даст список?
-- Что если плагин хочет модули где-то отдельно иметь, например, как Фарнет сейчас?
Люди, вы тему читали?
Речь не о "плагинах с сабплагинами", речь о "прослойках", которые позволят считать плагинами то, что раньше считать плагинами было нельзя.

Если всё еще не понятно: в линухах например есть wine и mono, который позволяют совершенно чуждые операционке бинарники считать таки программами.
Но не за счёт написания одного большого линухового исполняемого файла, который бы "давал список, а модули где-то отдельно имел", а за счёт прослойки, прозрачно транслирующей чуждые вызовы в понятный системе формат.
User avatar
NightRoman
Posts: 6184
Joined: Fri 18 Aug, 2006 13:52
Location: Cambridge, UK
Has thanked: 32 times
Been thanked: 62 times
Contact:

Re: Адаптеры (или плагины на любых языках и с любым интерфей

Post by NightRoman »

Речь не о "плагинах с сабплагинами", речь о "прослойках", которые позволят считать плагинами то, что раньше считать плагинами было нельзя.
Хорошо, Фарнет сюда теоретически подходит. Чтобы новой фичей воспользоваться, мне надо модули иметь в папке/подпапках плагина, правильно? И только так?

А вопрос про ДЛЛ-ки прослоек/модулей? Их Фар будет пытаться грузить, как обычные плагины?
User avatar
zg
zero-gravity
Posts: 6016
Joined: Tue 15 Mar, 2005 17:36
Location: riga
Been thanked: 185 times
Contact:

Re: Адаптеры (или плагины на любых языках и с любым интерфей

Post by zg »

NightRoman wrote:Хорошо, Фарнет сюда теоретически подходит. Чтобы новой фичей воспользоваться, мне надо модули иметь в папке/подпапках плагина, правильно? И только так?
какого плагина?
А вопрос про ДЛЛ-ки прослоек/модулей? Их Фар будет пытаться грузить, как обычные плагины?
нет, они лежат в другой папке и грузятся специальным образом.
User avatar
NightRoman
Posts: 6184
Joined: Fri 18 Aug, 2006 13:52
Location: Cambridge, UK
Has thanked: 32 times
Been thanked: 62 times
Contact:

Re: Адаптеры (или плагины на любых языках и с любым интерфей

Post by NightRoman »

какого плагина?
FarNetMan.dll
нет, они лежат в другой папке и грузятся специальным образом.
А, это я где-то пропустил, в какой папке?
User avatar
NightRoman
Posts: 6184
Joined: Fri 18 Aug, 2006 13:52
Location: Cambridge, UK
Has thanked: 32 times
Been thanked: 62 times
Contact:

Re: Адаптеры (или плагины на любых языках и с любым интерфей

Post by NightRoman »

Может, о "модульном" подходе подумать? Например, таком.

В папке плагина может быть специальная папка Modules (имя можно другое, но фиксированное). Если ее нет, то плагин модулей и не имеет. Если она есть, то плагин поддерживает модули. И Фар не сканирует ее на наличие ДЛЛ обычных плагинов, при поиске плагинов просто пропускает ее. Вместо этого Фар сканирует только папки в Modules. Правило: один модуль - одна папка в папке Modules, подпапки не сканируются. Дальше Фар для каждой папки запрашивает у адаптера по ее имени все, что нужно. Адаптер по своим правилам уже разбирается, что в каждой папке и как с этим он работает (грузит, выгружает, передает вызовы).

Т.е. Фару не нужно сканировать все файлы, их может быть много, неэффективно. Нет двоякости с ДЛЛ файлами (это обычный плагин или модуль плагина?).

По одной папке на модуль/суб-плагин/т.п., по своему, логично иметь. Удобно иметь/обновлять сопутствующие lng, hlp, readme и прочие файлы все вместе в одной папке.
User avatar
NightRoman
Posts: 6184
Joined: Fri 18 Aug, 2006 13:52
Location: Cambridge, UK
Has thanked: 32 times
Been thanked: 62 times
Contact:

Re: Адаптеры (или плагины на любых языках и с любым интерфей

Post by NightRoman »

Или я совсем о другом, а не о том, что эта система будет реализовывать? Или иными словами, Фарнет в эту новую систему вписывать стоит? Меня в этом плане, конечно, интересует в первую очередь.
User avatar
DrKnS
Posts: 6114
Joined: Thu 04 Aug, 2005 06:44
Location: Kyiv
Has thanked: 12 times
Been thanked: 426 times

Re: Адаптеры (или плагины на любых языках и с любым интерфей

Post by DrKnS »

NightRoman wrote:Хорошо, Фарнет сюда теоретически подходит. Чтобы новой фичей воспользоваться, мне надо модули иметь в папке/подпапках плагина, правильно? И только так?
Неправильно.
Чтобы фичей воспользоваться, надо иметь:

1. один нативный модуль в %farhome%\adapters, который:
- реализует описанный выше интерфейс;
- умеет как-то загружать модули в известном ему формате по тем путям, которые ему дадут;
- умеет как-то оборачивать far api в свою объектную модель и предоставлять её этим модулям.

2. произвольное количество модулей, использующих придуманную тобой объектную модель, лежащих в %farhome%\plugins или любом другом месте, в котором фар умеет искать плагины.
User avatar
NightRoman
Posts: 6184
Joined: Fri 18 Aug, 2006 13:52
Location: Cambridge, UK
Has thanked: 32 times
Been thanked: 62 times
Contact:

Re: Адаптеры (или плагины на любых языках и с любым интерфей

Post by NightRoman »

Спасибо, так понятнее становится. Надо обдумать в таком ключе.
User avatar
NightRoman
Posts: 6184
Joined: Fri 18 Aug, 2006 13:52
Location: Cambridge, UK
Has thanked: 32 times
Been thanked: 62 times
Contact:

Re: Адаптеры (или плагины на любых языках и с любым интерфей

Post by NightRoman »

Но вопросик с ДЛЛ-ками остается. Если нестандартные плагины все же имеют ДЛЛ-ки в своих директориях %farhome%\plugins, то не хотелось бы, чтобы Фар их дергал на предмет попытки загрузки обычного плагина. Может, для таких плагинов все ж отдельную папку иметь? Да и чтобы обычные плагины не сканировать и проверять их на предмет их необычности напрасно.
User avatar
NightRoman
Posts: 6184
Joined: Fri 18 Aug, 2006 13:52
Location: Cambridge, UK
Has thanked: 32 times
Been thanked: 62 times
Contact:

Re: Адаптеры (или плагины на любых языках и с любым интерфей

Post by NightRoman »

И ведь наверное не планируется ситуация, когда на один псевдоплагин будет 2+ адаптеров. Тогда псевдоплагины конкретного адаптера в его папку и напрашиваются (например, %farhome%\adapters\adapterX\plugins). Тоже упрощается сканирование при этом, уже ясно, какого адаптера плагины. А то при N адаптерах порядка N*M проверок придется делать для M файлов-кандидатов. Может быть неэффективно со временем.
User avatar
HaRT
Moderator
Posts: 10822
Joined: Tue 30 Aug, 2005 17:21
Has thanked: 221 times
Been thanked: 358 times

Re: Адаптеры (или плагины на любых языках и с любым интерфей

Post by HaRT »

NightRoman wrote:Тогда псевдоплагины конкретного адаптера в его папку и напрашиваются.
Не скажите!
Адаптеры могут быть общесистемные, а псевдо-плагины у каждого пользователя свои.
Фар есть инструмент, а не нянька. © 2009 DrKnS
User avatar
NightRoman
Posts: 6184
Joined: Fri 18 Aug, 2006 13:52
Location: Cambridge, UK
Has thanked: 32 times
Been thanked: 62 times
Contact:

Re: Адаптеры (или плагины на любых языках и с любым интерфей

Post by NightRoman »

HaRT wrote:
NightRoman wrote:Тогда псевдоплагины конкретного адаптера в его папку и напрашиваются.
Не скажите!
Адаптеры могут быть общесистемные, а псевдо-плагины у каждого пользователя свои.
Поясни, пожалуйста, тогда ситуацию, когда для одного файла 2 адаптера найдется. Это как 2 плагина будет Фаром трактоваться? Может быть, но все равно юз-кейс бы какой хотелось представить.
User avatar
DrKnS
Posts: 6114
Joined: Thu 04 Aug, 2005 06:44
Location: Kyiv
Has thanked: 12 times
Been thanked: 426 times

Re: Адаптеры (или плагины на любых языках и с любым интерфей

Post by DrKnS »

не хотелось бы, чтобы Фар их дергал на предмет попытки загрузки обычного плагина
Far обнюхивает всё подряд с тех самых пор, как в нём появилась поддержка плагинов, и ничего, вроде особо никто не жаловался.
А то при N адаптерах порядка N*M проверок придется делать для M файлов-кандидатов. Может быть неэффективно со временем.
Будет неэффективно - расширим кеш понятием "не плагин", но сильно сомневаюсь, что такая ситуация возникнет в принципе.
Это как 2 плагина будет Фаром трактоваться?
Нет. Кто первый встал - того и тапки.
User avatar
NightRoman
Posts: 6184
Joined: Fri 18 Aug, 2006 13:52
Location: Cambridge, UK
Has thanked: 32 times
Been thanked: 62 times
Contact:

Re: Адаптеры (или плагины на любых языках и с любым интерфей

Post by NightRoman »

Если адаптеры класть в обычную папку %farhome%\plugins, а их модули в их специальную подпапку (modules, plugins, все равно как назвать), то есть еще один потенциальный плюс - адаптер по своему желанию может быть также и сам плагином. Например, предоставлять какой-то общий UI, команды меню, комстроки, и настройки, характерные для всех его модулей.
User avatar
NightRoman
Posts: 6184
Joined: Fri 18 Aug, 2006 13:52
Location: Cambridge, UK
Has thanked: 32 times
Been thanked: 62 times
Contact:

Re: Адаптеры (или плагины на любых языках и с любым интерфей

Post by NightRoman »

DrKnS wrote:
Это как 2 плагина будет Фаром трактоваться?
Нет. Кто первый встал - того и тапки.
Ну тогда точно лучше адаптеры в папке обычных плагинов держать, а их модули в их специальной подпапке. Это оптимально для сканирования и есть плюс, описанный выше (адаптер может и сам обычным плагином быть, по желанию). Да и операция убрать/добавить все скопом - и адаптер, и все его плюшки - будет проще, ибо все в одной папке.
User avatar
DrKnS
Posts: 6114
Joined: Thu 04 Aug, 2005 06:44
Location: Kyiv
Has thanked: 12 times
Been thanked: 426 times

Re: Адаптеры (или плагины на любых языках и с любым интерфей

Post by DrKnS »

Ну тогда точно лучше адаптеры в папке обычных плагинов держать, а его модули в его специальной подпапке. Это оптимально для сканирования и есть плюс, описанный выше (адаптер может и сам обычным плагином быть, по желанию)
Это не оптимально для пользователя.
Я вот, например, хочу, скачав какой-то lua- или ps1-скрипт с форума и зная, что у меня есть соответствующий рантайм, тупо кинуть его в plugins (или вообще загрузить по load:), а не блуждать по этим вашим иерархическим структурам папок.
адаптер по своему желанию может быть также и сам плагином. Например, предоставлять какой-то общий UI, команды меню, комстроки, и настройки, характерные для всех его модулей.
Так это уже сейчас можно. Делаешь пустой плагин "commonUI", в адаптере смотришь - если это он, выдаешь какие-то встроенные фичи.
Post Reply

Return to “Development”