Page 4 of 5

Re: ProcessMacroFuncW

Posted: Tue 30 Nov, 2010 14:33
by John Doe

Latest post of the previous page:

NightRoman wrote:С затыкой понятно...
Что именно понятно? Выше перечислены альтернативы.

Re: ProcessMacroFuncW

Posted: Tue 30 Nov, 2010 14:40
by NightRoman
John Doe wrote:Что именно понятно?
Понятно, что есть затыка, а не проект заброшен. И это хорошо. Выбирать предлагаемые варианты я не берусь, ибо у меня есть сомнения в принципе подхода вообще. По мне - слишком сложный инструментарий выбран для этой задачи.

Re: ProcessMacroFuncW

Posted: Tue 30 Nov, 2010 15:30
by Skirda
Какие калплюгины и тем более эксы?
Вы меня слушаете или вы писатели?

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

Code: Select all

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

Code: Select all

sin(%i)/cos(PI)
?

Или вы беспокоитесь за то, что вам (плагинописателям, функция сабжа) больше писать придеться?

Re: ProcessMacroFuncW

Posted: Tue 30 Nov, 2010 15:34
by Skirda
Max Rusov wrote:А не рассматривался вариант, который я предлагал здесь
да, про намеспасе я забыл написать, tnx
на счет грузить потом - а смысл? или у тебя разница между загрузкой фара с макросами и без в десятки раз различается (по скорости)?

Re: ProcessMacroFuncW

Posted: Tue 30 Nov, 2010 15:48
by Max Rusov
Нет, смысл в другом. В реестр не надо будет писать определения макрофункций - только namespace. Когда дело доходит до разбора макросов сначала парсится namespace (math.sin(1)). Встретив namespace можно загрузить соответствующий плагин (связь namespace-плагин мы знаем), он, при загрузке, зарегистрируем свои функции - парсер может продолжить работу.

Если парсить все макросы сразу данная оптимизация теряет смысл, так как сразу загрузятся все плагины экспортирующие функции.

Re: ProcessMacroFuncW

Posted: Tue 30 Nov, 2010 15:50
by NightRoman
Skirda
Если бы макросы были основным инструментом автоматизации Фар или бы сложность реализации 1 и 2 были бы сравнимы, я бы согласился на 2 безоговорочно, а так - не уверен.

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

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

Code: Select all

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

Code: Select all

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

Хорошо, понятно вроде, что никто не против этого варианта, но он и не планируется. Но предложить я считал не лишним.

Re: ProcessMacroFuncW

Posted: Tue 30 Nov, 2010 16:15
by John Doe
Max Rusov wrote:В реестр не надо будет писать определения макрофункций - только namespace.
А в чём тут выигрыш?

Re: ProcessMacroFuncW

Posted: Tue 30 Nov, 2010 16:27
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 объекты

Это мысли вслух.

Re: ProcessMacroFuncW

Posted: Tue 30 Nov, 2010 17:28
by Tim Sobolev
John Doe wrote:а)3.фар спросил, и записал в реестр (при условии что такой записи ещё нет).
б)1.только тот, что прописан в реестре.
Тоже так считаю, причём каждый плагин предоставляет один или несколько namespac'ов, связанных только с ним для однозначного указания нужной макрофункции.

Re: ProcessMacroFuncW

Posted: Tue 30 Nov, 2010 18:14
by John Doe
Как насчёт одноимённых неймспейсов, тоже надо предусматривать?
А ситуация с одноимёнными функциями может разрулиться и без неймспейсов, через переопределение названия в реестре.

Re: ProcessMacroFuncW

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

Да, кстати, проще ввести алиасы, да их и вводить почти не придется (есть же eval(%%макрос_пременной)) там каждый может прописать все что ожидает... только чуть расширить бы его чтобы параметры передать...

Re: ProcessMacroFuncW

Posted: Tue 30 Nov, 2010 19:21
by Tim Sobolev
John Doe wrote:Как насчёт одноимённых неймспейсов, тоже надо предусматривать?
А ситуация с одноимёнными функциями может разрулиться и без неймспейсов, через переопределение названия в реестре.
Неймспейс должен однозначно характеризовать макро-модуль. Если совпадают -- выводим предупреждение с именем модулей, где дублируются и не грузим или грузим первый попавшийся. А городить гуиды в текст макроса вообще не кошерно.

Re: ProcessMacroFuncW

Posted: Tue 30 Nov, 2010 20:04
by Skirda
Max Rusov wrote:Если парсить все макросы сразу данная оптимизация теряет смысл, так как сразу загрузятся все плагины экспортирующие функции.
Не будут они вызываться каждый раз. Для этого "библиотека" в реестре и нужна (KeyMacro\Funcs). Парсер именно туда смотрит и если чего там не находит - матерится.
А вот когда дело доходит до исполнятора, то он да, попросит менеджер плагинов передать "вот эту какашку вот этому плагину"

Re: ProcessMacroFuncW

Posted: Tue 30 Nov, 2010 20:09
by Skirda
NightRoman wrote:Хорошо, понятно вроде, что никто не против этого варианта, но он и не планируется. Но предложить я считал не лишним.
Так, понял.
Это не относится к сабжу. Идея нормальная, но несколько в иной плоскости. Для этого нужно допилить каллплюгин. Считай, что это другой вариант вызова макрофункций (который давай обсуждать не здесь).

Re: ProcessMacroFuncW

Posted: Tue 30 Nov, 2010 21:40
by Shmuel
В качестве нейм-спейсов можно использовать префиксы командной строки плагинов.

Re: ProcessMacroFuncW

Posted: Wed 01 Dec, 2010 07:34
by Skirda
Shmuel wrote:В качестве нейм-спейсов можно использовать префиксы командной строки плагинов.
хмм... пельмени с малиновым вареньем? оригинально.