Фар3: Зачем GetPluginInfoW заполняет StructSize?

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

Фар3: Зачем GetPluginInfoW заполняет StructSize?

Post by NightRoman »

Обратил внимание, что GetPluginInfoW заполняет StructSize. По-моему, это
неправильно. Правильно было бы, если бы он заполнял нулями, требовал от плагина
выставить StructSize, и если плагин этого не делает, то выгружать такой плагин.

Сейчас же плагин может схалтурить, и тогда в будущем, когда в структуру будут
добавлены новые поля, то Фар уже не узнает, что плагин "старый" и не может эти
поля заполнить адекватно, и это дает Фару право как-то это по дефолту обработать.
User avatar
Alexey Samlyukov
Posts: 1765
Joined: Tue 15 Mar, 2005 17:28
Been thanked: 7 times
Contact:

Re: Фар3: Зачем GetPluginInfoW заполняет StructSize?

Post by Alexey Samlyukov »

StructSize почти везде сейчас не проверяется в фар, вроде как задел на будущее.
Maximus5
Posts: 3295
Joined: Sun 11 Nov, 2007 02:03
Been thanked: 10 times
Contact:

Re: Фар3: Зачем GetPluginInfoW заполняет StructSize?

Post by Maximus5 »

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: Фар3: Зачем GetPluginInfoW заполняет StructSize?

Post by NightRoman »

Maximus5
Не понял. Юз-кейс можно привести?
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: Фар3: Зачем GetPluginInfoW заполняет StructSize?

Post by NightRoman »

Ты про ситуацию, когда Фар старый? Это глупо, чтобы плагин это учитывал, ибо Фар всегда можно обновить на новый.
А вот обратное не всегда легко (автор плагина может уже и не заниматься плагином).
Maximus5
Posts: 3295
Joined: Sun 11 Nov, 2007 02:03
Been thanked: 10 times
Contact:

Re: Фар3: Зачем GetPluginInfoW заполняет StructSize?

Post by Maximus5 »

Глупо - это когда плагин вызывает падение фара. Недочеты API такого вызывать не должны.
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: Фар3: Зачем GetPluginInfoW заполняет StructSize?

Post by NightRoman »

Maximus5 wrote:Глупо - это когда плагин вызывает падение фара. Недочеты API такого вызывать не должны.
А MinFarVersion на что дана (GetGlobalInfoW)? Не будет никакого падения, если плагин написан грамотно. Проверяться это должно тут и один раз и Фаром. А плагин не должен делать эти проверки в разных местах, где только возможно. Это глупо.
Maximus5
Posts: 3295
Joined: Sun 11 Nov, 2007 02:03
Been thanked: 10 times
Contact:

Re: Фар3: Зачем GetPluginInfoW заполняет StructSize?

Post by Maximus5 »

Кто сказал? Например MANTIS_0000466. Собери плагин в расчете на него и запусти в основной ветке.

Плагин НЕ должен валить фар. Вообще не должен. Если он это делает - это ошибка плагина.
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: Фар3: Зачем GetPluginInfoW заполняет StructSize?

Post by NightRoman »

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

Но если есть разногласия и поводы для них, то тогда одной StructSize недостаточно, надо 2 - одну пишет Фар, другую плагин. Иначе в будущем может оказаться небезопасным расширить эту структуру без ломки АПИ. Но по моему это лишнее. Плагин может версию Фара проверять и делать что-то или не делать в зависимости от этого.

Заполнять одну и ту же в обе стороны - плохо. Плагин может просто халтурить и у Фара не будет возможности это проверить и пресечь такой плуг в зародыше, еще на разработке.
Maximus5
Posts: 3295
Joined: Sun 11 Nov, 2007 02:03
Been thanked: 10 times
Contact:

Re: Фар3: Зачем GetPluginInfoW заполняет StructSize?

Post by Maximus5 »

Суть примера - альтернативная сборка фара, с тем же номером билда, но с большей структурой. Плагин новый, фар (официальный) новый, падение присутствует. Из-за чего - плагин не проверил размер структуры. И кто виноват? Фар что-ли?
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: Фар3: Зачем GetPluginInfoW заполняет StructSize?

Post by NightRoman »

Maximus5 wrote:Суть примера - альтернативная сборка фара, с тем же номером билда, но с большей структурой. Плагин новый, фар (официальный) новый, падение присутствует. Из-за чего - плагин не проверил размер структуры. И кто виноват? Фар что-ли?
Ну так это все хаки (в хорошем смысле) и их последствия. А также то, что версии Фара фактически разные, а формально одинаковые.

Плагинописатели в своих плагинах в общем случае не будут закладываться на то, что структуры АПИ, с которым они были собраны, не соответствуют реальности. Это, может, и было бы идеально, но так просто не разрабатывают в нормальных случаях.
Maximus5
Posts: 3295
Joined: Sun 11 Nov, 2007 02:03
Been thanked: 10 times
Contact:

Re: Фар3: Зачем GetPluginInfoW заполняет StructSize?

Post by Maximus5 »

Я свое IMHO высказал. То, что плагин не проверяет указанный размер структуры, а тупо лепит то, что ему хочется - это не правильно.
Maximus5
Posts: 3295
Joined: Sun 11 Nov, 2007 02:03
Been thanked: 10 times
Contact:

Re: Фар3: Зачем GetPluginInfoW заполняет StructSize?

Post by Maximus5 »

С другой стороны, правильнее было бы, если бы сам плагин выделял память под структуру и заполнял ее размер. Вот тогда - да.
В той архитектуре как есть сейчас - заполнять размер должен фар.
User avatar
DrKnS
Posts: 6114
Joined: Thu 04 Aug, 2005 06:44
Location: Kyiv
Has thanked: 12 times
Been thanked: 426 times

Re: Фар3: Зачем GetPluginInfoW заполняет StructSize?

Post by DrKnS »

К сведению:
В некоторых местах structsize не столько для фара, сколько для т.н. межплагинного взаимодействия, когда оно таки будет.

Пока что он мало где проверяется, но это будет исправлено и плагины, заполняющие неправильно, будут обламываться. Халтурить не надо.
Max Rusov
Posts: 3651
Joined: Wed 23 Nov, 2005 11:11
Location: Москва-Питер
Has thanked: 2 times
Been thanked: 19 times

Re: Фар3: Зачем GetPluginInfoW заполняет StructSize?

Post by Max Rusov »

Согласен с NightRoman, поле StructSize всегда должен заполнять плагин и никогда - FAR.

Вообще со StructSize сейчас какой-то бардак. Большинство вызовов, получающие структуры, этот StructSize не проверяют. Соответственно N-ое количество плагинов его и не заполняют. В результате, когда размер структуры изменится и Far решит этот StructSize все таки проверить, то все такие плагины отвалятся. Спрашивается - за что боролись?..

DrKnS опередил на кнопке :)
Post Reply

Return to “Разработка плагинов”