Page 1 of 4

Макросы на MoonScript

Posted: Sun 20 Apr, 2014 23:49
by John Doe
Начиная с билда 3878 Far 3 поддерживает в макросах MoonScript — язык программирования, транслируемый в Lua.
Это позволяет писать более компактный и хорошо читаемый код (то же самое для JavaScript делает CoffeeScript).

Документация по языку: Плагин LuaMacro автоматически загружает как *.lua, так и *.moon файлы.
Поддерживается также выполнение moon-скриптов из командной строки, см. документацию.

В дистрибутиве на официальном сайте дополнительно присутствуют утилиты moon.exe и moonc.exe (пример использования см. тут)

Онлайн-компилятор тут: http://moonscript.org/compiler/

Re: Макросы на moonscript

Posted: Mon 21 Apr, 2014 07:31
by Shmuel
zg wrote:официальный сайт.
из дистрибутива нужна только moonscript.dll, её можно положить например в папку с фаром.
в %farprofile%\Macros\scripts нужно добавить lua-файл со следующим содержимым:

после этого макросы, написанные на мунскрипте и находящиеся в %farprofile%\Macros\scripts\*.moon будут загружаться и работать, как обычные lua макросы.
пока очень простой пример:

Code: Select all

TestMoon = ->
  sum = (x, y) -> x + y
  s = "фываāšģ"
  far.Show (s\byte 1), s\len!, sum 1, 2
Macro {area: "Shell", key: "CtrlShiftF11", description: "test moon",action: TestMoon}
Мне идея очень нравится!
Думаю, что добавление длл-ки в 200 KB, которая к тому же сжимается до 45 KB при упаковке, не слишком утяжелит дистрибутив Фара.

Re: Макросы на moonscript

Posted: Mon 21 Apr, 2014 08:42
by zg
тогда надо добавлять.

Re: Макросы на moonscript

Posted: Mon 21 Apr, 2014 08:53
by Smitis
Тогда, наверное, надо и макросы moon автоматически загружать

Re: Макросы на moonscript

Posted: Mon 21 Apr, 2014 09:23
by zg
про это и речь.

Re: Макросы на moonscript

Posted: Mon 21 Apr, 2014 17:20
by Shmuel
zg wrote:тогда надо добавлять.
Длл-ки добавил, продолжение следует (не сегодня).

Re: Макросы на moonscript

Posted: Mon 21 Apr, 2014 23:43
by fml2
А почему это сразу засунуто в ядро, а не сделано как плагин (если такое возможно)? Просто тогда, наверное, надо и Far.Net делать частью Фара. Какова тут логика принятия решения?

Re: Макросы на moonscript

Posted: Tue 22 Apr, 2014 00:05
by zg
fml2 wrote:А почему это сразу засунуто в ядро, а не сделано как плагин (если такое возможно)?
а вы первый пост совсем-совсем не читали, да?

Re: Макросы на moonscript

Posted: Tue 22 Apr, 2014 07:41
by John Doe
Shmuel wrote:Длл-ки добавил, продолжение следует (не сегодня).
А зависимости есть? В коде из первого сообщения упоминается lpeg, на оффсайте ещё несколько.

Re: Макросы на moonscript

Posted: Tue 22 Apr, 2014 07:56
by Shmuel
Для макросов зависимость - только LPeg, и она встроена в moonscript.dll.

Re: Макросы на moonscript

Posted: Tue 22 Apr, 2014 08:35
by John Doe
Moonscript планируется загружать безусловно, или только при наличии *.moon?

Re: Макросы на moonscript

Posted: Tue 22 Apr, 2014 09:10
by Shmuel
Второе - более правильно. Загрузка также может быть вызвана другими причинами (например, расширенным вариантом lm:post). Время покажет, насколько это будет востребовано.

Re: Макросы на moonscript

Posted: Tue 22 Apr, 2014 09:13
by John Doe
Может быть есть смысл сделать LPeg доступным независимо от moonscript? Раз уж он всё равно из коробки?

Re: Макросы на moonscript

Posted: Tue 22 Apr, 2014 09:16
by Shmuel
Как раз сегодня думал об этом.
Но вот SQLite в коробке уже давно и до сих пор недоступна.

Re: Макросы на moonscript

Posted: Tue 22 Apr, 2014 09:23
by John Doe
SQLite может и не будет никогда, хотя бы потому что никто не запрашивал, и на форуме пока толком не обсуждалось.

А вот LPeg уже доступен, но только после команды require"moonscript".
Если мне (например) понадобился только LPeg, то в нагрузку я получу и moonscript, что не очень естественно.

И что если я хочу подключить сторонний модуль LPeg: есть ли подводные камни (знаю что 0.10 и 0.12 несовместимы)?

Re: Макросы на moonscript

Posted: Tue 22 Apr, 2014 09:26
by Shmuel
Я запрашивал SQLite, давным давно, неохота сейчас искать в форуме.

Подводные камни будут, если сторонний LPeg будет < 0.10 или == 0.11.