Hello, World! 🎄
а чо у тебя ссылка на картинку просто Текст
Это просто на защите такое написали
Сергей
а ну лан
Hello, World! 🎄
Типо кнопочки работают проверяли
Сергей
вот бы ещё туда можно было картиночки загружать
Сергей
и файлики
Сергей
ну да лан
Hello, World! 🎄
Только не нужно уже
Сергей
ага
Hello, World! 🎄
В плане, я не собираюсь развивать этот проект
Михаил
Михаил
зацените синтаксис
Михаил
теперь инфиксные операторы только с ключевым словом operator 1. я могу спать спокойно что после кодинга на этом чуде никто не станет сишником не прострелит коленки и не начнет поливать мой форк говном 2. operator foo и просто foo это теперь разные символы. можно объявлять оператор немножко другой чем функция
Hello, World! 🎄
я юзал sqlalchemy и скажу, очень удобно
Я кстати вместо mongodb, redis и т.п выбрал SqlAlchemy
Hello, World! 🎄
В качестве подключения к бд использую sqlite, aiosqlite
Михаил
Я кстати вместо mongodb, redis и т.п выбрал SqlAlchemy
а вместо языка программирования питон
Михаил
Hello, World! 🎄
а вместо языка программирования питон
)) Я хотел сказать, что выбрал sqlite в связке с sqlalchemy в качестве orm, а не mongodb / redis
Михаил
Очень интересно, но ничего не понятно
я туда еще вот такой оператор добавил: ? foo?.bar?.spam только работает не только с точкой, как в c# foo? ['bar']? ['spam'] даст тот же результат
Михаил
Таки да, вот он, тот самый))
Михаил
да
Hello, World! 🎄
Молодец
Михаил
на nil/false*
Hello, World! 🎄
А шуму про мультиюзерность было)))
Там асинхронно всё работает
Hello, World! 🎄
Ну для записи там поток вроде блокируется для других (пока запись идет)
Hello, World! 🎄
Но в плане того, что приложение многопользовательское, то через async await всё ок работает
Михаил
теперь думаю как сделать чтобы obj*.index = var превращалось в *.(obj, index, var) или другую функцию. для перфа - надо чтоб 2 разные функции были
Михаил
я значительно так в перф упоролся
Михаил
потому что так легче выбирать между 2+ вариантами как реализовать фичу
Hello, World! 🎄
теперь мне интересно, как время не жалко тратить на это
Михаил
выходной...
Михаил
лето...
UtoECat
Ну для записи там поток вроде блокируется для других (пока запись идет)
Вообще работу с sqlite можно заоптимизировать до уровня что запрос к ней вообще не будет чувствоваться даже в синхронке. Я думал что цель у тебя в нескольких сервисах что одну бд дёргают, а нет) Но если в будущем sqlite будет не хватать - с sqlalchemy движок почти без боли всегда можно будет поменять, так что...
Hello, World! 🎄
И так как там все на async / await строится, то поэтому искал способы асинхронно использовать бд из под python
Михаил
а я на луа простого бота писал. причем даже на луажите
Михаил
правда без бд..
Hello, World! 🎄
Поэтому то, что выше описал +- нормально подходит
Михаил
с sqlite?)
Hello, World! 🎄
С sqlite думаю проблем особых не будет, там не громадное кол-во пользователей и запросов будет
UtoECat
А какие особые такие пределы у sqlite есть?
Если нагрузка будет прям огромная и при этом дёргать один файл бд из нескольких приложений одновременно, то будет не очень приятно... А так - норм.
Михаил
ну думаю лучше все равно постгрес какойнить
Hello, World! 🎄
с sqlite?)
Да, но там connection_string просто меняется на другую бд и 0 проблем с этим
Hello, World! 🎄
Там перезапись не так часто будет нужна
Hello, World! 🎄
Больше для чтения
Hello, World! 🎄
ну думаю лучше все равно постгрес какойнить
Да, можно потом будет просто развернуть её и подключение поменять
Hello, World! 🎄
а переносить данные как
Просто получить все данные через select и записать в новую бд
Hello, World! 🎄
С этим проблем особых не должно быть
Hello, World! 🎄
Тем более вся работа с бд полностью через orm sqlalchemy работает, для работы другой бд просто поменять строку и перенести данные будет необходимо.
Михаил
теперь думаю как сделать чтобы obj*.index = var превращалось в *.(obj, index, var) или другую функцию. для перфа - надо чтоб 2 разные функции были
я кажись придумал.... и это просто гениально. можно вызвать lookahead (посмотреть на один токен вперед), если там равно то хаваем его и вместо этого генерируем вызов функции..... ну просто гениально, это шедевр. И БОЛЕЕ того, это дает ключ к оператору замещения))))) кажись завтра он уже будет)) если не будет то сделаю второй lookahead и тогда будет точно
Михаил
после этого только <close> добавить и можно делать релиз
UtoECat
после этого только <close> добавить и можно делать релиз
Ммм... Так там нехило же уже в кишки vm лезть надо будет, нет?
Михаил
а еще - тот способ которым я хочу сделать аналог <close> это вот: function foo(a) ltscope local f = SomeClass(); -- этот класс имеет метод __close local b = OtherClass(); -- этот тоже f:use(a); b:use(a); end -- тут скоуп завершается и вызываются __close: для b, потом для f
Михаил
UtoECat
как раз нет. только парсер
Никак да, при ошибках или удалении корутины которая была в процессе нужно же tobeclosed тоже финализировать
Михаил
не понел
Михаил
корутина отдельный LuaState
Михаил
с отдельной таблицей toBeClosed
Михаил
стек типа
Михаил
и что мне помешает, даже при ошибках?
Михаил
ну вылетит ошибка и досвидрс
Михаил
а в обычном луа как было бы, без этих <close>?
Михаил
а все уже
UtoECat
а в обычном луа как было бы, без этих <close>?
У нас unwindится луашный стек, и если помечена была переменная как tobeclosed - вызываем её метаметод __close() Аналогично с корутинами, и lua_resetthread()
UtoECat
У нас unwindится луашный стек, и если помечена была переменная как tobeclosed - вызываем её метаметод __close() Аналогично с корутинами, и lua_resetthread()
Но это я по памяти, может там и отдельный массив с индексами tobeclosed на луашном стеке, не помню уже. То что помню - это точно сильно интегрировано в vm
Михаил
так а что будет если в луа без local f <close> файл оставить? он же тоже не закроется вм-кой. а только при завершении процесса