Plugin.Call vs. Lua API

Здесь обсуждается всё, что касается макросов.
Shmuel
Posts: 6840
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 41 times
Been thanked: 530 times

Plugin.Call vs. Lua API

Post by Shmuel »

gotar wrote:Плагин умеет выполнять какое-то действия. Предполагается, что эти действия будет вызываться из макроса на Lua. Мне кажется естественным, чтобы plugin предоставлял функции для выполнения этих действий. Для этого нужно использовать хорошо задокументированный интерфейс С/С++ к Lua( а не plugin.call). Нет?
Такой интерфейс существует, называется Lua API. Но для его использования плагин должен быть динамически слинкован c lua5.1.dll (или использовать LoadLibraryW, GetProcAddress).

Примечание модератора: связанная тема http://forum.farmanager.com/viewtopic.php?f=15&t=8856
User avatar
John Doe
Бюрократ
Posts: 13866
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 74 times
Been thanked: 428 times
Contact:

Re: Plugin.require — функция-враппер на замену Plugin.Call и

Post by John Doe »

Shmuel wrote:Такой интерфейс существует, называется Lua API. Но для его использования плагин должен быть динамически слинкован c lua5.1.dll (или использовать LoadLibraryW, GetProcAddress).
А кроме этого, много ли усилий требуется от автора плагина, для того чтобы предоставить макросам библиотеку функций своего плагина?
И после этого сможет ли он работать без Lua5.1.dll (при необходимости)?
Shmuel
Posts: 6840
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 41 times
Been thanked: 530 times

Re: Plugin.require — функция-враппер на замену Plugin.Call и

Post by Shmuel »

1. Сопоставимо с Plugin.Call.
2. Да, если использовать LoadLibraryW, GetProcAddress, то-есть явно проверять наличие.

Преимущества такого подхода:
-- плагин вернёт таблицу, содержащую его функции с их именами (так же, как традиционный Lua-модуль).
-- функции не будут иметь ограничений по типам данных, которые есть у Plugin.Call.
User avatar
John Doe
Бюрократ
Posts: 13866
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 74 times
Been thanked: 428 times
Contact:

Re: Plugin.require — функция-враппер на замену Plugin.Call и

Post by John Doe »

В таком случае, может быть стоит перейти на Lua API, и забыть навсегда о Plugin.Call?
Shmuel
Posts: 6840
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 41 times
Been thanked: 530 times

Re: Plugin.require — функция-враппер на замену Plugin.Call и

Post by Shmuel »

Наверное, сначала надо сделать опытный образец и поиграться с ним.
User avatar
John Doe
Бюрократ
Posts: 13866
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 74 times
Been thanked: 428 times
Contact:

Re: Plugin.require — функция-враппер на замену Plugin.Call и

Post by John Doe »

Поиграться определённо надо, т.к. есть много ньюансов.
Люди хотят, чтобы все фунции были доступны "из коробки", без необходимости require.
И потенциально возможен конфликт неймспейсов (полагаю не проблема, просто нужно учесть)
Также стоит предусмотреть в таблице ряд обязательных сервисных функций (Menu, Config, Command, Id, и т.д.)
И нужна возможность вызывать всё это хозяйство асинхронно.
Shmuel
Posts: 6840
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 41 times
Been thanked: 530 times

Re: Plugin.require — функция-враппер на замену Plugin.Call и

Post by Shmuel »

"Люди хотят..." - это несерьёзно.
Конфликта неймспейсов при "require" не возникает, если модуль сам не устанавливает глобальные переменные.
Механизм асинхронного вызова определяет Фар, а не плагин.
User avatar
John Doe
Бюрократ
Posts: 13866
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 74 times
Been thanked: 428 times
Contact:

Re: Plugin.require — функция-враппер на замену Plugin.Call и

Post by John Doe »

Хотят они на полном серьёзе. Но мне-то без разницы, против необходимости require не возражаю.

Что касается асинхронного вызова: пусть определяет фар, лишь бы был эффект.
Возможно ли реализовать некую функцию типа asyncCall(f, f_params) ?
User avatar
John Doe
Бюрократ
Posts: 13866
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 74 times
Been thanked: 428 times
Contact:

Re: Plugin.require — функция-враппер на замену Plugin.Call и

Post by John Doe »

Shmuel wrote:Конфликта неймспейсов при "require" не возникает
И всё равно остаётся место для конфликта.
Что если 2 плагина возьмут себе одинаковые имена?
Я понимаю что вероятность мало отличается от нуля, но должен же быть способ обойти потенциальный конфликт?
User avatar
zg
zero-gravity
Posts: 6038
Joined: Tue 15 Mar, 2005 17:36
Location: riga
Been thanked: 185 times
Contact:

Re: Plugin.require — функция-враппер на замену Plugin.Call и

Post by zg »

John Doe wrote:но должен же быть способ обойти потенциальный конфликт?
гуид.
User avatar
John Doe
Бюрократ
Posts: 13866
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 74 times
Been thanked: 428 times
Contact:

Re: Plugin.require — функция-враппер на замену Plugin.Call и

Post by John Doe »

Т.е. require наряду с именем (Title) должен принимать и guid (в текстовом представлении).

Есть ещё ModuleName, моя "реализация" его использует.
Max Rusov
Posts: 3651
Joined: Wed 23 Nov, 2005 11:11
Location: Москва-Питер
Has thanked: 2 times
Been thanked: 19 times

Re: Plugin.require — функция-враппер на замену Plugin.Call и

Post by Max Rusov »

John Doe wrote:В таком случае, может быть стоит перейти на Lua API, и забыть навсегда о Plugin.Call?
Не стоит. Завтра, может, вместо LUA прикрутят что-то другое. Plugin.Call вполне удобная абстракция, которая при любом раскладе будет работать.
User avatar
John Doe
Бюрократ
Posts: 13866
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 74 times
Been thanked: 428 times
Contact:

Re: Plugin.require — функция-враппер на замену Plugin.Call и

Post by John Doe »

Т.е. вы против родного Lua-интерфейса?
В том плане, что в своих плагинах не хотели бы его внедрять?
Max Rusov
Posts: 3651
Joined: Wed 23 Nov, 2005 11:11
Location: Москва-Питер
Has thanked: 2 times
Been thanked: 19 times

Re: Plugin.require — функция-враппер на замену Plugin.Call и

Post by Max Rusov »

John Doe wrote:В том плане, что в своих плагинах не хотели бы его внедрять?
Не вижу никакого смысла. Просто прикладывать к плагину *.lua модуль с врапперами для вызова Plugin.Call.
Скопировать его в Macros\Modules можно и руками.
Shmuel
Posts: 6840
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 41 times
Been thanked: 530 times

Re: Plugin.require — функция-враппер на замену Plugin.Call и

Post by Shmuel »

John Doe wrote:Поиграться определённо надо, т.к. есть много ньюансов.
Первую пробу сделал: сырая, но работает. Функции плагина могут обмениваться с макросами любыми Lua-типами данных (включая таблицы, функции, юзердата, корутины).
Post Reply

Return to “Обсуждение макросов”