Null
(5.1->5.4 + luajit)
Null
(да, некоторые криворуки не умеют правильно дефайны написать, но что уж поделать, таких я патчу уже как мейнтейнер в линуксодистрибутиве)
Null
а если код либы на Pure Lua, то его писать совместимо - очень легко.
И несовместимым его можно делать только специально (упарываясь по goto, по integer и т.п.)
Stanfox1984
Не знал что есть сообщества по Lua
Snusmumriken
Куда путь держишь, сталкер?
Денис
Lua - это язык для эмбеддинга (встраивания) во всё и вся.
Под неё всё есть, но не в коробке.
В этом и сама суть языка.
В коробке только то, что нужно чтобы сделать всё, что понадобится. И ничего лишнего.
Нужно что-то - ставишь либу с этим (или пишешь сам, если либа слишком жирная или не существует).
Если тебе это не нравится - ты ошибся с выбором языка.
В общем, вспоминая одного моего знакомого:
Python tries to give you as much as possible, while
Lua tries to give you as less as possible.
Я бы даже сказал, что Lua позиционируется как язык для ембеддинга. Стэндалон здесь так, бонусом. Вся проблема в том, что даже сами разработчики его так позиционируют, а исполняшки в дистрибутиве - это так, чтобы было. При этом, я лично нисколько не отрицаю его стэндалонность, с прямыми руками это один из более менее быстрых интерпретируемых языков с довольно приятным синтаксисом со свободной парадигмой написания кода. еще одна проблема - это отсутствие большого комьюнити, в виду этого, очень мало импленентаций тех или иных решений, а то, что есть, нужно еще умудриться собрать.
Меня язык подкупил скоростью интерпретации. Все проблемы так или иначе решаются, если, опять же, имеем в комплекте прямые руки. Да, иногда прямость рук недостаточна, но тем не менее.
Timur
Я бы даже сказал, что Lua позиционируется как язык для ембеддинга. Стэндалон здесь так, бонусом. Вся проблема в том, что даже сами разработчики его так позиционируют, а исполняшки в дистрибутиве - это так, чтобы было. При этом, я лично нисколько не отрицаю его стэндалонность, с прямыми руками это один из более менее быстрых интерпретируемых языков с довольно приятным синтаксисом со свободной парадигмой написания кода. еще одна проблема - это отсутствие большого комьюнити, в виду этого, очень мало импленентаций тех или иных решений, а то, что есть, нужно еще умудриться собрать.
Меня язык подкупил скоростью интерпретации. Все проблемы так или иначе решаются, если, опять же, имеем в комплекте прямые руки. Да, иногда прямость рук недостаточна, но тем не менее.
так-то, на любом языке проблему решаются если есть прямые руки...
Snusmumriken
Ну тут как всегда, вопрос количества усилий.
Timur
с луа обычно больше 🤷♂️
Null
Null
не помню когда последний раз приходилось трахаться с Lua 🤷♂️
Timur
с луа обычно больше 🤷♂️
(потому что сообщество маленькое, SO маленькое, количество пакетов мало, время на траблешутинг дольше)
Snusmumriken
Лол, я просто накатал себе библиотечек которые использую 95% времени.
Ну и что-то общеупотребительное вроде луасокета-сжсон с норм мейнтейнерами.
Dmitriy
Dmitriy
ну я про кусочек io
Dmitriy
где забинжено из какой сишки?
Snusmumriken
ну я про кусочек io
Смотри.
local file = io.open("file", "rb")
Это запрос к ОС. За хендлером файла.
ОС обрабатывает всякую ерунду, вроде файловой системы.
Но не везде есть ОС и файловая система. Например, представь что у тебя микроконтроллер с припаянной напрямую к ногам флешкой.
Придётся адаптировать чтение через луёвый драйвер файловой системы этой флешки, и добавлять слой совместимости с io чтобы восстановить функционал.
Snusmumriken
И луёвое io это прямой биндинг сишной стандартной либы.
Вот этого вот —
FILE *fopen( const char * filename, const char * mode );
Притом луа буквально использует именно этот функционал прямо из сишки. Просто маленькая обёрточка вокруг хендлеров.
Dmitriy
тэкс, пойду почитаю, что такое хэндлер
Snusmumriken
Хе
Dmitriy
я с луа недавно стал только дружить, уж не обессудьте)
Snusmumriken
Оно никак не пересекается с луа, это общеупотребительная практика.
Snusmumriken
Это что угодно, что работает маркером чего угодно.
Например, число.
int hnd = winapi.getWindowHandler();
Опа, мы получили число 1231234124. Нам оно ни о чём не говорит, но мы, допустим, можем изменять размер этого окна через
winapi.setDimensions(hnd, 800, 600);
Dmitriy
тю, это же обработчик событий
Snusmumriken
Какие события?
Snusmumriken
Обработчик событий это функция, вызывающаяся на событие.
А хендлер — указатель на любую ерунду, который сам по себе ничего не означает кроме того что он означает, и его можно использовать как маркер.
Dmitriy
Обработчик (handler) -- это функция, которая вызывается какой-либо программной системой в ответ на наступление какого-либо события.
Snusmumriken
Чел.
Snusmumriken
Забей в гугл "многозначные слова" и прочитай всё что найдёшь.
Snusmumriken
Dmitriy
Я не против образовываться - ведь человек учится всю свою жизнь. Запомню
Snusmumriken
Говорю как преподаватель.
Dmitriy
int hnd = winapi.getWindowHandler(); ну тут такое ощущение - что это уникальный идентификатор окна мы получаем, а потом используя идентификатор объекта задаем ему свойства. И все это делается через какие-то системные функции. Верно понял?
Snusmumriken
Да, именно так.
Snusmumriken
Причём идентификатор может быть "из песочницы", чтобы ты, например, не мог каким-то образом получить идентификатор окна другого приложения и менять его.
С файлами у стандартной сишки точно такие же хендлеры.
У луа же, ООП обёртка вокруг хендлеров файлов. Крошечная. Но делает ровно те же вызовы тех же сишных функций.
Dmitriy
А еще - по ходу беседы я правильно понял, что весь основной функционал луа умещается в ~2мб? я работаю со встраиваемыми системами, которые программируются на lua но хотелось бы разобратьсЯ и может запилить в свой камень lua
Snusmumriken
пол метра бинарь, рантайму желательно чутка поболее под внутренние штуки и собственно работу интерпретатора.
Snusmumriken
В целом, луа становится прям комфортно использовать с 8-16мб оперативки. Можно плодить кучу мусора.
usernameak
Snusmumriken
(насрать)
Dmitriy
Snusmumriken
Dmitriy
192кб - freertos + Lua влазят легко
Dmitriy
Только что посмотрел и почитал
Snusmumriken
192кб - freertos + Lua влазят легко
Проблема в другом, и она звучит как "Зачем?".
Ну будет у тебя 128 кб оперативки. Ну объявишь ты десять переменных и табличку.
Но на каждый пук придётся вызывать collectgarbage после любой разметки памяти.
Сишка в данном случае проще раз в двадцать, и не жрёт лишнюю память.
Snusmumriken
Грубо говоря, потратить 5% памяти на интерпретатор — совсем не то же самое что потратить 60% на интерпретатор.
Dmitriy
Встраиваем Lua интерпретатор в проект для микроконтроллера (stm32) / Хабр
https://habr.com/ru/post/459602/
Dmitriy
Ну, вдохновился этим, + ещё обнаружил годную статью луа за 60 минут
Dmitriy
Я изначально на си прожил. Но щас как перешёл на автоматизацию - паралельно учу js, python, Lua, c++, Linux bash углубленно.
usernameak
Snusmumriken
Dmitriy
Товарищи,
len(a) и #а тождественны? Я вот читаю и чот не пойму?
Александр
Александр
по сути # это эквивалент string.len для строк и table.getn для таблиц
Dmitriy
Snusmumriken
Snusmumriken
по сути # это эквивалент string.len для строк и table.getn для таблиц
В доке по 5.1 написано что нема table.getn, но есть table.maxn который проходит по табличке с 1 до N, ища первое же вхождение nil. Мол, чисто непрерывная часть.
Но # использует бинарный поиск, и в случае таблицы с дырками может возвращать результат до первой попавшейся любой дырки (проверено практикой и чтением сорцов).
Александр
Александр
Но честно говоря подобное рассоглассование - так себе
Snusmumriken
А у строк он просто возвращает размер выделенного буфера под эту строку, ничего не вычисляя (кроме хеша строки).
Александр
# может быть доопределён метаметодом
Snusmumriken
__len.
Snusmumriken
Бтв лично я просто не использую таблицы с дырками, поэтому # для меня самый короткий и быстрый по исполнению вариант.
Александр
Snusmumriken
Я это обсуждал уже сто миллионов раз, и как будто в бесконечно вечной вселенной преисполнился познания что никому не верю и ничего не жду.
Dmitriy
Dmitriy
Я когда спекнулся в сисадмина и стал массово ставить форточку - одни и те же вопросы, одни и те же ответы. Я даже по ним памятку распечатал на 7 листов.
Snusmumriken
Dmitriy
Так и тут. Я читаю - что len возвращает мне длину строки или размер {}. Тут же вижу конструкцию типа #a. Ну писать 1 решетку так то выгоднее на больших кусках кода, однако чувствую, что "есть ньюанс"
Snusmumriken
Dmitriy
function uart_send(msg)
local tmp = {}
for i = 1, #msg do
tmp[i-1] = msg[i] end
uart_send_data(tmp) --here the send command end
Snusmumriken
Dmitriy
Массив hex