Igor
https://github.com/ceifa/wasmoon
Igor
Хм, а кто то запускал луа через wasm в вебе?
И ещё раз да https://github.com/Davidobot/love.js
Anonymous
Да
ну мне интересна производительность. именно Си ВМ.
Igor
ну мне интересна производительность. именно Си ВМ.
где-то бенчмарки были, где сравнивали стендалон lua и wasmовский, поищи в репе того же wasmoon они вроде есть, я уж не помню
Igor
берёшь, запускаешь на своей железке в wasm'e comparsion.js и смотришь результаты, потом делаешь тоже самое на стендалоне, выполняя heapsort.lua просто
anton
о/ а есть ли какой либо инструмент по поиску утечек в луа? (или как это называется, когда где-то лежит ссылка на объект, и сборщик не может его удалить)
anton
луа 5.2, не jit, работает внутри приложения на C++
Snusmumriken
о/ а есть ли какой либо инструмент по поиску утечек в луа? (или как это называется, когда где-то лежит ссылка на объект, и сборщик не может его удалить)
Не а. Мало того, если у тебя есть библиотечка которая позволяет, например, не освобождать хендлы, или убивать луа стейты без вызова их функций, то всё что ты сишное наоткрывал — нафиг останется навсегда.
Snusmumriken
А так — обычный дебаггер вроде того что в vs.
Snusmumriken
о/ а есть ли какой либо инструмент по поиску утечек в луа? (или как это называется, когда где-то лежит ссылка на объект, и сборщик не может его удалить)
Таких кривоватых утечек в луях кстати невозможно, потому что луа проверяет доступность к объектам из _G. Твои утечки возможны только если ты сам руками что-то не дочищаешь, например делая бесконечное хранилище фигни, кеш без слабых ссылок и так далее.
anton
просто там много кода, написанного большим количеством людей
Sergei
Есть тут кто писать свои статические анализаторы lua или что-то делал на основе существующих?
R
Есть.
Sergei
Короче, таска вытащить всевозможные обращения к таблицам в коде. Например: a = foo["bar"] b = a["bar2"] Хочу понять, что, вероятно, будет обращение к foo["bar"]["bar2"] Очевидно, задача невозможная в общем случае, но я в поисках решения очевидных/частых кейсов (как пример)
Sergei
Поэтому ищу анализатор, который можно подхачить или мб самому аст обходить
R
Берёшь https://github.com/andremm/lua-parser , строишь ДАС, обходишь рекурсивно.
R
Минификатор пишешь?
Sergei
Не, это буквально и есть задача, дальше отвлеченные вещи с этим делаю
Sergei
Берёшь https://github.com/andremm/lua-parser , строишь ДАС, обходишь рекурсивно.
Я начал через эту либу, но подумал, что мб будет легче переиспользовать код анализаторов, а не просто парсера
Sergei
Типа бойлерплейт для обработки скоупа переменных и т.д.
R
Можно поковырять LuaCheck, но там разобраться будет сложнее, чем своё написать.
Sergei
Эх, понял, спасибо
Sergei
Нет, понять, какие ключи в каких таблицах могут дергаться
Sergei
Да, это самый простой кейс
Hello, World! 🎄
Тебе нужно в функции через цикл и ipairs перебирать и функцию (если table['key'] not nil) вызывать снова, и передавать в функцию table['key']. Ну и в другую таблицу записывать ключи.
Hello, World! 🎄
Через рекурсию перебираешь и записываешь ключи
mva
Да, это самый простой кейс
а ты не lua-lsp ли переизобретаешь?
jesus-2.6.tar.gz ☮︎
Давайте напишем brainfuck на lua, а потом на этом brainfuck напишем lua?
Hello, World! 🎄
Я brainfuck на lua делал
Hello, World! 🎄
У меня даже ide для bf есть, сам делал
jesus-2.6.tar.gz ☮︎
Hello, World! 🎄
BrainF*ck IDE
Sergei
а ты не lua-lsp ли переизобретаешь?
Он так умеет? 0_о У меня достаточно специфичная задача, чтобы реализовывать ее в анализаторе кому-то
jesus-2.6.tar.gz ☮︎
BrainF*ck IDE
На чём написан?
Hello, World! 🎄
R
У меня на собесах стандартная задача: реализовать Форт на Луа.
Hello, World! 🎄
Если с большого экрана смотреть, то все видно
jesus-2.6.tar.gz ☮︎
Я brainfuck на lua делал
Интерпритатор или компилятор?
Hello, World! 🎄
Интерпритатор или компилятор?
Интерпертатор и транслятор, у меня есть Lua код который в Си переводит bf
jesus-2.6.tar.gz ☮︎
Hello, World! 🎄
Hello, World! 🎄
Хватит уже смайликами из однокласников чат засорять
R
Интепретатор?
Естественно, на собесах-то.
R
Сложно?
С Луа всё легко.
R
Какие мета, когда задача статическая, без запуска.
Sergei
Угу, задача статическая
Snusmumriken
А в чём разница в данном случае? )
Sergei
Повесь на все таблицы прокси с метатаблицей __index/__newindex )) Задача вполне реализуемая.
Я правильно понимаю, что нужны будут входные данные для всех ветвей исполнения?:)
Snusmumriken
А у тебя нет тестов?
Sergei
Код может быть любым. Я, конечно, знаю, на каких примерах я буду запускать, но их слишком много
Highly Likely
У меня на собесах стандартная задача: реализовать Форт на Луа.
Объем тестового больше 4 часов работы — можно делать, ток если заплатят :)
Sergei
Да
Highly Likely
Одним «строишь ДАС, обходишь рекурсивно» можно обойтись только для какого-то подозреваю узкого круга кейсов
Highly Likely
(Но это неточно)
Highly Likely
R
Тогда можно и регулярками, чего уж там =)
Я делал и на уровне исходного кода :) Сложнее, чем с ДАС.
Sergei
Тогда можно и регулярками, чего уж там =)
Я начал с этого, но недостаточный процент кейсов закрывает
Highly Likely
Ну вообще, тут какой-то классический data-flow-analysis, кажется
Highly Likely
Это на уровне AST разруливается в довольно простых кейсах, когда явно известно, что правая сторона — таблица