Автоматическое обьединение луа-скрипта и его зависимостей в один скрипт? или в несколько скриптов но без лишнего в них?

Столкнулись с проблемой в использовании макросов? Здесь можно получить помощь.
User avatar
citRiks
Posts: 1612
Joined: Fri 25 Oct, 2019 18:18
Has thanked: 502 times
Been thanked: 95 times

Автоматическое обьединение луа-скрипта и его зависимостей в один скрипт? или в несколько скриптов но без лишнего в них?

Post by citRiks »

Здравствуйте дорогие луа-фаро-воды.
Изложу как можно лаконичнее и понятнее.

Исходные данные:
В наличии имеем скрипты со многими зависимостями в других скриптах и модулях.
Также в наличии имеем желание щедро делится этим добром.

Таким образом, задача:
Публиковать в народ Луа-скрипты, но так чтобы у народа они не падали изза зависимостей.

Таким образом, проблема:
Фиксить эти зависимости - отдельный сам по себе большой кусок работы,
зачастую основной обьем работы.

Попытка решения:
У меня есть наработки по выявлению зависимостей,
и даже соображения для автоматического встраивания в публикуемый код,
но это все еще предстоит кусок работы и кустращина,
когда уже должны быть общепринятые решения.
(например - автор clink-а как-то слепляет луа-код из разных модулей вместе)

Таким образом, вопрос:
Есть ли у кого работающее решение?
или какое знание, что вот например "вот этот какой-то способ наиболее пригоден в луа-фаро-водстве"
?


Дисклаймер
Этот пост является попыткой сэкономить время себе и обществу,
и привести таким образом к прогрессу и процветанию.
А кто не поверит в наше миролюбие, / Тот кровью умоется. / И будет такая борьба за мир, / Что камня на камне не останется.
buniak_a_h
Posts: 3205
Joined: Sat 20 Apr, 2013 00:17
Location: Санкт-Петробад
Has thanked: 169 times
Been thanked: 468 times
Contact:

Автоматическое обьединение луа-скрипта и его зависимостей в один скрипт? или в несколько скриптов но без лишнего в них?

Post by buniak_a_h »

Вы предлагаете все require заменить на текст? Типа «процедуры - от лукавого»? ;-)
На самом деле намного интереснее формализация скриптов и создание online-библиотеки, чтоб некий скрипт / плагин мог обновлять аналогично тому, как это делает с плагинами Renewal …
Я не знаю, что такое «дисклаймер», но вот обоснование:
Я и сам наталкивался, что вновь написанный скрипт требует определённой версии модуля. Если модуль небольшой - его можно включить в текст скрипта. Но иметь один и тот же код во многих скриптах, да ещё в случае исправления «злобной» ошибки перезаливать все зависящие скрипты - это жёстко! А вот проверить актуальность модулей - это было бы полезно.
User avatar
HaRT
Moderator
Posts: 9936
Joined: Tue 30 Aug, 2005 17:21
Location: Санкт-Петербург
Has thanked: 141 times
Been thanked: 280 times

Автоматическое обьединение луа-скрипта и его зависимостей в один скрипт? или в несколько скриптов но без лишнего в них?

Post by HaRT »

LuaRocks же. Это не в смысле вливать все зависимости, а в смысле модуляризации и управления зависимостями.
Фар есть инструмент, а не нянька. © 2009 DrKnS
User avatar
citRiks
Posts: 1612
Joined: Fri 25 Oct, 2019 18:18
Has thanked: 502 times
Been thanked: 95 times

Автоматическое обьединение луа-скрипта и его зависимостей в один скрипт? или в несколько скриптов но без лишнего в них?

Post by citRiks »

buniak_a_h,
Вы предлагаете все require заменить на текст? Типа «процедуры - от лукавого»?
В идеале - да, а почему нет? :) запихнуть их в "do .. end", то что в них есть публичного - вынести наружу.
а процедуры вашы - это что в этом контексте?
На самом деле намного интереснее формализация скриптов и создание online-библиотеки, чтоб некий скрипт / плагин мог обновлять аналогично тому, как это делает с плагинами Renewal …
Формализировать и библиотеки - это замечательно, наверное, но:
1.) лишняя работа, изобретательство, кустарщина
2.) надо чтобы скрипты (библиотеки, модули) разных версий уживались вместе
т.е., например, вы опубликовали модуль Tree вместе с TabUtils версия 1.1., все отлично.
далее, вы опубликовали модуль LuaComplete с TabUtils версия 1.5,
пользователь конечно заместил TabUtils.v1-1 на TabUtils.v1-5 (а что ему оставалось делать?)
И теперь у него работает ваш LuaComplete, но не работает Tree.
Технически пользователь может начать выяснять зависимости, скачивать разные ваши версии, советоваться на форуме, итд.
но практически, скорее всего подумает "фигня какая-то", и забьет на такие изыскания вместе с идеей пользоваться ФАРом.
На мой взгляд, и то что я имел ввиду, надо бы чтобы Tree.v1-2-3 шел в комплекте и единстве с TabUtils.v1-1,
и ему (этому модулю) не мешало чтобы пользователь кинул себе LuaComplete.v3-2-1 в комплекте и единстве с TabUtils.v2-2.
чтобы таким образом, паралельно работали:
LuaComplete.v3-2-1+TabUtils.v2-2
Tree.v1-2-3+TabUtils.v1-1
А кто не поверит в наше миролюбие, / Тот кровью умоется. / И будет такая борьба за мир, / Что камня на камне не останется.
User avatar
citRiks
Posts: 1612
Joined: Fri 25 Oct, 2019 18:18
Has thanked: 502 times
Been thanked: 95 times

Автоматическое обьединение луа-скрипта и его зависимостей в один скрипт? или в несколько скриптов но без лишнего в них?

Post by citRiks »

buniak_a_h wrote: Fri 23 Oct, 2020 18:01 Но иметь один и тот же код во многих скриптах, да ещё в случае исправления «злобной» ошибки перезаливать все зависящие скрипты - это жёстко! А вот проверить актуальность модулей - это было бы полезно.
На всякий случай подчеркну, что у самого автора модули и скрипты должны сидеть раздельно, если ему так удобнее.
Обьединение скриптов и зависомостей в одну единицу кода (без других зависимостей) следует происходить при публикации (раздаче).
Если у кого-то не работает какой-то скрипт, и выясняется что версия у него неактуальная,
и еще не опубликавана актуальная, то вы публикуете актуальную, или ссылаетесь на уже опубликованное.
"неактуалность" может быть как на уровне основного скрипта (напр. Tree, LuaComplete),
так и на уровне вспомогательных модулей (TabUtils, MenuUtils).
Пользователю все равно на каком уровне существует ошибка, лишь бы чинилось проще,
и вам должно быть все равно публиковать ли "все-в-одном" (допустим найден легкий способ обединения с зависимостями)
или же публиковать разные зависимости.
Я бы сказал что вам удобнее опубликовать "все-в-одном" и не париться в каком именно месте что у пользователя сломалось
Равно как и пользователю неинтересно в каком именно месте у него что сломалось.
Далее, если ваша опубликованная "ни-от-чего-не-зависимая" версия скрипта не работает - значит проблема не в зависимостях,
и наверное даже не у пользователя.
перезаливать все зависящие скрипты - это жёстко!
перезаливать можно и нужно там где народ удосужился пожаловаться что не работает, с остальным можно предположить что некритичный баг, или непроявлющийся что логично. не каждый ваш скрипт пользуется всеми функциями модуля ТабУтилс, и таким образом баг не обязан случаться везде.
А кто не поверит в наше миролюбие, / Тот кровью умоется. / И будет такая борьба за мир, / Что камня на камне не останется.
User avatar
citRiks
Posts: 1612
Joined: Fri 25 Oct, 2019 18:18
Has thanked: 502 times
Been thanked: 95 times

Автоматическое обьединение луа-скрипта и его зависимостей в один скрипт? или в несколько скриптов но без лишнего в них?

Post by citRiks »

HaRT wrote: Fri 23 Oct, 2020 21:09 LuaRocks же. Это не в смысле вливать все зависимости, а в смысле модуляризации и управления зависимостями.
да, вы говорите с А.Буняк про то же самое.
Но это не решает мною поставленные задачи:
1.) "разные версии того же самого уживаются вместе" (обьяснял выше)
2.) задачи "облегчить публикацию" - не изучать синтаксис/формат файла ".rockspec",
а просто запустить утилиту с заданным скриптом подлежащим публикации,
а на выходе получить "все-в-одном" упаковку,
которая не имеет зависимостей от чего-либо,
и не служит зависимостью чемy-либо.

3.) Задачи "облегчить потребление" - не изучать ЛуаРокс и вспомогательные модули,
а просто закинуть то что надо в scripts, не рискуя что сломается то что работало раньше,
или что не будет работать изза неактуальных зависимoстей.
Last edited by citRiks on Sat 24 Oct, 2020 11:37, edited 5 times in total.
А кто не поверит в наше миролюбие, / Тот кровью умоется. / И будет такая борьба за мир, / Что камня на камне не останется.
User avatar
John Doe
Бюрократ
Posts: 13387
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 54 times
Been thanked: 350 times

Автоматическое обьединение луа-скрипта и его зависимостей в один скрипт? или в несколько скриптов но без лишнего в них?

Post by John Doe »

Вот с первой страницы выдачи гугла

http://lua-users.org/wiki/LuaBuildSystems

https://github.com/jirutka/luapak

https://stackoverflow.com/questions/357 ... pendencies

З.Ы.
Ваш подход не поддерживаю.
Я за аккуратные библиотеки, для совместимости можно версионировать.
https://t.me/FarManager — Telegram чат
buniak_a_h
Posts: 3205
Joined: Sat 20 Apr, 2013 00:17
Location: Санкт-Петробад
Has thanked: 169 times
Been thanked: 468 times
Contact:

Автоматическое обьединение луа-скрипта и его зависимостей в один скрипт? или в несколько скриптов но без лишнего в них?

Post by buniak_a_h »

citRiks wrote: Sat 24 Oct, 2020 10:54 надо чтобы скрипты (библиотеки, модули) разных версий уживались вместе
Ну, надо строго соблюдать 2 правила:
1. Совместимость версий (более новые при применении старого интерфейса должны работать как старые, за исключением ошибок). Т.е новые возможности должны добавляться, а не заменять старые.
2. Должна быть возможность run-time узнать версию модуля (либо поле в таблице, либо специального вида вызов функции)
citRiks wrote: Sat 24 Oct, 2020 10:54 а процедуры ваши - это что в этом контексте?
Процедура - код, вызываемый из разных мест (упрощённо и не совсем верно, но я имел в виду именно этот аспект). Можно повторяющийся код копипастить в каждое место, где он нужен (одна моя со-трудница 15 раз скопировала, а потом грянул аврал и меня отрядили ей помогать. Вам такие слова, что из меня вылетали, даже не снились). А можно сделать процедуру.
На самом деле когда я только знакомился с LUA, меня неприятно поразило полное отсутствие препроцессора (хотя бы #define. #include, #ifdef). Прямо хоть напускай на Lua-тексты препроцессор от другого языка! Кстати, я сделал скрипт для интерпретации RMake-скрипта (мы им на работе года два пользовались). Так вот, он эти инструкции условной компиляции понимает и имеет возможность вывести результат препроцессорной обработки. Если б у ФАРа была возможность перед загрузкой макросов просматривать файлы *.lua.pre, обрабатывать (в память) и загружать макросы уже из полученного кода - это было бы универсальное решение. Увы, Шмуэля нет с нами…
Хотя на самом деле предлагаемая Вами фишка нужна только для формирования скрипта для закачки на форум / передачи куда-то на сторону. А для этого можно и один раз скриптом обработать…
buniak_a_h
Posts: 3205
Joined: Sat 20 Apr, 2013 00:17
Location: Санкт-Петробад
Has thanked: 169 times
Been thanked: 468 times
Contact:

Автоматическое обьединение луа-скрипта и его зависимостей в один скрипт? или в несколько скриптов но без лишнего в них?

Post by buniak_a_h »

buniak_a_h wrote: Sat 24 Oct, 2020 12:04 я сделал скрипт для интерпретации RMake-скрипта
Оказывается, я изобрёл велосипед.
User avatar
citRiks
Posts: 1612
Joined: Fri 25 Oct, 2019 18:18
Has thanked: 502 times
Been thanked: 95 times

Автоматическое обьединение луа-скрипта и его зависимостей в один скрипт? или в несколько скриптов но без лишнего в них?

Post by citRiks »

buniak_a_h,
ну зато это повысило ваши общие луа-навыки.
а так, есть препроцессоры для Луа всяческие.
я могу вам подкинуть, один из них написан наполовину мною,
и потому безглючный, проверенный, и много-полно-фунцкиональный.

2.) далее, а чем, например #include лучше чем dofile(..) ? то же самое с "#ifdef" и др. ?

3.) У меня есть "препоцессор" на C#, который может убирать или вставлять части кода,
тоже не было терпения исследовать гуголь на эту тему, да и не было уверенности что найду то что надо.

4.) для форматирования есть кое-какая утилитка, вышлю если заинтересует
Last edited by citRiks on Sat 24 Oct, 2020 12:50, edited 2 times in total.
А кто не поверит в наше миролюбие, / Тот кровью умоется. / И будет такая борьба за мир, / Что камня на камне не останется.
User avatar
citRiks
Posts: 1612
Joined: Fri 25 Oct, 2019 18:18
Has thanked: 502 times
Been thanked: 95 times

Автоматическое обьединение луа-скрипта и его зависимостей в один скрипт? или в несколько скриптов но без лишнего в них?

Post by citRiks »

buniak_a_h wrote: Sat 24 Oct, 2020 12:04 Ну, надо строго соблюдать 2 правила:
"строго соблюдать" - это путь в никуда. народ за вами не пойдет. надо облегчать жизнь.
в предлагаемой мною компиляции кода в один - не вижу недостатков.
Мы же не жалуемся, а радуемся, когда какой-то экзешник бежит себе не требуя зависимостей?
А когда начинаются зивисомсти - начинается лес из несовместимостей, иногда называемый "dll-hell".
в нашем случае с Луа это будет "dependencies-hell"
А кто не поверит в наше миролюбие, / Тот кровью умоется. / И будет такая борьба за мир, / Что камня на камне не останется.
User avatar
citRiks
Posts: 1612
Joined: Fri 25 Oct, 2019 18:18
Has thanked: 502 times
Been thanked: 95 times

Автоматическое обьединение луа-скрипта и его зависимостей в один скрипт? или в несколько скриптов но без лишнего в них?

Post by citRiks »

John Doe, Спасибо.
гуглить я умею, а хотел найти человека с практическим опытом применения, или пусть теоретическим, но твердым знанием..
А кто не поверит в наше миролюбие, / Тот кровью умоется. / И будет такая борьба за мир, / Что камня на камне не останется.
User avatar
citRiks
Posts: 1612
Joined: Fri 25 Oct, 2019 18:18
Has thanked: 502 times
Been thanked: 95 times

Автоматическое обьединение луа-скрипта и его зависимостей в один скрипт? или в несколько скриптов но без лишнего в них?

Post by citRiks »

buniak_a_h wrote: Sat 24 Oct, 2020 12:04 Процедура - код, вызываемый из разных мест (упрощённо и не совсем верно, но я имел в виду именно этот аспект). Можно повторяющийся код копипастить в каждое место, где он нужен (одна моя со-трудница 15 раз скопировала, а потом грянул аврал и меня отрядили ей помогать. Вам такие слова, что из меня вылетали, даже не снились). А можно сделать процедуру.
ну можно сделать процедуру, только чтобы упаковывалась в итоге в одну аккуратную кучку, не устраивая "dependencies-hell" ))
А кто не поверит в наше миролюбие, / Тот кровью умоется. / И будет такая борьба за мир, / Что камня на камне не останется.
buniak_a_h
Posts: 3205
Joined: Sat 20 Apr, 2013 00:17
Location: Санкт-Петробад
Has thanked: 169 times
Been thanked: 468 times
Contact:

Автоматическое обьединение луа-скрипта и его зависимостей в один скрипт? или в несколько скриптов но без лишнего в них?

Post by buniak_a_h »

citRiks wrote: Sat 24 Oct, 2020 12:38 в предлагаемой мною компиляции кода в один - не вижу недостатков.
Я ж писал. Нашли ошибку - надо исправлять везде, где есть ошибочная функция. Это - жёстко. Поверьте, это не теоретически, я за такими копипастерами прибирал…
buniak_a_h
Posts: 3205
Joined: Sat 20 Apr, 2013 00:17
Location: Санкт-Петробад
Has thanked: 169 times
Been thanked: 468 times
Contact:

Автоматическое обьединение луа-скрипта и его зависимостей в один скрипт? или в несколько скриптов но без лишнего в них?

Post by buniak_a_h »

citRiks wrote: Sat 24 Oct, 2020 12:38 народ за вами не пойдет.
Речь не вообще о народе, а о "писателях", публикующихся. В любой библиотеке алгоритмов и программ есть правила (и даже ГОСТы). Некоторые надо соблюдать. Тем более, что это нужно и самому автору, если он использует свои скрипты.
Post Reply

Return to “Нужна помощь”