zg 30.09.2012 03:26:20 +0200 - build 2851
1. слияние с проектом Spring (https://github.com/shmuz/Spring).
в связи с этим вместо встроенного макроязыка используется скриптовый язык Lua 5.1 (http://www.lua.org).
после перехода на Lua: macroapi_manual.ru.chm.
(Мануал весьма лаконичен, вместо описания функции старого макроязыка приведены ссылки на устаревший раздел
1. Экспериментально: использование секции "farconfig/macros/variables" базы данных для Lua-модулей (библиотек).
Каждая переменная - модуль. Имена модулей регистрозависимы.
Например: <variable name="shmuel.utils" type="text"> ...... </variable>
Пример использования в макросе: utils=require "shmuel.utils"
ВНИМАНИЕ: "variables" больше не грузятся при старте Фара. Используйте для этого "constants".
Можно хоть какой-нибудь один полный пример? Включая и кусок конфиг-секции "<variables />" полностью. Автору-то все ясно, а мне вот даже это не понятно "Каждая переменная - модуль". Это код модуля, имя файла модуля, или? Серьезно, не уверен. Пример бы ответил на эти и другие вопросы, наверное. Спасибо.
Да и типовые юз-кейсы помогли бы. А то кому-то может и не ясно зачем это надо. И если бы это в хелп, то было бы вообще идеально. (С другой стороны, там пометка "Экспериментально", так что у автора могут другие быть виды...)
NightRoman wrote:Автору-то все ясно, а мне вот даже это не понятно "Каждая переменная - модуль". Это код модуля, имя файла модуля, или? Серьезно, не уверен. Пример бы ответил на эти и другие вопросы, наверное. Спасибо.
Не всегда удаётся в нескольких строках ченжлога выразиться с юридической точностью.
"Каждая переменная - модуль" означает, что одна секция <variable>......</variable> содержит ровно один модуль. Тут неточно выразился, да.
NightRoman wrote:Да и типовые юз-кейсы помогли бы. А то кому-то может и не ясно зачем это надо. И если бы это в хелп, то было бы вообще идеально. (С другой стороны, там пометка "Экспериментально", так что у автора могут другие быть виды...)
Зачем нужны модули (библиотеки) в Lua - странно, что именно ты это спрашиваешь. Ведь наверняка в PowerShell есть что-то подобное. Но если в двух словах, то это обычно набор функций, которыми могут пользоваться приложения. Lua поставляется с несколькими модулями "из коробки" (io, math, os, string, table, debug). Например, table.concat - это функция concat из модуля table. Модули в Lua могут быть написаны как на компилируемом языке, так и на Lua. Главный юз-кейс: модули содержат код, используемый из более чем одного макроса (т.е. "code sharing").
И такой вопрос. А чем подход с этими переменными хорош? Почему явно не пользовать файлы в качестве модулей? Файлами немного удобнее оперировать, чем фарконфигом.
NightRoman wrote:Спасибо, становится гораздо понятнее. А правило "@<путь к файлу>" действует?
Нет. Важно понимать, что модуль - это не макрос.
NightRoman wrote:И такой вопрос. А чем подход с этими переменными хорош? Почему явно не пользовать файлы в качестве модулей? Файлами немного удобнее оперировать, чем фарконфигом.
Одно другого не исключает. На данный момент приоритет при конфликте имён отдаётся модулю в базе, возможно надо будет это пересмотреть, но не уверен. Так как сделано сейчас, при вызове существующего модуля не производится поиск в файловой системе, т.е. выше быстродействие.
при вызове существующего модуля не производится поиск в файловой системе, т.е. выше быстродействие.
Ну это как сказать... ищется и база данных скулайта, и чтение, и т.п.
База не ищется, она открыта при старте Фара.
Я пока ориентируюсь на базу, в будущем возможны изменения.
Ещё раз: модули в файлах - работают, просто сначала делается поиск в базе, а затем на диске.
P.S. И напомню, что модуль ищется только при первом его вызове, при последующих вызовах он уже берётся из кэша (т.е. из package.loaded[modulename]).
Хорошо, хорошо. Но я правда не понимаю, зачем это надо, вот и спрашиваю. Выглядит, как лишняя фича. Допускаю, что не вижу очевидных выгод. Автор - спец и ему карты в руки.
NightRoman wrote:Хорошо, хорошо. Но я правда не понимаю, зачем это надо, вот и спрашиваю. Выглядит, как лишняя фича. Допускаю, что не вижу очевидных выгод. Автор - спец и ему карты в руки.
Да какой я "автор"? Модули я что ли изобрёл?
Убеждать в пользе модулей принципиально не буду. Как говорят, "если вы не понимаете, что это такое, значит, скорее всего, оно вам и не надо".
Я не спрашивал зачем нужны модули. Это тебе показалось почему-то (серьезно, где я спрашивал это?). Я спрашиваю зачем такое вычурное решение с хранением модулей в базе данных через понятие макропеременная. В Lua хранение модулей в файлах, наверное, отработанный годами способ. И про производительность - 1) "не оптимизируй, пока нет проблем" (с) 2) сомневаюсь, что загрузка модуля через SQL запрос к базе данных будет быстрее, чем просто из файла.