Как удалить запись из истории команд?

Столкнулись с проблемой в использовании макросов? Здесь можно получить помощь.
Max Rusov
Posts: 3632
Joined: Wed 23 Nov, 2005 11:11
Location: Москва-Питер
Has thanked: 1 time
Been thanked: 10 times

Re: Как удалить запись из истории команд?

Post by Max Rusov » Thu 26 Dec, 2013 13:23

Latest post of the previous page:

А зачем там вообще ID? Индекса что-ли не хватает?

fml2
Posts: 518
Joined: Mon 09 Jul, 2012 22:10
Has thanked: 1 time
Been thanked: 7 times

Re: Как удалить запись из истории команд?

Post by fml2 » Thu 26 Dec, 2013 13:41

Max Rusov wrote:А зачем там вообще ID? Индекса что-ли не хватает?
Какой индекс вы имеете в виду?

Насколько я понимаю, записи (однозначно) можно удалить только по ключу, коим является ID.

Можно этот ID возвращать как часть Data (например, отделив его ";"). Я понимаю, что все это криво, но что же делать, если надо сохранить бинарную совместимость?!

User avatar
zg
zero-gravity
Posts: 5572
Joined: Tue 15 Mar, 2005 17:36
Location: riga
Been thanked: 89 times
Contact:

Re: Как удалить запись из истории команд?

Post by zg » Thu 26 Dec, 2013 16:48

fml2 wrote:но иногда все же делается
например?

fml2
Posts: 518
Joined: Mon 09 Jul, 2012 22:10
Has thanked: 1 time
Been thanked: 7 times

Re: Как удалить запись из истории команд?

Post by fml2 » Thu 26 Dec, 2013 20:06

Например, Far

2useven10
Posts: 3890
Joined: Mon 07 Sep, 2009 10:40
Has thanked: 4 times
Been thanked: 162 times

Re: Как удалить запись из истории команд?

Post by 2useven10 » Thu 26 Dec, 2013 20:08

fml2 wrote:Например, Far
это не пример, это заявка на бан.

fml2
Posts: 518
Joined: Mon 09 Jul, 2012 22:10
Has thanked: 1 time
Been thanked: 7 times

Re: Как удалить запись из истории команд?

Post by fml2 » Thu 26 Dec, 2013 20:41

2useven10 wrote:
fml2 wrote:Например, Far
это не пример, это заявка на бан.
Не могли бы объяснить, почему? Меня, как я понял, попросили назвать пример проекта, в котором менялся АПИ плагинов, и я выполнил просьбу. Или что-то не так?

User avatar
zg
zero-gravity
Posts: 5572
Joined: Tue 15 Mar, 2005 17:36
Location: riga
Been thanked: 89 times
Contact:

Re: Как удалить запись из истории команд?

Post by zg » Thu 26 Dec, 2013 21:14

нет, вопрос был: когда в фаре ломалась бинарная совместимость после того, как было объявлено что, она ломаться не будет?

fml2
Posts: 518
Joined: Mon 09 Jul, 2012 22:10
Has thanked: 1 time
Been thanked: 7 times

Re: Как удалить запись из истории команд?

Post by fml2 » Thu 26 Dec, 2013 21:49

zg wrote:нет, вопрос был: когда в фаре ломалась бинарная совместимость после того, как было объявлено что, она ломаться не будет?
Так так бы и писали. А то слишком много приходится додумывать.

По существу вопроса (хотя это и не по существу ветки): я не утверждал, что в Фаре ломалась совместимость после того, как было объявлено, что она ломаться не будет. Я сказал, что в проектах иногда ломается совместимость, хотя это и всегда нежелательно. Но ведь это всегда делается не просто так, а потому что есть какая-то потребность.

А что, было объявлено, что нынешнее состояние АПИ -- это до скончания времен? Или только для Фар 3? Или для чего? Просто если это до скончания времен, то не слишком ли Фар сам себя ограничил?

У вас есть какие-нибудь ответы на мои ранее заданные вопросы?

User avatar
zg
zero-gravity
Posts: 5572
Joined: Tue 15 Mar, 2005 17:36
Location: riga
Been thanked: 89 times
Contact:

Re: Как удалить запись из истории команд?

Post by zg » Thu 26 Dec, 2013 21:59

fml2 wrote:А что, было объявлено, что нынешнее состояние АПИ -- это до скончания времен? Или только для Фар 3?
нет. нет.

Max Rusov
Posts: 3632
Joined: Wed 23 Nov, 2005 11:11
Location: Москва-Питер
Has thanked: 1 time
Been thanked: 10 times

Re: Как удалить запись из истории команд?

Post by Max Rusov » Thu 26 Dec, 2013 22:03

fml2 wrote:А что, было объявлено, что нынешнее состояние АПИ -- это до скончания времен? Или только для Фар 3? Или для чего? Просто если это до скончания времен, то не слишком ли Фар сам себя ограничил?
Вроде очевидно - API может развиваться сохраняя бинарную совместимость снизу вверх. Если надо добавить поля в структуру, то поля добавляются в конец структуры, а по полю StructSize определяется заполнены ли они, и т.п.

fml2
Posts: 518
Joined: Mon 09 Jul, 2012 22:10
Has thanked: 1 time
Been thanked: 7 times

Re: Как удалить запись из истории команд?

Post by fml2 » Thu 26 Dec, 2013 23:03

Max Rusov wrote:Если надо добавить поля в структуру, то поля добавляются в конец структуры
Я так и сделал (добавил поле "Id" в конец структуры "FarSettingsHistory")
Max Rusov wrote:а по полю StructSize определяется заполнены ли они
Но в этой структуре нет поля "StructSize".

Насколько я понимаю, единственным местом, в котором АПИ из-за добавления этого поля может "сломаться", является функция для перечисления опций (plugapi.cpp, функция "apiSettingsControl", ветка "SCTL_ENUM"). Но там уже стоит какая-то проверка "CheckStructSize". Это не является гарантией совместимости АПИ "снизу вверх"?

Тут один участник форума (zg) утверждал, что добавление поля ломает АПИ. Но так и не сказал, почему.

А вы понимаете, почему? И как сделать, чтобы он все же остался совместимым?

И еще: вы тут ранее упомянули какой-то индекс, по которому можно было бы удалять записи из истории. Вы не могли бы подробнее объяснить, что вы имели в виду?

Shmuel
Posts: 5836
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 22 times
Been thanked: 213 times

Re: Как удалить запись из истории команд?

Post by Shmuel » Thu 26 Dec, 2013 23:12

fml2 wrote:Тут один участник форума (zg) утверждал, что добавление поля ломает АПИ. Но так и не сказал, почему.
Возьмите Far с вашим патчем, а LuaFAR - без оного, и попробуйте получить список историй. Вы увидите, что это перестало работать. LuaFAR без вашего патча + LuaMacro - это пример плагина, который не будет работать из-за поломанной совместимости.

Хорошо, LuaFAR вы подправили, а как быть с остальными плагинами?

fml2
Posts: 518
Joined: Mon 09 Jul, 2012 22:10
Has thanked: 1 time
Been thanked: 7 times

Re: Как удалить запись из истории команд?

Post by fml2 » Thu 26 Dec, 2013 23:19

В то, что он ломает, я верю. Но не очень понимаю, почему (ведь есть проверка на размер). И еще меньше понимаю, как сделать, чтобы не ломал (Max Rusov говорит, что это возможно -- как я понял, просто соблюдая некие "правила гигиены").

Shmuel
Posts: 5836
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 22 times
Been thanked: 213 times

Re: Как удалить запись из истории команд?

Post by Shmuel » Thu 26 Dec, 2013 23:24

Я несколько неточно выразился: LuaFAR нужно взять, скомпилированный с plugin.hpp, к которому не применялся ваш патч.
fml2 wrote:В то, что он ломает, я верю. Но не очень понимаю, почему (ведь есть проверка на размер).
Я мог бы объяснить, но раз вы берётесь модифицировать Фар, то должны уметь докапываться сами, тем более, что это на поверхности.

Max Rusov
Posts: 3632
Joined: Wed 23 Nov, 2005 11:11
Location: Москва-Питер
Has thanked: 1 time
Been thanked: 10 times

Re: Как удалить запись из истории команд?

Post by Max Rusov » Thu 26 Dec, 2013 23:46

fml2 wrote:И еще: вы тут ранее упомянули какой-то индекс, по которому можно было бы удалять записи из истории. Вы не могли бы подробнее объяснить, что вы имели в виду?
Если есть Count то то идентифицировать элемент можно по индексу, использование какого-то ID - мне непонятно зачем. Но в исходники я не лез, поэтому что-то более конкретное не скажу.

Shmuel
Posts: 5836
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 22 times
Been thanked: 213 times

Re: Как удалить запись из истории команд?

Post by Shmuel » Thu 26 Dec, 2013 23:57

Shmuel wrote:Я мог бы объяснить, но раз вы берётесь модифицировать Фар, то должны уметь докапываться сами, тем более, что это на поверхности.
Ладно, не буду занудой:

- в структуре FarSettingsEnum, есть указатель на массив const struct FarSettingsHistory* Histories.

- размер структуры FarSettingsHistory в Фаре увеличился после вашего патча, но старые плагины этого не знают (они скомпилированы со старым plugin.hpp) и при итерации по массиву Histories будет применяться прежний размер данной структуры, что, естественно, приведёт к неработоспособности, а скорее всего и к падению.

fml2
Posts: 518
Joined: Mon 09 Jul, 2012 22:10
Has thanked: 1 time
Been thanked: 7 times

Re: Как удалить запись из истории команд?

Post by fml2 » Fri 27 Dec, 2013 00:01

Shmuel wrote:Я несколько неточно выразился: LuaFAR нужно взять, скомпилированный с plugin.hpp, к которому не применялся ваш патч.
Я так вас и понял.
Shmuel wrote:Я мог бы объяснить, но раз вы берётесь модифицировать Фар, то должны уметь докапываться сами, тем более, что это на поверхности
Разработчики Фар -- суровые люди без сантиментов! :-) Мне кажется (но я не уверен), что я понимаю, почему ломается: производитель (Фар) посылает/заполняет массив структурами одного размера (с новым полем), а потребитель (плагин) пытается читать их, думая, что они еще старого (меньшего) размера. В результате указатели как-нибудь не так считываются и т.д. и т.п.

Но как это все предотвратить? Ведь производитель не может знать, как его результаты будет читать потребитель.

Но, черт возьми, -- как?! (Ватсон)

Post Reply

Return to “Нужна помощь”