Идея о замене макроязыка Фара на Lua, JavaScript и т.п.

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

Re: Идея о замене макроязыка Фара на Lua, JavaScript и т.п.

Post by Max Rusov »

Latest post of the previous page:

Ну, не знаю. Только если вы скрестите ужа с ежом (т.е. объедините циклы обработки сообщений и интерпретации PCode LUA) - но мне это представляется довольно сложным и вообще не факт, что возможным.
Либо этот функционал объявляется не поддерживаемым (что, вообщем, допустимо). Но тогда это не будет полноценной заменой макросам. Какие-то макросы перенести не удастся.
User avatar
Skirda
Posts: 3475
Joined: Wed 16 Mar, 2005 11:01
Been thanked: 5 times

Re: Идея о замене макроязыка Фара на Lua, JavaScript и т.п.

Post by Skirda »

Поддержание темы для...

При запуске макроса ФАР исполняет байткод. Не интерпретирует, а просто тупо исполняет то варево, которое ему подготовил компилятор (macrocompiler.cpp). Фактически замена компилятора позволит использовать любой язык (лишь бы компилятор правильно подготовил массив DWORD`ов). Это, IMHO, вполне реальный и быстрый путь (при условии, что наконец-то допишу описание "исполнятора" :-)).

Другой путь - это то самый, который я частично увидел в ваших рассуждениях. И, судя по всему, никто никогда не возьмется довести до ума полную интергацию... любого встраиваемого публичного движка в Far Manager. Делаю такой вывод только на том, что в этой теме в основном идет флейм о том "как было бы хорошо, кабы у нас были листы ДСП, мы бы тады построили ероплан и улятели бы отседа к едрени фени".

А то, что вы уперлись в "Keys" (и как его "вызыватель" будет взаимодействовать с ФАРом) - это уже реализовано! Могу ошибаться, но вроде как аж 2 раза (обертки вокруг Повершела и Луа).
We are the Borg. You will be assimilated.
So Say We All!
User avatar
Aidar
Posts: 541
Joined: Mon 09 Mar, 2009 22:43
Location: Kazan
Has thanked: 8 times
Been thanked: 7 times
Contact:

Re: Идея о замене макроязыка Фара на Lua, JavaScript и т.п.

Post by Aidar »

Max Rusov wrote:... Естественно, я ожидаю увидеть что-то типа:

Code: Select all

Keys("F11")
if MenuSelect("MyPlugin) then
  Keys("Enter")
end
Не понимаю, зачем смешивать нажатие клавиш и выполнение функций.
Если пишется скрипт, лучше вызывать соответствующие функции.
Если нужно выполнить нажатие последовательности клавиш, достаточно простого вызова функции Keys(), которая сейчас реализована в виде Macro.Post.
Last edited by Aidar on Tue 17 Apr, 2012 17:15, edited 1 time in total.
User avatar
Aidar
Posts: 541
Joined: Mon 09 Mar, 2009 22:43
Location: Kazan
Has thanked: 8 times
Been thanked: 7 times
Contact:

Re: Идея о замене макроязыка Фара на Lua, JavaScript и т.п.

Post by Aidar »

Skirda wrote:... Другой путь - это то самый, который я частично увидел в ваших рассуждениях. И, судя по всему, никто никогда не возьмется довести до ума полную интергацию... любого встраиваемого публичного движка в Far Manager...
Зачем интеграция? Достаточно, чтобы FAR предоставил доступ через FAR API к тем возможностям, которые необходимы для использования встраимового языка вместо макроязыка.
User avatar
zg
zero-gravity
Posts: 5878
Joined: Tue 15 Mar, 2005 17:36
Location: riga
Been thanked: 158 times
Contact:

Re: Идея о замене макроязыка Фара на Lua, JavaScript и т.п.

Post by zg »

Skirda wrote:При запуске макроса ФАР исполняет байткод. Не интерпретирует, а просто тупо исполняет то варево, которое ему подготовил компилятор (macrocompiler.cpp). Фактически замена компилятора позволит использовать любой язык (лишь бы компилятор правильно подготовил массив DWORD`ов).
фактически дизайн байткода таков, что «любой» язык будет тем же макроязыком, вид сбоку.
User avatar
Skirda
Posts: 3475
Joined: Wed 16 Mar, 2005 11:01
Been thanked: 5 times

Re: Идея о замене макроязыка Фара на Lua, JavaScript и т.п.

Post by Skirda »

Aidar wrote:Достаточно, чтобы FAR предоставил доступ через FAR API к тем возможностям, которые необходимы для использования встраимового языка вместо макроязыка.
Подобное и сейчас можно делать (и делается - примеры я приводил).
О чем тогда речь? Если тупо о расширении АПИ, то причем тут сабж?
Либо мы по разному понимаем термин "встраиваемый язык".
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: 5 times

Re: Идея о замене макроязыка Фара на Lua, JavaScript и т.п.

Post by Skirda »

zg wrote:фактически дизайн байткода таков, что «любой» язык будет тем же макроязыком, вид сбоку.
Что-то в упор не вижу тестовой реализации альтернативы...
We are the Borg. You will be assimilated.
So Say We All!
User avatar
zg
zero-gravity
Posts: 5878
Joined: Tue 15 Mar, 2005 17:36
Location: riga
Been thanked: 158 times
Contact:

Re: Идея о замене макроязыка Фара на Lua, JavaScript и т.п.

Post by zg »

Skirda wrote:Что-то в упор не вижу тестовой реализации альтернативы...
ссылка раз. ссылка два. не идеал конечно, но как минимум под каждую функцию инструкция не заводится.

что касается топика.
в принципе хоть макроязык и весьма интегрирован в фар, но если откинуть сохранение, загрузку, запись и прочее редактирование, то остаётся почти одна функция — KeyMacro::GetKey (есть ещё PeekKey, но на первый взгляд она легко реализуется через GetKey). таким образом на самом низком уровне ничего кроме кнопки не нужно.
таким образом, если мы хотим интегрировать какой либо скриптовой язык, то необходимый минимум, который нужно реализовать это:
1. инициализация. получаем от фара название скрипта/сам код, akey, что-то ещё. производим полную инициализацию.
2. выполнение. фар дёргает нашу GetKey. начинаем выполнять скрипт. если на вдруг надо вернуть фару какую нибудь кнопку, выполняем что-то типа far.Key("CtrlShiftW"). реализация far.Key приостанавливает работу скрипта, возвращает управление фару, фа работает до следующего GetKey.
3. финализация. скрипт окончен, всевозможные клеанапы и прочее.

проблемы видятся как минимум две:
1. реализация far.Key. я не уверен, что скриптовые языки для подключаемых функций позволяют заморозить выполнение скрипта, и вернуться в вызываемую программу.
2. рекурсия. в скрипте создали диалог, показали, в нём вызвали другой скрипт. т.е. на первый взгляд создаём новую вм, и радуемся жизни. но во-1 запуск новой вм не такая дешёвая операция, как мне кажется. во-2 возникают проблемы с глобальными переменными. многие скриптовые языки поддерживают корутины, возможно стоит поискать решение проблемы тут.
User avatar
Aidar
Posts: 541
Joined: Mon 09 Mar, 2009 22:43
Location: Kazan
Has thanked: 8 times
Been thanked: 7 times
Contact:

Re: Идея о замене макроязыка Фара на Lua, JavaScript и т.п.

Post by Aidar »

zg wrote:1. реализация far.Key. я не уверен, что скриптовые языки для подключаемых функций позволяют заморозить выполнение скрипта, и вернуться в вызываемую программу.
Именно под это в Lua подходит сопрограммы (coroutine), которые позволяют продолжить выполнение с "места возврата" из сопрограммы при его повторном "вызове".
Собственно это указано ниже:
zg wrote:2. рекурсия. ... многие скриптовые языки поддерживают корутины, возможно стоит поискать решение проблемы тут.
User avatar
Aidar
Posts: 541
Joined: Mon 09 Mar, 2009 22:43
Location: Kazan
Has thanked: 8 times
Been thanked: 7 times
Contact:

Re: Идея о замене макроязыка Фара на Lua, JavaScript и т.п.

Post by Aidar »

Skirda wrote:
Aidar wrote:Достаточно, чтобы FAR предоставил доступ...
Подобное и сейчас можно делать (и делается - примеры я приводил).
О чем тогда речь? Если тупо о расширении АПИ, то причем тут сабж?
Либо мы по разному понимаем термин "встраиваемый язык".
В теме высказывался вариант подключения любых языков в виде плагинов.
Собственно говоря, это наиболее быстрый способ для замены макроязыка скриптовым языком, который затем можно (при необходимости) и полноценно встроить в FAR.
Shmuel
Posts: 6217
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 31 times
Been thanked: 348 times

Re: Идея о замене макроязыка Фара на Lua, JavaScript и т.п.

Post by Shmuel »

Aidar wrote:
zg wrote:1. реализация far.Key. я не уверен, что скриптовые языки для подключаемых функций позволяют заморозить выполнение скрипта, и вернуться в вызываемую программу.
Именно под это в Lua подходит сопрограммы (coroutine), которые позволяют продолжить выполнение с "места возврата" из сопрограммы при его повторном "вызове".
Не всё так просто. Чтобы переходить границу Си-Луа с помощью корутин нужен либо Lua 5.2 (нежелательно, так как несовместим с LuaJIT), либо патченный Луа 5.1 (патч также от автора LuaJIT).
User avatar
zg
zero-gravity
Posts: 5878
Joined: Tue 15 Mar, 2005 17:36
Location: riga
Been thanked: 158 times
Contact:

Re: Идея о замене макроязыка Фара на Lua, JavaScript и т.п.

Post by zg »

Shmuel wrote:Не всё так просто. Чтобы переходить границу Си-Луа с помощью корутин нужен либо Lua 5.2 (нежелательно, так как несовместим с LuaJIT)
а что, LuaJIT навсегда на 5.1 остаётся?
Shmuel
Posts: 6217
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 31 times
Been thanked: 348 times

Re: Идея о замене макроязыка Фара на Lua, JavaScript и т.п.

Post by Shmuel »

zg wrote:а что, LuaJIT навсегда на 5.1 остаётся?
Автор LuaJIT в своё время высказывался, что не будет спешить с переходом на Lua 5.2. Но, как говорят, время покажет.
User avatar
Skirda
Posts: 3475
Joined: Wed 16 Mar, 2005 11:01
Been thanked: 5 times

Re: Идея о замене макроязыка Фара на Lua, JavaScript и т.п.

Post by Skirda »

zg wrote:не идеал конечно, но как минимум под каждую функцию инструкция не заводится.
Что-то мне с трудом верится, что с таким подходом ты не начнешь ваять всё те же инструкции, когда дело дойдет до "а как мне получить свойства вот этого объекта?". Весь Far в АПИ не отдашь.

Кстати, а почему не Повершел (пр.), а Луа? Потому, что это модно/"сегодня" нравится тебе? А что будет если ты увлечешься браинфаком? :ha:
We are the Borg. You will be assimilated.
So Say We All!
User avatar
NightRoman
Posts: 6034
Joined: Fri 18 Aug, 2006 13:52
Location: Cambridge, UK
Has thanked: 20 times
Been thanked: 49 times
Contact:

Re: Идея о замене макроязыка Фара на Lua, JavaScript и т.п.

Post by NightRoman »

Повершел не годится для родного скриптового языка Фара, он не встраиваемый полностью (.нет не встроишь). А вот жаваскрипт - один из кандидатов (но какой из движков - это надо еще оценивать в случае чего). Squirrel - заманчиво, но уж больно непопулярно (Tiobe рейтинг вообще не упоминает такой язык), это плохо и на будущее ненадежно.
User avatar
Skirda
Posts: 3475
Joined: Wed 16 Mar, 2005 11:01
Been thanked: 5 times

Re: Идея о замене макроязыка Фара на Lua, JavaScript и т.п.

Post by Skirda »

Как предполагается "встраивать"? По аналогии с sqlite (сорцы внутрь) или как внешняя dll?
We are the Borg. You will be assimilated.
So Say We All!
Post Reply

Return to “Development”