LuaMacro — Lua как язык макросов

Здесь обсуждается всё, что касается макросов.
User avatar
John Doe
Бюрократ
Posts: 13860
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 74 times
Been thanked: 428 times
Contact:

LuaMacro — Lua как язык макросов

Post by John Doe »

Проект Spring (обсуждение) влился в стабильную версию Far Manager 3.0.

Таким образом, в макросах сейчас доступны:
  • Стандартные функции и библиотеки Lua.
  • В фаре используется LuaJIT (обсуждение), что (в частности) даёт доступ к библиотеке FFI (обсуждение), и некоторые другие расширения.
  • "Надстройка" над Lua: MoonScript (Подробности и обсуждение)
  • Функции API плагинов, посредством библиотеки LuaFAR (см. luafar_manual.chm)
  • Функции старого макроязыка (API макросов) (Обновление)
    Актуальный мануал, отражающий после перехода на Lua: macroapi_manual.ru.chm.
    (Мануал весьма лаконичен, вместо описания функции старого макроязыка приведены ссылки на устаревший раздел )
См. также:
Max Rusov
Posts: 3651
Joined: Wed 23 Nov, 2005 11:11
Location: Москва-Питер
Has thanked: 2 times
Been thanked: 19 times

Re: Spring — внедрение Lua в качестве макроязыка

Post by Max Rusov »

Latest post of the previous page:

Номер строки, наверное, корректный. Только очень проблематично эту строку найти в большом макросе. Ok, надеюсь в будущем это будет доделано.
Shmuel
Posts: 6839
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 41 times
Been thanked: 530 times

Re: Spring — внедрение Lua в качестве макроязыка

Post by Shmuel »

Max Rusov wrote:Ok, надеюсь в будущем это будет доделано.
Можно ускорить, патчик прислать. :)
User avatar
Tim Sobolev
Posts: 729
Joined: Fri 01 Apr, 2005 14:46
Location: Украина
Has thanked: 1 time
Been thanked: 7 times

Re: Spring — внедрение Lua в качестве макроязыка

Post by Tim Sobolev »

Насколько я понял опытным путём, номер строки отсчитывается от строки с "{{" (включительно) выполняемого макроса.
Max Rusov
Posts: 3651
Joined: Wed 23 Nov, 2005 11:11
Location: Москва-Питер
Has thanked: 2 times
Been thanked: 19 times

Re: Spring — внедрение Lua в качестве макроязыка

Post by Max Rusov »

Это понятно. Но в сложном макросе, особенно с #Include - это довольно проблематично. Например, таком.
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: Spring — внедрение Lua в качестве макроязыка

Post by NightRoman »

1. Экспериментально: использование секции "farconfig/macros/variables" базы данных для Lua-модулей (библиотек).
Каждая переменная - модуль. Имена модулей регистрозависимы.
Например: <variable name="shmuel.utils" type="text"> ...... </variable>
Пример использования в макросе: utils=require "shmuel.utils"
ВНИМАНИЕ: "variables" больше не грузятся при старте Фара. Используйте для этого "constants".
Можно хоть какой-нибудь один полный пример? Включая и кусок конфиг-секции "<variables />" полностью. Автору-то все ясно, а мне вот даже это не понятно "Каждая переменная - модуль". Это код модуля, имя файла модуля, или? Серьезно, не уверен. Пример бы ответил на эти и другие вопросы, наверное. Спасибо.
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: Spring — внедрение Lua в качестве макроязыка

Post by NightRoman »

Да и типовые юз-кейсы помогли бы. А то кому-то может и не ясно зачем это надо. И если бы это в хелп, то было бы вообще идеально. (С другой стороны, там пометка "Экспериментально", так что у автора могут другие быть виды...)
Shmuel
Posts: 6839
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 41 times
Been thanked: 530 times

Re: Spring — внедрение Lua в качестве макроязыка

Post by Shmuel »

NightRoman wrote:Автору-то все ясно, а мне вот даже это не понятно "Каждая переменная - модуль". Это код модуля, имя файла модуля, или? Серьезно, не уверен. Пример бы ответил на эти и другие вопросы, наверное. Спасибо.
Не всегда удаётся в нескольких строках ченжлога выразиться с юридической точностью.
"Каждая переменная - модуль" означает, что одна секция <variable>......</variable> содержит ровно один модуль. Тут неточно выразился, да.
NightRoman wrote:Да и типовые юз-кейсы помогли бы. А то кому-то может и не ясно зачем это надо. И если бы это в хелп, то было бы вообще идеально. (С другой стороны, там пометка "Экспериментально", так что у автора могут другие быть виды...)
Зачем нужны модули (библиотеки) в Lua - странно, что именно ты это спрашиваешь. Ведь наверняка в PowerShell есть что-то подобное. Но если в двух словах, то это обычно набор функций, которыми могут пользоваться приложения. Lua поставляется с несколькими модулями "из коробки" (io, math, os, string, table, debug). Например, table.concat - это функция concat из модуля table. Модули в Lua могут быть написаны как на компилируемом языке, так и на Lua. Главный юз-кейс: модули содержат код, используемый из более чем одного макроса (т.е. "code sharing").

Вот простой (до тупости), но полный пример:
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: Spring — внедрение Lua в качестве макроязыка

Post by NightRoman »

Спасибо, становится гораздо понятнее. А правило "@<путь к файлу>" действует?
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: Spring — внедрение Lua в качестве макроязыка

Post by NightRoman »

И такой вопрос. А чем подход с этими переменными хорош? Почему явно не пользовать файлы в качестве модулей? Файлами немного удобнее оперировать, чем фарконфигом.
Shmuel
Posts: 6839
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 41 times
Been thanked: 530 times

Re: Spring — внедрение Lua в качестве макроязыка

Post by Shmuel »

NightRoman wrote:Спасибо, становится гораздо понятнее. А правило "@<путь к файлу>" действует?
Нет. Важно понимать, что модуль - это не макрос.
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: Spring — внедрение Lua в качестве макроязыка

Post by NightRoman »

при вызове существующего модуля не производится поиск в файловой системе, т.е. выше быстродействие.
Ну это как сказать... ищется и база данных скулайта, и чтение, и т.п.
Shmuel
Posts: 6839
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 41 times
Been thanked: 530 times

Re: Spring — внедрение Lua в качестве макроязыка

Post by Shmuel »

NightRoman wrote:
при вызове существующего модуля не производится поиск в файловой системе, т.е. выше быстродействие.
Ну это как сказать... ищется и база данных скулайта, и чтение, и т.п.
База не ищется, она открыта при старте Фара.
Я пока ориентируюсь на базу, в будущем возможны изменения.
Ещё раз: модули в файлах - работают, просто сначала делается поиск в базе, а затем на диске.

P.S. И напомню, что модуль ищется только при первом его вызове, при последующих вызовах он уже берётся из кэша (т.е. из package.loaded[modulename]).
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: Spring — внедрение Lua в качестве макроязыка

Post by NightRoman »

Хорошо, хорошо. Но я правда не понимаю, зачем это надо, вот и спрашиваю. Выглядит, как лишняя фича. Допускаю, что не вижу очевидных выгод. Автор - спец и ему карты в руки.
Shmuel
Posts: 6839
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 41 times
Been thanked: 530 times

Re: Spring — внедрение Lua в качестве макроязыка

Post by Shmuel »

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: Spring — внедрение Lua в качестве макроязыка

Post by NightRoman »

Я не спрашивал зачем нужны модули. Это тебе показалось почему-то (серьезно, где я спрашивал это?). Я спрашиваю зачем такое вычурное решение с хранением модулей в базе данных через понятие макропеременная. В Lua хранение модулей в файлах, наверное, отработанный годами способ. И про производительность - 1) "не оптимизируй, пока нет проблем" (с) 2) сомневаюсь, что загрузка модуля через SQL запрос к базе данных будет быстрее, чем просто из файла.
Shmuel
Posts: 6839
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 41 times
Been thanked: 530 times

Re: Spring — внедрение Lua в качестве макроязыка

Post by Shmuel »

В следующий раз подумаю, прежде, чем отвечать на вопросы: "а оно мне надо?".
Post Reply

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