Макросы на MoonScript

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

Макросы на MoonScript

Post by John Doe » Sun 20 Apr, 2014 23:49

Начиная с билда 3878 Far 3 поддерживает в макросах MoonScript — язык программирования, транслируемый в Lua.
Это позволяет писать более компактный и хорошо читаемый код (то же самое для JavaScript делает CoffeeScript).

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

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

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

User avatar
John Doe
Бюрократ
Posts: 11419
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 17 times
Been thanked: 101 times

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

Post by John Doe » Thu 05 Jun, 2014 16:27

Latest post of the previous page:

Функции LuaMacro служащие для вывода ошибок тоже бы доработать.

Например пытаюсь загрузить макрофайл с ошибкой, получаю сообщение:

Code: Select all

[string "C:\APPs\Far3\Profile\Macros\scripts\Macro\Mac..."]:13: attempt to call global 'as' (a nil value)
Во-первых имя файла не видно. Во-вторых строку надо скорректировать.

User avatar
zg
zero-gravity
Posts: 5312
Joined: Tue 15 Mar, 2005 17:36
Location: riga
Been thanked: 48 times
Contact:

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

Post by zg » Mon 23 Jun, 2014 23:14

moon\all.lua, который в moonscript.lua включён, хочет moon.lua, который туда не включён. надо либо moon\all.lua убрать, либо moon.lua добавить.

Shmuel
Posts: 5232
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 16 times
Been thanked: 152 times

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

Post by Shmuel » Mon 23 Jun, 2014 23:50

Добавил.

Shmuel
Posts: 5232
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 16 times
Been thanked: 152 times

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

Post by Shmuel » Wed 25 Jun, 2014 21:07

zg wrote:там минорные несовместимости, monnscript с 0.12 работает.
Оказывается, не так уж и работает (с LPeg 0.10.2 этой ошибки нет):

lua: local to_lua=require("moonscript.base").to_lua for k=1,250 do to_lua"5" end


User avatar
zg
zero-gravity
Posts: 5312
Joined: Tue 15 Mar, 2005 17:36
Location: riga
Been thanked: 48 times
Contact:

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

Post by zg » Wed 25 Jun, 2014 22:49

Shmuel wrote:Оказывается, не так уж и работает (с LPeg 0.10.2 этой ошибки нет):
  1. typedef struct TTree {
  2.   …
  3.   unsigned short key;  /* key in ktable for Lua data (0 if no key) */
  4.   …
вот это переполняется. если убрать short — всё работает.
судя по всему вот это:
* Changes from version 0.11 to 0.12
---------------------------------
+ no "unsigned short" limit for pattern sizes
не попало реально в исходники, потому что как в 0.11, так и в 0.12 это единственное место, где есть unsigned short.

Shmuel
Posts: 5232
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 16 times
Been thanked: 152 times

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

Post by Shmuel » Thu 26 Jun, 2014 00:56

zg wrote:если убрать short — всё работает.
судя по всему вот это:
* Changes from version 0.11 to 0.12
---------------------------------
+ no "unsigned short" limit for pattern sizes
не попало реально в исходники, потому что как в 0.11, так и в 0.12 это единственное место, где есть unsigned short.
Спросил на Lua-форуме, посмотрим, что ответят.

И независимо от того, что ответят, странно выглядят измеренные времена 5-ти последовательных исполнений данного скрипта (в миллисекундах):
1. С LPeg 0.10.2: 527, 518, 518, 517, 524.
2. С LPeg 0.12, собранной с предложенным изменением: 3011, 6835, 10717, 16582, 23092.

User avatar
zg
zero-gravity
Posts: 5312
Joined: Tue 15 Mar, 2005 17:36
Location: riga
Been thanked: 48 times
Contact:

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

Post by zg » Thu 26 Jun, 2014 09:41

Shmuel wrote:И независимо от того, что ответят, странно выглядят измеренные времена 5-ти последовательных исполнений данного скрипта (в миллисекундах):
1. С LPeg 0.10.2: 527, 518, 518, 517, 524.
2. С LPeg 0.12, собранной с предложенным изменением: 3011, 6835, 10717, 16582, 23092.
из того, что я успел понять в 0.12, там создаётся «глобальная» луатаблица ktable с индексами правил в деревьях. за один раз выполнения скрипта в неё пихается ~85000 элементов. после — не удаляется. возможно проблемы где-то здесь.

Shmuel
Posts: 5232
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 16 times
Been thanked: 152 times

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

Post by Shmuel » Thu 26 Jun, 2014 09:49

zg wrote:из того, что я успел понять в 0.12, там создаётся «глобальная» луатаблица ktable с индексами правил в деревьях. за один раз выполнения скрипта в неё пихается ~85000 элементов. после — не удаляется. возможно проблемы где-то здесь.
Если честно, меня внутренности LPeg мало интересуют. Есть автор, пусть разбирается (если действительно проблема в LPeg, а не в MoonScript).
Багрепорт в трекер MoonScript также поместил.

Shmuel
Posts: 5232
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 16 times
Been thanked: 152 times

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

Post by Shmuel » Thu 26 Jun, 2014 15:25

Произвёл подобные тесты с плагином Macro2Lua Converter. Результаты похожие - стабильные времена с LPeg 0.10.2, растущие - с LPeg 0.12.

LPeg 0.10.2: 2578 2578 2594 2578 2578
LPeg 0.12: 5016 5500 5953 6469 6906

Откатил в Фаре обратно на LPeg 0.10.2, до лучших времён.

Да, и не надо думать, что данные тесты искусственные, а в "реальной жизни" LPeg 0.12 вполне годится. Я вышел на эту неисправность вполне реально: на седьмом-восьмом запуске luamacro\macrotest.lua вылезает ошибка, после чего уже ни тест, ни MoonScript не работают.

Ещё один реальный пример из той же оперы: если в Macros\scripts более 100 файлов *.moon (в каждом хотя бы 1 макрос), получим ошибку при загрузке и опять-таки MoonScript дальше работать не будет.

User avatar
zg
zero-gravity
Posts: 5312
Joined: Tue 15 Mar, 2005 17:36
Location: riga
Been thanked: 48 times
Contact:

Макросы на MoonScript

Post by zg » Sat 29 Nov, 2014 01:48

не грузятся мун-модули в utf8 с бомом.
например test.moon:

Code: Select all

0
и в комстроке moon:far.Show require"test"

так вот лечится:
  1. Index: plugins/luamacro/moonscript.lua
  2. ===================================================================
  3. --- plugins/luamacro/moonscript.lua (revision 12711)
  4. +++ plugins/luamacro/moonscript.lua (working copy)
  5. @@ -5583,6 +5583,7 @@
  6.  end
  7.  loadstring = function(...)
  8.    local options, str, chunk_name, mode, env = get_options(...)
  9. +  if "string" == type(str) and string.sub(str,1,3)=="\2398791" then str=string.sub(str,4) end
  10.    chunk_name = chunk_name or "=(moonscript.loadstring)"
  11.    local code, ltable_or_err = to_lua(str, options)
  12.    if not (code) then
  13. @@ -5602,7 +5603,6 @@
  14.      return nil, err
  15.    end
  16.    local text = assert(file:read("*a"))
  17. -  if string.sub(text,1,3)=="\2398791" then text=string.sub(text,4) end
  18.    file:close()
  19.    return loadstring(text, "@" .. tostring(fname), ...)
  20.  end
хотя возможно обрезать нужно вообще в to_lua. или наоборот не трогать loadfile и добавить обрезание в moon_loader.

Shmuel
Posts: 5232
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 16 times
Been thanked: 152 times

Макросы на MoonScript

Post by Shmuel » Sat 29 Nov, 2014 12:17

zg wrote:хотя возможно обрезать нужно вообще в to_lua. или наоборот не трогать loadfile и добавить обрезание в moon_loader.
Если бы автор MoonScript реагировал, то правильнее всего было бы открыть новый issue в проекте.
Делай на своё усмотрение.

Shmuel
Posts: 5232
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 16 times
Been thanked: 152 times

Макросы на MoonScript

Post by Shmuel » Thu 05 Mar, 2015 23:49

В связи с обнаруженным, на мой взгляд, критичным, багом в MoonScript 0.3.0, представляется логичным вернуться к 0.2.6 до тех пор, пока баг не починят.

User avatar
cmd.exe
Posts: 340
Joined: Fri 16 Apr, 2010 18:26
Location: Нижний Новгород
Has thanked: 173 times
Been thanked: 5 times
Contact:

Макросы на MoonScript

Post by cmd.exe » Tue 22 Dec, 2015 06:00

В дальнейшем в данной теме будет документация на использование Moon Script в far manager? В Энциклопедия фара очень скудное упоминание про Moon Script.
Macroapi_manual только упоминание о том что функция может использоваться и Moon Script то-же.
I've been using Vim for about 2 years now, mostly because I can't figure out how to exit it. (c) I Am Devloper
I know nothing except the fact of my ignorance. (с) Socrates

Shmuel
Posts: 5232
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 16 times
Been thanked: 152 times

Макросы на MoonScript

Post by Shmuel » Tue 22 Dec, 2015 07:20

cmd.exe wrote: В дальнейшем в данной теме будет документация на использование Moon Script в far manager?
Документация в теме быть не должна, в теме может быть обсуждение, примеры и т.п.

Мне до сих пор казалось, что в имеющейся документации есть всё необходимое по использованию MoonScript. Если вы полагаете, что чего-то не хватает, укажите конкретно.

Если кратко, то MoonScript в Фаре может использоваться везде, где используется Lua: в макрофайлах (расширение .moon), с комстроки (префиксы moon: и moons:) и в FAR API (флаг KMFLAGS_MOONSCRIPT). Всё это описано в документации.

User avatar
John Doe
Бюрократ
Posts: 11419
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 17 times
Been thanked: 101 times

Макросы на MoonScript

Post by John Doe » Sun 11 Sep, 2016 16:11

Можно в moonscript разместить в одной строке последовательный вызов функций?
В lua всё просто print"a"; print"b", а перевести такое в moonscript не получается

User avatar
zg
zero-gravity
Posts: 5312
Joined: Tue 15 Mar, 2005 17:36
Location: riga
Been thanked: 48 times
Contact:

Макросы на MoonScript

Post by zg » Sun 11 Sep, 2016 16:42

функции можно и через запятую.

Post Reply

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