Page 4 of 6

Макросы на 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: Thu 05 Jun, 2014 15:27
by zg

Latest post of the previous page:

John Doe wrote:Вероятно следует в случае moon вообще не надо пытаться устанавливать позицию.
почему? оригинальную строку получить вообще элементарно:
  1. local line_tables=require("moonscript.line_tables")
  2.  
  3. local errors=require("moonscript.errors")
  4.  
  5. local cache={}
  6.  
  7. local fname=[[C:\Program Files\far\Profile\Macros\scripts\test.moon]]
  8.  
  9. local tbl=line_tables[fname]
  10.  
  11. if tbl then
  12.  
  13.   far.Show(errors.reverse_line_number(fname,tbl,113,cache))
  14.  
  15. end

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

Posted: Thu 05 Jun, 2014 15:57
by John Doe
Спасибо. Значит несложно будет доработать и mbrowser.lua

P.S.
Попробовал переводить , строка получается с точностью +/- 1

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

Posted: Thu 05 Jun, 2014 16:25
by zg
макробровсер — поправил.
John Doe wrote:Попробовал переводить, строка получается с точностью +/- 1
нормально, я думаю.

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

Posted: Thu 05 Jun, 2014 16:27
by John Doe
Функции LuaMacro служащие для вывода ошибок тоже бы доработать.

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

Code: Select all

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

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

Posted: Mon 23 Jun, 2014 23:14
by zg
moon\all.lua, который в moonscript.lua включён, хочет moon.lua, который туда не включён. надо либо moon\all.lua убрать, либо moon.lua добавить.

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

Posted: Mon 23 Jun, 2014 23:50
by Shmuel
Добавил.

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

Posted: Wed 25 Jun, 2014 21:07
by Shmuel
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


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

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

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

Posted: Thu 26 Jun, 2014 00:56
by Shmuel
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.

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

Posted: Thu 26 Jun, 2014 09:41
by zg
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 элементов. после — не удаляется. возможно проблемы где-то здесь.

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

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

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

Posted: Thu 26 Jun, 2014 15:25
by Shmuel
Произвёл подобные тесты с плагином 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 дальше работать не будет.

Макросы на MoonScript

Posted: Sat 29 Nov, 2014 01:48
by zg
не грузятся мун-модули в utf8 с бомом.
например test.moon:

Code: Select all

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

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

Макросы на MoonScript

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

Макросы на MoonScript

Posted: Thu 05 Mar, 2015 23:49
by Shmuel
В связи с обнаруженным, на мой взгляд, критичным, багом в MoonScript 0.3.0, представляется логичным вернуться к 0.2.6 до тех пор, пока баг не починят.

Макросы на MoonScript

Posted: Tue 22 Dec, 2015 06:00
by cmd.exe
В дальнейшем в данной теме будет документация на использование Moon Script в far manager? В Энциклопедия фара очень скудное упоминание про Moon Script.
Macroapi_manual только упоминание о том что функция может использоваться и Moon Script то-же.