Лишние функции macro api

Здесь обсуждается всё, что касается макросов.
Shmuel
Posts: 6211
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 31 times
Been thanked: 342 times

Re: Лишние функции macro api

Post by Shmuel »

Latest post of the previous page:

Smitis wrote:Во всяком случае это будет логичным поведением, чем отсутствие возвращаемых значений, которое иногда интерпретируется как nil, а иногда вызывает ошибку.
Внимательно читаем здесь (от 2.5 до 2.5.1). Обращаем особое внимание на слово "adjusted".
Если не поможет, я не виноват.
User avatar
John Doe
Бюрократ
Posts: 13061
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 41 times
Been thanked: 319 times

Re: Лишние функции macro api

Post by John Doe »

Если вызов функции, не возвращающей значений, взять в скобки, то получим желанный nil.

Но уже неактуально, т.к.:

Code: Select all

shmuel 04.05.2014 11:24:24 +0200 - build 327

1. LuaFAR: ряд функций приведен в соответствие с документацией в отношении их возвращаемых значений.
   Эти функции могли возвращать 0 значений, тогда как по документации должны были возвращать nil или false.
User avatar
John Doe
Бюрократ
Posts: 13061
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 41 times
Been thanked: 319 times

Re: Лишние функции macro api

Post by John Doe »

Предлагаю начать с того, чтобы в мануале создать спецраздел, перечисляющий функции из шапки вместе с рекомендованными заменами.
В разделе mf такие функции можно пометить например цветом, и вместо исходных ссылок сослаться на спецраздел.

Могу поучаствовать, оформить текст статьи в markdown.
Shmuel
Posts: 6211
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 31 times
Been thanked: 342 times

Re: Лишние функции macro api

Post by Shmuel »

John Doe wrote:Предлагаю начать с того, чтобы в мануале создать спецраздел, перечисляющий функции из шапки вместе с рекомендованными заменами.
В разделе mf такие функции можно пометить например цветом, и вместо исходных ссылок сослаться на спецраздел.

Могу поучаствовать, оформить текст статьи в markdown.
Поучаствуйте, присылайте сразу патчи для обоих мануалов (или их обновлённые версии целиком).
ladserg
Posts: 229
Joined: Thu 19 Feb, 2009 14:51
Has thanked: 5 times
Been thanked: 3 times

Re: Лишние функции macro api

Post by ladserg »

Имхо, функции basicSerialize, int64Serialize и tableSerialize можно заменить одной, на вроде:



И сделать её доступной в обычных макросах, мне нередко приходится делать дамп массивов для проверки значений, думаю другим она тоже пригодится. Хотя в API её видеть было бы интереснее.
Shmuel
Posts: 6211
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 31 times
Been thanked: 342 times

Re: Лишние функции macro api

Post by Shmuel »

ladserg wrote:И сделать её доступной в обычных макросах, мне нередко приходится делать дамп массивов для проверки значений, думаю другим она тоже пригодится. Хотя в API её видеть было бы интереснее.
Невозможно все мыслимые полезные функции помещать в API. Каждый пользователь имеет разные мнения по поводу полезности. И каждый пользователь может иметь свой собственный набор модулей и утилит в дополнение к стандартному.

А вышеупомянутые функции предназначены для сериализации, а не для отладки. Для отладки есть лучшие варианты, например Lua Explorer (ищите на форуме). Для красивого вывода содержимого таблиц также есть лучшие варианты - используйте ключевые слова для поиска в Google: Lua pretty printing.
ladserg
Posts: 229
Joined: Thu 19 Feb, 2009 14:51
Has thanked: 5 times
Been thanked: 3 times

Re: Лишние функции macro api

Post by ladserg »

Shmuel wrote:
ladserg wrote: А вышеупомянутые функции предназначены для сериализации, а не для отладки. Для отладки есть лучшие варианты, например Lua Explorer (ищите на форуме). Для красивого вывода содержимого таблиц также есть лучшие варианты - используйте ключевые слова для поиска в Google: Lua pretty printing.
Не знаю при чем тут отладка, я просто привел функцию которая заменяет три ваших и так же используется в сериализации. Будьте пожалуйста внимательнее. Про гугл знаю, но не понял зачем вы мне это написали.
ladserg
Posts: 229
Joined: Thu 19 Feb, 2009 14:51
Has thanked: 5 times
Been thanked: 3 times

Re: Лишние функции macro api

Post by ladserg »

Shmuel wrote: Невозможно все мыслимые полезные функции помещать в API. Каждый пользователь имеет разные мнения по поводу полезности. И каждый пользователь может иметь свой собственный набор модулей и утилит в дополнение к стандартному.
Несомненно вы правы, здесь виновата моя неточность в формулировке, все функции в API не засунешь, я имел в виду функции используемые для сохранения настроек. Функции в Lua Macro позволяют не задумываясь сериализировать и сохранять сразу всю таблицу, в Lua плагинах их приходится самому реализовывать, при этом многие плагины хранят свои настройки в профиле. В любом случае что добавлять или нет - решение разработчиков, я все го лишь предложил :)
IgorZ
Posts: 709
Joined: Wed 13 Jul, 2011 03:32
Has thanked: 13 times
Been thanked: 68 times

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

Post by IgorZ »

Shmuel wrote: Tue 28 Nov, 2017 20:32 Я рассматриваю Macro-API как legacy. Что-то такое, что оставлено для совместимости. Развивать его никогда не собирался и не собираюсь. Поэтому с моей точки зрения, вариант приведения в соответствие с документацией, как наименее времязатратный, является предпочтительным.
Это "legacy" часто удобнее и эффективнее, а порой вообще незаменимо. Навскидку, mf.replace нельзя заменить на string.gsub в тех случаях, когда надо выполнять замену (такая вот тавтология), игнорируя возможные регулярные выражения в образце, заданном переменной. Так что не стоит относиться к Macro-API как к чему-то, что существует исключительно для совместимости.
Shmuel
Posts: 6211
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 31 times
Been thanked: 342 times

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

Post by Shmuel »

mf.replace - до сих пор никогда не использовал, надобности не возникало.
Кроме того, эту функцию легко реализовать на Lua, если бы потребовалось.
Как стоит относиться к Macro API - я никому своё отношение не навязываю. Даже немного использую.
Last edited by Shmuel on Wed 29 Nov, 2017 07:45, edited 1 time in total.
User avatar
John Doe
Бюрократ
Posts: 13061
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 41 times
Been thanked: 319 times

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

Post by John Doe »

IgorZ wrote: Wed 29 Nov, 2017 05:44Навскидку, mf.replace нельзя заменить на string.gsub в тех случаях, когда надо выполнять замену (такая вот тавтология), игнорируя возможные регулярные выражения в образце
gsub можно переписать, используя find.
А у find есть параметр plain.
Или ещё проще, можно экранировать "опасные" символы.
IgorZ
Posts: 709
Joined: Wed 13 Jul, 2011 03:32
Has thanked: 13 times
Been thanked: 68 times

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

Post by IgorZ »

John Doe wrote: Wed 29 Nov, 2017 08:18
IgorZ wrote: Wed 29 Nov, 2017 05:44Навскидку, mf.replace нельзя заменить на string.gsub в тех случаях, когда надо выполнять замену (такая вот тавтология), игнорируя возможные регулярные выражения в образце
gsub можно переписать, используя find.
А у find есть параметр plain.
Или ещё проще, можно экранировать "опасные" символы.
Можно, я прикидывал, когда писал. Цикл, в цикле find, два sub, сращиваем, запоминаем, запоминаем позицию, чтоб на следующей итерации искать после заменённого... Сколько кода это займёт? Да и по времени навскидку один шаг итерации будет выполняться в разы дольше, чем весь replace. В итоге сказал "Нафиг, нафиг..." и использовал mf.replace. Быстро и удобно.
С экранированием тоже весело. Поскольку образец для замены заранее неизвестен, это надо делать динамически перед заменой. Поскольку мы заменяем спецсимволы, то это тоже придётся делать, перебирая строку образца в цикле. В общем, если и быстрее, чем через find, то ненамного. Хотя нет. Тут можно обойтись и конструкцией типа pattern:gsub("[%.%[%]%(%)%%]","%%%0"). Уже лучше, но тоже далеко не айс.
В общем, вердикт такой. Можно самому написать замену для чего угодно. Для строк, в частности, достаточно sub, остальное пишется вручную. Но зачем, если уже есть хороший, удобный инструмент?
P. S. Во если бы все строковые функкции Lua имели параметр plain, а не только find... Но даже если это появится в новой версии, далеко не факт, что эта новая версия будет встроена в Far.
User avatar
John Doe
Бюрократ
Posts: 13061
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 41 times
Been thanked: 319 times

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

Post by John Doe »

IgorZ wrote: Wed 29 Nov, 2017 10:22 Да и по времени навскидку один шаг итерации будет выполняться в разы дольше, чем весь replace
Вот не факт. Потому что используя replace мы получаем в нагрузку 2 конвертации: utf8->utf16-utf8
На форуме были сравнения скорости, не replace, но показательно.
IgorZ
Posts: 709
Joined: Wed 13 Jul, 2011 03:32
Has thanked: 13 times
Been thanked: 68 times

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

Post by IgorZ »

John Doe wrote: Wed 29 Nov, 2017 10:48
IgorZ wrote: Wed 29 Nov, 2017 10:22 Да и по времени навскидку один шаг итерации будет выполняться в разы дольше, чем весь replace
Вот не факт. Потому что используя replace мы получаем в нагрузку 2 конвертации: utf8->utf16-utf8
На форуме были сравнения скорости, не replace, но показательно.
Может и так, специально не проверял. Но даже в этом случае остаётся преимущество в компактности и читабельности.
P. S. В тех случаях, когда я проверял некоторые функции LuaMacro и новых аналогов, преимущество в скорости было, как правило, у LuaMacro. Видимо, это зависит от многих факторов, да и различные функции тоже могут работать кто быстрее, а кто медленнее аналогов.
Last edited by IgorZ on Wed 29 Nov, 2017 11:11, edited 1 time in total.
User avatar
John Doe
Бюрократ
Posts: 13061
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 41 times
Been thanked: 319 times

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

Post by John Doe »

Читабельность врядли, ведь всё можно оформить функцией/модулем.
Компактность да, ведь mf.* есть из коробки.
User avatar
zg
zero-gravity
Posts: 5878
Joined: Tue 15 Mar, 2005 17:36
Location: riga
Been thanked: 158 times
Contact:

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

Post by zg »

Shmuel wrote: Wed 29 Nov, 2017 07:24mf.replace - до сих пор никогда не использовал, надобности не возникало.
+1, не знал, что вообще такая есть.
Post Reply

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