ProcessMacroFuncW

Разработка Far.
User avatar
John Doe
Бюрократ
Posts: 13807
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 73 times
Been thanked: 426 times
Contact:

Re: ProcessMacroFuncW

Post by John Doe »

Latest post of the previous page:

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: ProcessMacroFuncW

Post by NightRoman »

John Doe wrote:Что именно понятно?
Понятно, что есть затыка, а не проект заброшен. И это хорошо. Выбирать предлагаемые варианты я не берусь, ибо у меня есть сомнения в принципе подхода вообще. По мне - слишком сложный инструментарий выбран для этой задачи.
User avatar
Skirda
Posts: 3475
Joined: Wed 16 Mar, 2005 11:01
Been thanked: 8 times

Re: ProcessMacroFuncW

Post by Skirda »

Какие калплюгины и тем более эксы?
Вы меня слушаете или вы писатели?

Т.е. вы считаете, что юзеру проще в макросах написать (а потом ломать голову, что же эта конструкция обозначает):

Code: Select all

callplugin("GUID или хрен его знает что","sin",%i)/callplugin("GUID или хрен его знает что","cos",PI)
чем

Code: Select all

sin(%i)/cos(PI)
?

Или вы беспокоитесь за то, что вам (плагинописателям, функция сабжа) больше писать придеться?
We are the Borg. You will be assimilated.
So Say We All!
User avatar
Skirda
Posts: 3475
Joined: Wed 16 Mar, 2005 11:01
Been thanked: 8 times

Re: ProcessMacroFuncW

Post by Skirda »

Max Rusov wrote:А не рассматривался вариант, который я предлагал здесь
да, про намеспасе я забыл написать, tnx
на счет грузить потом - а смысл? или у тебя разница между загрузкой фара с макросами и без в десятки раз различается (по скорости)?
We are the Borg. You will be assimilated.
So Say We All!
Max Rusov
Posts: 3651
Joined: Wed 23 Nov, 2005 11:11
Location: Москва-Питер
Has thanked: 2 times
Been thanked: 19 times

Re: ProcessMacroFuncW

Post by Max Rusov »

Нет, смысл в другом. В реестр не надо будет писать определения макрофункций - только namespace. Когда дело доходит до разбора макросов сначала парсится namespace (math.sin(1)). Встретив namespace можно загрузить соответствующий плагин (связь namespace-плагин мы знаем), он, при загрузке, зарегистрируем свои функции - парсер может продолжить работу.

Если парсить все макросы сразу данная оптимизация теряет смысл, так как сразу загрузятся все плагины экспортирующие функции.
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: ProcessMacroFuncW

Post by NightRoman »

Skirda
Если бы макросы были основным инструментом автоматизации Фар или бы сложность реализации 1 и 2 были бы сравнимы, я бы согласился на 2 безоговорочно, а так - не уверен.

Первый вариант имеет и плюсы при всей развесистости, сразу ясно, что вызываются плагины, а не что-то еще, встроенные макро-функци, например. Лично меня первый вариант нисколько не пугает, абсолютно. По сравнению с тем как выглядит программирование в макросах вообще, это вполне нормально.

Хочется иметь простой способ вызова плуга из макроса не через меню, без которого вообще можно обойтись и не мусорить в UI, а напрямую. Такие макросы это одна строка типа:

Code: Select all

CallPluginByPrefix("prefix: operation param")
Также вызывается из комстроки:

Code: Select all

> prefix: operation param
И ничего не надо настраивать и регистрировать вообще, кроме префиксов. Но это уже сделано в Фаре.

Хорошо, понятно вроде, что никто не против этого варианта, но он и не планируется. Но предложить я считал не лишним.
User avatar
John Doe
Бюрократ
Posts: 13807
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 73 times
Been thanked: 426 times
Contact:

Re: ProcessMacroFuncW

Post by John Doe »

Max Rusov wrote:В реестр не надо будет писать определения макрофункций - только namespace.
А в чём тут выигрыш?
Yegor
Posts: 1326
Joined: Mon 04 Apr, 2005 13:41
Location: San Ramon, CA / Kharkov, UA
Has thanked: 32 times
Been thanked: 61 times

Re: ProcessMacroFuncW

Post by Yegor »

1) Я, все-таки, за человеческий вариант:

Code: Select all

sin(%i)/cos(PI)
2) Я за (обязательное?) наличие namespace-ов/объектов:

Code: Select all

MyMath.sin(%i)/YourMath.cos(PI)
3) Не вижу проблемы регистрировать namespaces в реестре (даже руками).
Например, в Firebird/Interbase "user defined functions" должны быть зарегистрированы в базе, перед использованием.

4) Интерфейс для регистрации и использования namespace/объектов/ф-й можно слизать у MS с его IActiveScript.
Соответственно плагины должны возвращать объекты с реализацией IDispatch и быть похожими на COM объекты

Это мысли вслух.
Мы не можем ждать милостей от Фара, взять их у него — наша задача! (C) Мичурин
User avatar
Tim Sobolev
Posts: 729
Joined: Fri 01 Apr, 2005 14:46
Location: Украина
Has thanked: 1 time
Been thanked: 7 times

Re: ProcessMacroFuncW

Post by Tim Sobolev »

John Doe wrote:а)3.фар спросил, и записал в реестр (при условии что такой записи ещё нет).
б)1.только тот, что прописан в реестре.
Тоже так считаю, причём каждый плагин предоставляет один или несколько namespac'ов, связанных только с ним для однозначного указания нужной макрофункции.
User avatar
John Doe
Бюрократ
Posts: 13807
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 73 times
Been thanked: 426 times
Contact:

Re: ProcessMacroFuncW

Post by John Doe »

Как насчёт одноимённых неймспейсов, тоже надо предусматривать?
А ситуация с одноимёнными функциями может разрулиться и без неймспейсов, через переопределение названия в реестре.
User avatar
SUSim
Posts: 1636
Joined: Thu 18 Feb, 2010 17:32
Has thanked: 9 times
Been thanked: 26 times

Re: ProcessMacroFuncW

Post by SUSim »

Конечно написать sin(%a) проще, чем callplugin({Guid},sin,%a) но заморачиваться по этому поводу, ИМХО, не надо...
нэйм спэйс, по моему не нужен, проще разрулить в реестре при коллизиях - типа алиасов.

Да, кстати, проще ввести алиасы, да их и вводить почти не придется (есть же eval(%%макрос_пременной)) там каждый может прописать все что ожидает... только чуть расширить бы его чтобы параметры передать...
SimSU ··· ·· -- ··· ··-
User avatar
Tim Sobolev
Posts: 729
Joined: Fri 01 Apr, 2005 14:46
Location: Украина
Has thanked: 1 time
Been thanked: 7 times

Re: ProcessMacroFuncW

Post by Tim Sobolev »

John Doe wrote:Как насчёт одноимённых неймспейсов, тоже надо предусматривать?
А ситуация с одноимёнными функциями может разрулиться и без неймспейсов, через переопределение названия в реестре.
Неймспейс должен однозначно характеризовать макро-модуль. Если совпадают -- выводим предупреждение с именем модулей, где дублируются и не грузим или грузим первый попавшийся. А городить гуиды в текст макроса вообще не кошерно.
User avatar
Skirda
Posts: 3475
Joined: Wed 16 Mar, 2005 11:01
Been thanked: 8 times

Re: ProcessMacroFuncW

Post by Skirda »

Max Rusov wrote:Если парсить все макросы сразу данная оптимизация теряет смысл, так как сразу загрузятся все плагины экспортирующие функции.
Не будут они вызываться каждый раз. Для этого "библиотека" в реестре и нужна (KeyMacro\Funcs). Парсер именно туда смотрит и если чего там не находит - матерится.
А вот когда дело доходит до исполнятора, то он да, попросит менеджер плагинов передать "вот эту какашку вот этому плагину"
We are the Borg. You will be assimilated.
So Say We All!
User avatar
Skirda
Posts: 3475
Joined: Wed 16 Mar, 2005 11:01
Been thanked: 8 times

Re: ProcessMacroFuncW

Post by Skirda »

NightRoman wrote:Хорошо, понятно вроде, что никто не против этого варианта, но он и не планируется. Но предложить я считал не лишним.
Так, понял.
Это не относится к сабжу. Идея нормальная, но несколько в иной плоскости. Для этого нужно допилить каллплюгин. Считай, что это другой вариант вызова макрофункций (который давай обсуждать не здесь).
We are the Borg. You will be assimilated.
So Say We All!
Shmuel
Posts: 6820
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 41 times
Been thanked: 528 times

Re: ProcessMacroFuncW

Post by Shmuel »

В качестве нейм-спейсов можно использовать префиксы командной строки плагинов.
User avatar
Skirda
Posts: 3475
Joined: Wed 16 Mar, 2005 11:01
Been thanked: 8 times

Re: ProcessMacroFuncW

Post by Skirda »

Shmuel wrote:В качестве нейм-спейсов можно использовать префиксы командной строки плагинов.
хмм... пельмени с малиновым вареньем? оригинально.
We are the Borg. You will be assimilated.
So Say We All!
Post Reply

Return to “Development”