atcstagervip 3578 Posted May 15, 2017 Другой скролл тоже самое, только сотни(кажись). На случай если массив большой. Share this post Link to post Share on other sites
strelez 614 Posted June 2, 2017 Раздел, похоже, в анабиозе. Чтоб не плодить новую тему ради пары вопросов на "кладбище" спрошу здесь. Коллеги, кто писал или пишет на lua, подскажите. Например, в файлах у Фелиса в Ан-24 часто встречаются строки типа, local переменная = bla....bla...bla в теле обновления функции. По логике обьявлять локальную переменную нужно один раз и до начала ее использования. Каков смысл при каждом обновлении функции ( раз 20 в сек., наверное) вновь и вновь обьявлять одну и ту же переменную? Это же занимает время? А таких строк наблюдается очень много.... Это особенность, фишка такая, я чего-то недопонимаю или просто так сделано, как сделано? PS: для корректоров, если че, нет у меня на планшете твердого знака и буквы е с точками , а ездить пальцем для "выдавливания" этих букв не всегда вспоминаю. Share this post Link to post Share on other sites
mxkv67 256 Posted June 3, 2017 Смысл в области локальности. Локальная переменная определена только там, где она декларируется, т.е. это может быть файл, тело функции, тело оператора цикла, одна из веток IFа или даже просто участок кода (в подробности вдаваться не буду). Цена такой локальности практически нулевая - просто вместо обращения к сегменту данных генерируется обращение к стеку, а польза может быть не малой, ведь нет гарантии, что не забудешься и в другом месте не задекларируешь переменную с таким же именем для чего-нибудь другого. Кстати, в приличный средах разработки есть "советчики", которые переносят декларацию непосредственно к месту использования, так что это можно считать как бы правилом хорошего стиля. Share this post Link to post Share on other sites
strelez 614 Posted June 3, 2017 Я на сто пудов был уверен, что ответит именно mxkv67 . Приветствую! Мне в принципе понятна суть локальности переменной, выражающаяся в области её видимости и времени жизни, например в тех же C++, C#. Они компиляторы, а lua, как я понимаю, интерпретирует строки в теле update function с частотой примерно 20 раз в секунду. Компилятор при копмиляции отводит для переменной память и т.д. но делает ведь это он один раз!? И в дальнейшем к переменной уже можно обращаться по имени в пределах её области видимости и жизни. А если в lua в теле update function перед обращением к переменной она объявляется, то это это объявление повторяется каждый раз при обновлении, т.е те самые примерно 20 раз в секунду? Я именно это имею ввиду. Почему не объявить, например, переменную в этом же файле, но до блока function update? Как я понимаю, все что находиться в файле lua до блока обновления function update просматривается один раз при загрузке модели или перезагрузке. Может я ошибаюсь, потому что выводы делаю из собственных наблюдений и рассуждений, почитать об этом негде. Пока не перезагрузишь модель, в частности ан-24, изменения, сделанные в файле lua, не всупят в силу. Значит что- то sasl читает по новой или просто вновь перезаписывает всё в память ОЗУ? Меня смущает именно объявление переменной в блоке обновления - каждый раз при обновлении вновь объявляется переменная, вместо того, чтобы сделать это объявление однажды. Ведь на это тратиться впустую время!? Может я просто неверно провожу аналогию с C/C++/C# !? Share this post Link to post Share on other sites
mxkv67 256 Posted June 4, 2017 Как ни странно, LUA тоже компилируется, а не интерпретируется. То есть сначала скрипты LUA конвертятся в C код, а потом этот код на лету компилируется. Отсюда некоторая негибкость, которая, впрочем, компенсируется высокой скоростью выполнения. Share this post Link to post Share on other sites
Maxxe 540 Posted June 4, 2017 Если уж проводить аналогию с Шарпом, то это ведь переменная, а не объект. Ее не нужно создавать каждый раз при апдейте и выделять память в куче. Под неё изначально зарезервирован кусок памяти в стеке. Разница точно такая же как между int counter = 5; И Hashtable links = new Hashtable(); Share this post Link to post Share on other sites
strelez 614 Posted June 4, 2017 Если я правильно вас понял, коллеги, то нет разницы до или внутри блока {function update() .... end} объявлена локальная переменная: [... local a = 1 (ну или если можно просто local a) function update() a = get(что-то) end] и [... function update() local a = get(что-то) end] С памятью я понял - стек он и Африке стек. А тратится ли дополнительное время на объявление каждый раз при обновлении? Иными словами, по временным затратам эти способы одинаковы или нет? Меня заинтересовал именно временной аспект. Объём кода lua и время его выполнения влияет же, наверное, на итоговый FPS? Share this post Link to post Share on other sites
mxkv67 256 Posted June 5, 2017 На объявление скалярной переменной время не тратится. На объявление не скалярной - тратится (на выделение/освобождение памяти), но немного, т.е. если это происходит меньше десятков тысяч раз в секунду (впрочем, данные не новейшие, сейчас может быть и того больше), то не заметно. Share this post Link to post Share on other sites
strelez 614 Posted June 5, 2017 Спасибо! Из любопытства, а это касается всех скалярных: глобальных, локальных и т.д? Share this post Link to post Share on other sites
mxkv67 256 Posted June 5, 2017 Выделение памяти одинаково для всех скаляров, А вот в работе разница есть. Поскольку LUA не работает с глобальными переменными напрямую, их приходится сначала подчитывать в локальную память (строго говоря глобальные переменные считываются на регистры, но поскольку локальные переменные изначально сидят на регистрах, то можно сказать что в локальную память), а после операции сохранять обратно в глобальную память, что, конечно, немножко замедлит программу, но это будут микросекунды и на FPS не скажется. Share this post Link to post Share on other sites
Maxxe 540 Posted June 5, 2017 2 hours ago, mxkv67 said: Выделение памяти одинаково для всех скаляров, А вот в работе разница есть. Поскольку LUA не работает с глобальными переменными напрямую, их приходится сначала подчитывать в локальную память (строго говоря глобальные переменные считываются на регистры, но поскольку локальные переменные изначально сидят на регистрах, то можно сказать что в локальную память), а после операции сохранять обратно в глобальную память, что, конечно, немножко замедлит программу, но это будут микросекунды и на FPS не скажется. А вот интересный вопрос, может вы знаете. Я так предполагаю что обращение к датарефу более тяжёлая операция чем обращение к глобальной переменной? Это просто к тому как лучше организовать взаимодействие между кодом в разных луа скриптах: через глобальные переменные или все-таки лепить датарефы. Share this post Link to post Share on other sites
mxkv67 256 Posted June 5, 2017 Через глобальные быстрее получится, но ненамного (естественно, я предполагаю что поиск датарефа мы делаем один раз, ну и эвентов никаких на свои датарефы не сажаем). После того, как мы нашли датареф накладные расходы практически как при доступе через getter/setter - добавляется только вызов соответствующей функции по указателю. Share this post Link to post Share on other sites
strelez 614 Posted June 5, 2017 Становится всё интересней . Тоже думалось об этом, теперь буду знать. Возникли новые вопросы. Что означает "поиск датарефа один раз и эвентов не сажаем?" По взаимодействию через глобальные. Глобальная переменная в lua по умолчанию, если нет уточнения local, так ведь? А если в каком-нибудь блоке переменную объявить без local будет она глобальной или объявление глобальных нужно делать только до обновления ( function update() )? Sasl, наверное, не совсем lua, c какими-нибудь особенностями, ограничениями!? Если есть необходимость взаимодействия отдельных скриптов (файлов xxxx.lua) через глобальные переменные где их, переменные объявлять? В avionics.lua или в любом из файлов xxxx.lua? Понятно, что можно поэкспериментировать и определить. Спросить у знающих как-то надёжнее . Share this post Link to post Share on other sites
mxkv67 256 Posted June 6, 2017 Во, давно надо было найти знающих людей и поспрашать. Или книжку умную почитать. А то нашел кого спрашивать - меня - я только пару программ на LUA написал (не пришлась она мне по душе), откуда мне такие тонкости знать? Share this post Link to post Share on other sites
strelez 614 Posted June 6, 2017 38 минут назад, mxkv67 пишет: Во, давно надо было найти знающих людей и поспрашать. Или книжку умную почитать. А то нашел кого спрашивать - меня - я только пару программ на LUA написал (не пришлась она мне по душе), откуда мне такие тонкости знать? Здрасте, приехали. Напротив, у меня давно обратное мнение о твоей достаточной куда более компетенции, Михаил, судя по активности на форумах и обсуждаемым вопросам в разных темах! Что касается умных книжек, не поверишь, массу накачал и даже приобрёл кое что печатное. С некоторых пор почти настольная(настоящая, давно охотился) Р. Лафоре ООП в С++, по С# Дейтела почитываю и по ходу много другого. Правда, нарушается систематичность в освоении, блин, жизнь со своими коррективами. А lua, точнее применительно к саслу и симулятору где ж такие книжки найти? Ну находится кое что в сети на форумах. А чего-то вроде книги Лафоре вряд ли существует. Знающих тоже где искать? Этот, например, раздел давно помер, судя по отсутствию движухи последние год два. Остаётся вникать в имеющиеся скрипты (я ан 24 Фелиса) и вопрошать к тем, кто откликается. Ты вот откликнулся на моё сообщение я и прицепился с вопросами как банный лист . Так шо звиняйте, не по злому умыслу, природного любопытства и жажды познания токмо ради! Так всё же что это за "эвенты на датарефы"? Share this post Link to post Share on other sites
mxkv67 256 Posted June 6, 2017 Эвенты для Ан-24 вряд ли понадобятся, это в случае когда у тебя датареф может быть изменен где-нибудь в другом плагине, чтобы не проверять его каждый раз удобно повесить на него функцию, которая будет вызываться при изменении датарефа. И я не знаю, поддерживает ли это SASL, через SDK точно можно. Ну а SASL это просто плагин, который может подключать к себе скрипты ЛУА и дает возможность этим скриптам обращаться к своим функциям. С документацией там действительно не очень, наверное подразумевается что использование его функций понятно из их названия. Ну и на самом деле, никто же не ожидает что там будут объясняться особенности моделирования устройств Ан-24? Share this post Link to post Share on other sites
MrSergey 381 Posted June 6, 2017 Накупить книжек и поставить или типа читать это антураж ряженного дебила, не нужно ничего покупать и читать уже давно в приоритете способность быстро искать и фильтровать информацию ))) Share this post Link to post Share on other sites
strelez 614 Posted June 6, 2017 3 часа назад, mxkv67 пишет: Эвенты для Ан-24 вряд ли понадобятся, это в случае когда у тебя датареф может быть изменен где-нибудь в другом плагине, чтобы не проверять его каждый раз удобно повесить на него функцию, которая будет вызываться при изменении датарефа. И я не знаю, поддерживает ли это SASL, через SDK точно можно. Ну а SASL это просто плагин, который может подключать к себе скрипты ЛУА и дает возможность этим скриптам обращаться к своим функциям. С документацией там действительно не очень, наверное подразумевается что использование его функций понятно из их названия. Ну и на самом деле, никто же не ожидает что там будут объясняться особенности моделирования устройств Ан-24? Спасибо, Миша!!! Ну как бы понятно, что никто не разжууёт жувачку кроме меня самого . Вот такими разными путями и движемся. Share this post Link to post Share on other sites
strelez 614 Posted June 6, 2017 54 минуты назад, MrSergey пишет: Накупить книжек и поставить или типа читать это антураж ряженного дебила, не нужно ничего покупать и читать уже давно в приоритете способность быстро искать и фильтровать информацию ))) Сие как понимать? По рублю и в школу не пойдём, типа? Меня, например, давненько уже тошнит от чтения всякой инфы с монитора. Поэтому, если есть возможность приобрести инфу в печатном виде я это делаю. Я читать люблю, книги, нормальные, страницы перелистывать. Следуя твоей логике, всяк, кто заходит в книжный магаз ряженный дебил, а также всяк, кто эти магазы содержит, а следовательно, большая часть населения. Мимо, не зачёт. Я здесь спрашивал конкретных советов по тематике, а не что сейчас в приоритете - чтение или быстрый поиск и фильтрация. Когда потребно - ищем и фильтруем. Когда хотим читать - читаем. Share this post Link to post Share on other sites