mf.EnumScripts (предложения по api)

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

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

Post by John Doe »

Latest post of the previous page:

citRiks wrote: Sat 19 Jun, 2021 08:36 "если можно обойтись без корутин, значит надо обойтись без корутин"
Справедливо, и в нашем случае как раз обойтись легко. Исправил.

Но хотелось бы обсудить по существу.
  1. Сама идея предоставиить апи в виде итератора
    + Простое апи, удобное для использования на практике. Простая реализация.
    - Это пока единственное место c итератором.
    ? Альтернативу вижу пока одну - формировать и возвращать таблицу со списком скриптов (мне не нравится)
  2. Имя функции (EnumScripts)
    Другие варианты?
  3. Возвращаемые значения (macro, index)
    Порядок мог бы быть обратным (как pairs/ipairs), но на практике индекс не особо полезен
    Нужно ли его вообще возвращать?
https://t.me/FarManager — Telegram чат
User avatar
citRiks
Posts: 1733
Joined: Fri 25 Oct, 2019 18:18
Has thanked: 610 times
Been thanked: 102 times

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

Post by citRiks »

John Doe wrote: Wed 16 Jun, 2021 15:18 Что если вместо GetAllScriptsCopy предоставить итератор.
И предлагаю небольшое упрощение: параметр type не таблица, а строка, т.е. тип можно будет запросить один за раз.
для меня выглядит так, как будто пропущено начало :)
я даже установил распоследний фар, чтобы увидеть в нем GetAllScriptsCopy,
который, как я понял, понадобилось улучшить.
Однако нет такого GetAllScriptsCopy, вроде как нигде
Вы рассматриваете этот ScriptsEnum как реальную задачу, и если да, то какую?
или как некое упражнение?
Если рассматривать задачу как способ улучшить доступ ко внутрям.
то наверное надо определить что значить "улучшить"?

Если насчет доступа до внутрей, то мне всего вами предложенного было бы как-то слишком мало.
Я вот например для себя сделал такую вещь, и думаю что лучше и нельзя сделать, как по мне:
image.png
тут собсна прямой доступ до внутренних таблиц, на которые можно сделать любой итератор на любой вкус в зависимости от задачи.
может быть тут нарушен какой-то баланс "открытость -- безопасность", перейдены красные линии.
но лично я почти всегда за открытость, и именно тут не вижу что тут нужно безопасить в ущерб открытости, ну и если надо вводить красные линии, то я опять же не могу знать где они должны лежать именно в этом задаче
Last edited by citRiks on Sat 19 Jun, 2021 17:31, edited 1 time in total.
User avatar
citRiks
Posts: 1733
Joined: Fri 25 Oct, 2019 18:18
Has thanked: 610 times
Been thanked: 102 times

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

Post by citRiks »

PS
кусок обсуждения который я потерял, сейчас прочитал и начал понимать о чем речь
https://bugs.farmanager.com/view.php?id=3536
но мне все равно свой способ большe нравится.
Это достается через debug.getinfo(), без изменения в коде ФАРа
User avatar
John Doe
Бюрократ
Posts: 13851
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 73 times
Been thanked: 428 times
Contact:

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

Post by John Doe »

citRiks wrote: Sat 19 Jun, 2021 17:25 мне всего вами предложенного было бы как-то слишком мало
"Предложенное" это развитие GetMacroCopy, учитывающее многочисленные появившиеся с тех пор типы скриптов.
Было бы конструктивно если бы вы перечислили задачи, требующие чего-то большего.
https://t.me/FarManager — Telegram чат
User avatar
citRiks
Posts: 1733
Joined: Fri 25 Oct, 2019 18:18
Has thanked: 610 times
Been thanked: 102 times

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

Post by citRiks »

John Doe,
значит, задача в нахождении нужного макроса/ов с возможностью гибкой и эффективной фильтрации списка? это надо подумать конечно .. первое что мне приходит в голову сделать так чтобы можно было загрузить/удалить/обновить конкретный файл с макросами. значит фильтрацию надо сделать с возможностью фильтра по файлам. значит тут нужно передавать какой-то callback функцию проверки на произвольный критерий. надо что-то с функцией проверки критерия вопчем. что-то максимально эффективное по времени конечно.
я еще подумаю потом что-надо бы сделать, пока гениальных идей нету
User avatar
John Doe
Бюрократ
Posts: 13851
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 73 times
Been thanked: 428 times
Contact:

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

Post by John Doe »

citRiks wrote: Sat 19 Jun, 2021 18:30 значит фильтрацию надо сделать с возможностью фильтра по файлам
Всё такое можно навесить уже поверх предлагаемого итератора, поэтому наверно не стоит усложнять апи.
citRiks wrote: Sat 19 Jun, 2021 18:30 что-то максимально эффективное по времени конечно.
Врядли производительность окажется критичной именно в этом месте.
https://t.me/FarManager — Telegram чат
User avatar
citRiks
Posts: 1733
Joined: Fri 25 Oct, 2019 18:18
Has thanked: 610 times
Been thanked: 102 times

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

Post by citRiks »

John Doe wrote: Sat 19 Jun, 2021 18:40Врядли производительность окажется критичной именно в этом месте.
Ок, может тогда так поставить вопрос:
"как же нам максимально ускорить LuaManager @ИгорьЗ с помощью новейших ли итераторов, или того что для этого понадобиться?"
LuaManager хороший пример поиска и всяческих действий по скриптам.
Когда скриптов сотни, то LuaManager весьма ощутимо не мгновенный (я помню про последние улучшения)
вот мне кажется что надо посмотреть как можно добиться мгновенности реакции LuaManager-а.
возможно добавить встроенную индексацию, которую LuaManager сам перестраивает динамически каждый раз.
вот чтобы ее не надо было перестраивать, добавить поле/поля индекса/ов.

в целом насчет вашего "врядли производительность окажется критичной именно в этом месте".
может я чего-то не понимаю, это во-первых,
все же думаю что запросто окажется критичной,
ведь много где надо пробегаться по списку скриптов, например
в MacroEx, ScriptManager/Browser, там где у вас авто-опции и переназначения кнопочек (не помню точно как называется).
Да, с одной стороны это одноразовыe процедуры.
А с другой стороны, вот у нас есть инициализация (запуск) ФАРа.
И все это богатство начинает ощутимо замедлять загрузку, до пары секунд запросто,
и конечно именно в тот момент когда это больше всего бесит.

2.) Копировать таблицу, а потом уже отфильтровывать по критерию, мне кажется что излишне затратно, а лучше бы сначала отфильтровать, а потом копировать

3.) полностью доверяю вашему вкусу и выбору для API :)
Last edited by citRiks on Sat 19 Jun, 2021 19:15, edited 3 times in total.
Shmuel
Posts: 6834
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 41 times
Been thanked: 530 times

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

Post by Shmuel »

citRiks wrote: Sat 19 Jun, 2021 19:10 А с другой стороны, вот у нас есть инициализация (запуск) ФАРа.
И все это богатство начинает ощутимо замедлять загрузку, до пары секунд запросто,
Каждый раз изумляюсь, когда читаю подобное. У меня время загрузки макросов при запуске Фара примерно 40 миллисекунд.
User avatar
citRiks
Posts: 1733
Joined: Fri 25 Oct, 2019 18:18
Has thanked: 610 times
Been thanked: 102 times

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

Post by citRiks »

Shmuel wrote: Sat 19 Jun, 2021 19:19Каждый раз изумляюсь, когда читаю подобное. У меня время загрузки макросов при запуске Фара примерно 40 миллисекунд.
я говорю не про загрузку самих макросов, а про кастомные уже итерации по скриптам, например ScriptManagaer, MacroEx. например еще попробуйте посортировать что-нибудь в LuaExplorer. и понятно что это все сильно завивисит от количества скриптов. и понятно что это сильно зависит от загруженности машины.
Далее например.
Вы заходите на сервер потому что вам сообщили про высокое CPU/IO на нем.
Вы заходите, запускаете ФАР, и он долго запускается.
Потому что CPU высокое.
И это случается со сколь угодно сильными машинами
По совокупности вышесказанного меня, в свою очередь, удивляет аргумент "а вот у меня загрузилось за 40 мс".
Очень хорошо что так, только это не совсем аргумент, как на мой взгляд
Shmuel
Posts: 6834
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 41 times
Been thanked: 530 times

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

Post by Shmuel »

citRiks, я процитировал ту часть вашего сообщения, на которую ответил. В ней шла речь именно про запуск Фара.
Я привёл свою цифру, которая у меня достаточно стабильна. Почему это не аргумент? Вы же говорили про загрузку, не так ли?
User avatar
citRiks
Posts: 1733
Joined: Fri 25 Oct, 2019 18:18
Has thanked: 610 times
Been thanked: 102 times

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

Post by citRiks »

Shmuel wrote: Sat 19 Jun, 2021 20:08 Я привёл свою цифру, которая у меня достаточно стабильна. Почему это не аргумент? Вы же говорили про загрузку, не так ли?
Цифра хорошая.
как мне представляется, абсолютная цифра именно у вас, когда вы не сообщаете никаких условий запуска кроме этой цифры, на что это может указывать?
на мой взгляд нa ничего не указывает.
я не сомневаюсь что я тоже могу получить даже лучшую цифру, если возьму игровой компьютер и запущу там ФАР с тремя макросами из папки %FarHome%\Macros\Addons :)
я вот тут тоже не отличился полным подробным перечнем условий запуска, но я по-крайней мере перечислил наброски сценариев в которых запуск неизбежно пробуксовывает.
у вас же просто утверждение "у меня все всегда работает стабильно", что и малоинформативно, и никак не относиться к сценариям которые я описал и на которые обращаю ваше внимание

PS
Да, я говорил про загрузку в неблагоприятных условиях запуска, при которой происходят итерации и какие-то действия по списку макросов

PS2
Не хотелось бы отнимать ваше время, можно сойтись на том что я не прав
Last edited by citRiks on Sat 19 Jun, 2021 21:09, edited 2 times in total.
Shmuel
Posts: 6834
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 41 times
Been thanked: 530 times

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

Post by Shmuel »

citRiks wrote: Sat 19 Jun, 2021 21:05 Цифра хорошая. как мне представляется, абсолютная цифра именно у вас, когда вы не сообщаете никаких условий запуска кроме этой цифры, на что это может указывать? на мой взгляд нa ничего не указывает.
я не сомневаюсь что я тоже могу получить даже лучшую цифру, если возьму игровой компьютер и запущу там ФАР с тремя макросами из папки %FarHome%\Macros\Addons
Условия - компьютер среднего класса (не игровой) 4-летнего возраста плюс мой обычный комплект макрофайлов (86 файлов, не считая модулей, естественно).

P.S. Из спортивного интереса создал подпапки scripts\NEW2, ..., scripts\NEW5 и скопировал в каждую из них содержимое scripts, таким образом упятерив количество макрофайлов, теперь их стало 430. Время загрузки макросов стало 135 миллисекунд, всё ещё очень далеко до 2 секунд.
Last edited by Shmuel on Sat 19 Jun, 2021 22:05, edited 1 time in total.
User avatar
John Doe
Бюрократ
Posts: 13851
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 73 times
Been thanked: 428 times
Contact:

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

Post by John Doe »

John Doe wrote: Sat 19 Jun, 2021 15:55 Сама идея предоставиить апи в виде итератора
...
- Это пока единственное место c итератором.
А вот кстати и не совсем, уже есть одна подобная функция (для приватного апи): https://github.com/FarGroup/FarManager/ ... #L590-L610
https://t.me/FarManager — Telegram чат
User avatar
John Doe
Бюрократ
Posts: 13851
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 73 times
Been thanked: 428 times
Contact:

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

Post by John Doe »

Code: Select all

<article>
next_script = mf.EnumScripts (ScriptType)

**Параметры:**
  ScriptType:  string

**Возвращает:**
  next_script:  function

**Описание:**
  Функция *EnumScripts* возвращает функцию-итератор *next_script*, позволяющущую
  перебирать все скрипты заданного *ScriptType* типа, где *ScriptType* - одно из значений:
  "CommandLine", "ContentColumns", "Event", "Macro", "MenuItem", "PanelModule" (по имени функции-загрузчика).

script, index = next_script()

  Каждый последующий вызов *next_script* возвращает копию таблицы следующего
  из загруженных скриптов, или nil, если все скрипты уже перебраны.
  Таким образом для удобного перебора можно использовать конструкцию:

  for script,index in mf.EnumScripts(ScriptType) do действия end

**Примечания:**
  * Вторым значением *next_script* возвращает индекс скрипта в соответствующе внутреннем  массиве.
  * Поведение *next_script* неопределено, если во время просмотра происходит дальнейшая загрузка скриптов.

**См. также:**
`GetMacroCopy` - работает только с "Macro" и "Event".

@@@
[GetMacroCopy]: 72.html
#_
</article>
https://t.me/FarManager — Telegram чат
User avatar
buniak_a_h
Posts: 4262
Joined: Sat 20 Apr, 2013 00:17
Location: Санкт-Петробад
Has thanked: 222 times
Been thanked: 644 times
Contact:

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

Post by buniak_a_h »

John Doe, а что, несколько ScriptType-ов указать нельзя? Или совсем опустить (что означает "все типы")?
User avatar
John Doe
Бюрократ
Posts: 13851
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 73 times
Been thanked: 428 times
Contact:

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

Post by John Doe »

Поделитесь в каких случаях было бы удобно вперемешку.
https://t.me/FarManager — Telegram чат
Post Reply

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