Джифорсович
Ну хотя может так и надо было
Джифорсович
Джифорсович
Ну или как еще, я не догадываюсь общие страницы памяти?
Snusmumriken
Если шарить что-то похожее на объекты — всё равно придётся читать-перечитывать. Крутые посоны делают что-то типа общих страниц памяти насколько я знаю, и указатели на объекты, которые интерпретируются прямо как объекты в разных приложениях одновременно безо всяких копирований. Ну и куча всяких мутексов-светофоров чтобы сделать операции атомарными.
Leon174
Можно. local a, b, c, d, e, foo a = 20 function foo() c = 30 end
Пардоньте, твоя правда, проверил сейчас _G. Просто привычка инициализировать по месту вынуждает разделять список переменных, чтобы нечитаемую кашу присвоений не получить, а значит в каждой строке этот гребаный локал. Замылился глаз. Но в паскале, ниме и им подобных это чище выглядит.
Snusmumriken
А я не понимаю что тебе так уж сильно мешает. Я предпочитаю всегда определять переменные по месту, чтобы не скакать по файлу туда-сюда, и определять функции по последовательному использованию, чтобы когда вижу использование какой-то функции в другой — мотать ВВЕРХ.
Snusmumriken
Ну одно дело — некоторй "конфиг", там понятно что оно должно быть прям на самом верху, и другое дело обычные локалки. Всё равно в модуле выгружаешь.
Leon174
Шума больше с этими локалами, так-то не могу сказать, что по ночам из-за них не сплю. Но подход в fennel мне нравится больше. One of the most common legitimate criticisms leveled at Lua is that it makes it easy to accidentally use globals, either by forgetting to add a local declaration or by making a typo. Fennel allows you to use globals in the rare case they are necessary but makes it very difficult to use them by accident. Fennel also removes the ability to reassign normal locals. If you declare a variable that will be reassigned, you must introduce it with var instead. This encourages cleaner code and makes it obvious at a glance when reassignment is going to happen. Note that Lua 5.4 introduced a similar idea with <const> variables, but since Fennel did not have to keep decades of existing code like Lua it was able to make the cleaner choice be the default rather than opt-in.
Snusmumriken
Для теста на "забыл влепить local" есть local function snap() local g = {} for k, v in pairs(_G) do g[k] = v end return g end local function check(g) for k, v in pairs(_G) do g[k] = nil end return g end local g = snap() require'mylib' require'inspect'( check(g) )
Leon174
Ага, и luacheck еще есть. А можно взять и сделать локал умолчальным, вместо этого камлания с бубнами.
Snusmumriken
А можно сделать setmetatable(_G, {__newindex = function(self, k, v) print("set global", k, v, debug.traceback(2)) rawset(self, k, v) end})
Leon174
Ай, все с тобой понятно, агент Иерусалимски.
Snusmumriken
Да просто я привык, и уже о-о-о-о-очень давно в последний раз забывал написать local )
Snusmumriken
А на тех кто забывает мне пофигу, как-нибудь справятся, научатся и вообще. На let же в жаваскрипте ругани особо не слышно.
Snusmumriken
Во, ещё забыл. В большей части мест где используется луа, как правило, под каждый (или почти под каждый) запрос, операцию или ещё что-нибудь создаётся новый луастейт (или полностью сбрасывается старый), который можно засирать как угодно чем угодно, всё равно очистят-восстановят )) А в те места где оно действительно важно, какающих во все стороны глобалами нубасов не пустят, и тем оно не вызывает особых неудобств.
Александр
Не, как обходть проблему с глобалом по-умолчанию - оно примерно человечество придумало. Но тем не менее как будто это правда ведь некоторое неудобство. По крайней мере несколько контринтуитивно
Snusmumriken
А можно сделать setmetatable(_G, {__newindex = function(self, k, v) print("set global", k, v, debug.traceback(2)) rawset(self, k, v) end})
Ну вот так вот, блин, если очень хочется и очень надо. Оно покажет и расскажет все места где были объявлены глобалы. Да и луачек в проде никто не отменял.
Snusmumriken
Луачек в целом встраивается в рабочий пайплайн, мол, делаешь шорткат на луачек при запуске программы, или что-то такое, получаешь такой же листинг варнинг-эрроров как при нажатии build> в VS на сишке-шарпее.
Александр
Есть ещё strict(особенно удобно, когда он начинает в проде стрелять), действительно есть луачек. Всё можно, но с точки зрения дизайна эта часть у луа не нравится, кажется что, не только мне)
Snusmumriken
Ящитаю, что не надо превращать луашку во что-то крупно-серьёзное. Оно хорошо на своём месте. А то набегут всякие "а давайте сделаем const protected abstract template штук и ещё типизацию пригоним" — и зачем, спрашивается, вам в таком случае луашка? Берите плюсы-шарп-го-раст )) В жаваскрипте понятно зачем тайпскрипт, жаваскрипт имеет тотальную монополию в бравузерах, и тайпскрипт даёт некоторое разнообразие.
Mike_Went
типизация луашке действительно не помешала бы
Leon174
Есть ещё strict(особенно удобно, когда он начинает в проде стрелять), действительно есть луачек. Всё можно, но с точки зрения дизайна эта часть у луа не нравится, кажется что, не только мне)
Не только, не только. Пора создавать подпольную организацию по противодействию агентурной сети PUC Rio, которая вон как далеко раскинула свои щупальца.
Leon174
типизация луашке действительно не помешала бы
Глядишь и в luajit меньше магии бы понадобилось.
Александр
Snusmumriken
С реализацией типизации кстати в любом случае есть проблемы, под названием "грёбаный компилятор". Иначе будет падать только и исключительно на проверках (которые жрут цпу) при исполнении.
Mike_Went
Статическая?
да хоть какая
Александр
да хоть какая
type(var) чёт отдавать умеет)
Leon174
да хоть какая
Хоть какая и так есть (динамическая), речь про статику. Я за опциональную.
Mike_Went
type(var) чёт отдавать умеет)
да это пародия на типизацию. слишком часто луа падает в рантайме. возможно я говнокодер просто
Snusmumriken
Ну Леон предлагает аналог "проверки аргументов", мол function foo(table bar, number n, somevar) end чтобы при попытке вызова без таблицы и числа первыми аргументами оно бы заорало: "не те аргументы!!1"
Mike_Went
мне нравится луа, но там проблема как в питоне: можно отдать не то не туда и всё свалится, когда в нормальном языке такое даже не запустится
Snusmumriken
мне нравится луа, но там проблема как в питоне: можно отдать не то не туда и всё свалится, когда в нормальном языке такое даже не запустится
Это проблема абсолютно любой динамики, всё надо проверять, не отдавать лишнего и т.д. Динамические языки требуют самодисциплины.
Snusmumriken
local function ctype(v, t) assert(type(v) == t) end function foo(bar, n, somevar) ctype(bar, "table") ctype(n, "number") ... end
Александр
да, было бы чудесно
Ну можно врапать функции или через debug.getinfo извлекать аргументы. А их уже можно проверять. То есть чуть подколхозить придётся, но если это сильно бустанёт стабильность решения - чего бы нет
Mike_Went
local function ctype(v, t) assert(type(v) == t) end function foo(bar, n, somevar) ctype(bar, "table") ctype(n, "number") ... end
ну это же хтонические костылепеды. в каждой функции проверять? вручную вот так вот?
Snusmumriken
Да :)
Mike_Went
отвратительно.
Snusmumriken
Или использовать более подходящий для задачи язык.
Mike_Went
Или использовать более подходящий для задачи язык.
я пишу веб-морду для сервиса и более удобного фреймворка чем lapis + nginx не нашёл
Mike_Went
в ruby синтаксический сахар превратился в глюкозного монстра и норовит сожрать всё вокруг, превратившись в чёрную дыру.
Mike_Went
python медленный и слишком магический.
Mike_Went
ну и на чём ещё писать-то.
Snusmumriken
В moonscript (который тянется ляписом) помнится была какая-то типизация, надо чекнуть.
Mike_Went
moonscript это попытка превратить lua в ruby, я его не использую по той же причине
Leon174
Все эти обсуждения и нытье (в первую очередь мое) хороши, только ничего делаться не будет, Иерусалимски со своей лыжни не сойдет. Луа язык для встройки и всё тут. Лопайте, что дают. Ну или юзайте костыли, типа Teal.
Snusmumriken
ну и на чём ещё писать-то.
Разумеется на жаве, жава — лучший копроративный язык ))
Mike_Went
:)
R
Роберту старенький и заслуженный, ему уже не надо. Сами сделаем.
Snusmumriken
Ну как сказать. Меня луа всё ещё люто бешено радует практически всеми проявлениями. Да, тут можно отстрелить ногу и надо думать что делаешь, но и мы не в белой комнате обитой войлоком для душевнобольных.
Snusmumriken
Просто когда привыкаешь и в целом, повышаешь собственное качество — начинаешь писать МАКСИМАЛЬНО ТУПО И ПРОСТО, чтобы самому не путаться и не ошибаться, оставляя всякие типовые и прочие проверки для пользовательского взаимодействия, чтобы юзер (или ты сам через пару месяцев) не дай бог не ушибся при дёрганьи вывешенных наружу функций. Там проверок обычно не так много, можно уж расщедриться на ctype(foo, "number").
Leon174
луа — язык. "для" тут на усмотрение использующего
Да, просто я от имени Иерусалимски вдруг заговорил. Видел бы он Луа в другой ипостаси, так может хотя бы менеджер пакетов сделал. Но явно не видит Луа как general-purpose language.
Aydar
а чем подход Teal для Lua хуже подхода TypeScript для JS? Почему костыль то?
typescript выглядит как костыль (самим подходом - прилепить статическую типизацию там где ее не было изначально), хотя работает может и хорошо...
Leon174
а чем подход Teal для Lua хуже подхода TypeScript для JS? Почему костыль то?
Не хуже, такой же. Что он дает по сути? Check? А после генерации привет, забудь, что там у тебя было. Был бы у них свой рантайм, дело другое. Тот же TS явно заслуживает свой рантайм. А с генерацией... Что там у тебя было? Tuple? Неа, Object.
Leon174
https://github.com/edubart/nelua-lang как вариант
Ну это же не замена луям. Это аналог Cython-а.
🐅🤦‍♂️
а чем подход Teal для Lua хуже подхода TypeScript для JS? Почему костыль то?
В Teal пока достаточно дырявый компилятор который иногда падает. Так-же дальнейшее изменение дизайна языка неясно. Не хватает чего-то вроде наследования записей. Но писать приятно) Также есть возможность сделать нормальное контекстно-зависимое авдополнение используя информацию предоставленную tl, которое на динамически типизируемых языках обычно никуда не годное.
Aydar
Ну это же не замена луям. Это аналог Cython-а.
То есть основная проблема в том что не jit? По мне так AOT это наоборот огромный плюс, главное чтобы компилялось быстро
Leon174
То есть основная проблема в том что не jit? По мне так AOT это наоборот огромный плюс, главное чтобы компилялось быстро
Да не, без претензий. Cython компилируемый, со статикой, с типа питоновским синтаксисом, одна из попыток как-то ускорить обожравшегося питона. Nelua тоже самое, только для луа. Тоже компилируемый, тоже со статической типизацией и окололуевым синтаксисом (не совсем, много своего, и нумерация с нуля, хотя local, блин, остался). Но это не замена луа, это довесок. Довесок интересный, но так-то ffi все равно на чем ты там библиотеку написал. C, Nim, вариантов тьма, уже готовых и проверенных. Снус вон на D пишет. Причины для использования именно nelua нужно еще поискать. Но он интересный. Вот Titan с Ravi как бы замена lua, со статикой, но сколько проектов на них переползет, если есть годами проверенный luajit? Titan вообще неясно, то засох, то вроде откоматозился. Ravi перепробовал кучу бэкендов, остановился на одном экспериментальном. Такие себе замены.
Aydar
Да не, без претензий. Cython компилируемый, со статикой, с типа питоновским синтаксисом, одна из попыток как-то ускорить обожравшегося питона. Nelua тоже самое, только для луа. Тоже компилируемый, тоже со статической типизацией и окололуевым синтаксисом (не совсем, много своего, и нумерация с нуля, хотя local, блин, остался). Но это не замена луа, это довесок. Довесок интересный, но так-то ffi все равно на чем ты там библиотеку написал. C, Nim, вариантов тьма, уже готовых и проверенных. Снус вон на D пишет. Причины для использования именно nelua нужно еще поискать. Но он интересный. Вот Titan с Ravi как бы замена lua, со статикой, но сколько проектов на них переползет, если есть годами проверенный luajit? Titan вообще неясно, то засох, то вроде откоматозился. Ravi перепробовал кучу бэкендов, остановился на одном экспериментальном. Такие себе замены.
Ну так смысл не в том чтобы ждать пока другие проекты на что-то переползут же, надо самостоятельно писать/двигать/пиарить одновременно
Leon174
Ну так смысл не в том чтобы ждать пока другие проекты на что-то переползут же, надо самостоятельно писать/двигать/пиарить одновременно
Но там нет колдуна Майка (или как его/их там на самом деле зовут). Мы сразу же в проигрышной позиции.
Timur
да и не доказано еще, что Майк реально существует ;)
Leon174
Так и я про то же. Skynet? Это бы очень многое объяснило.
Snusmumriken
Ну до сих пор он вёл себя довольно однообразно и истерично, выглядит непризнанным гением.
R
Товарищи, меня тут сосватали в крупную контору. Собирают команду, работа преимущественно с Lua/LuaJIT. Не игры, всё по-взрослому. Есть желающие поучаствовать?
R
Телеком.
Wsevolod
Что за стек?
Alexander
Телеком.
Что за контора?