Русский
Открыть в Telegram
Ppro.lua

pro.lua

@ProLua · группа · Технологии · в индексе с 29.06.2026
555участников
11пишущих за 30 дней
163сообщений за 30 дней
88 511сообщений в индексе
A
Похоже в 5.5 externalstring это прям способ сделать деструктор, что может исполняться при emergency gc, а также после всех userdata при закрытии. Может есть что проще? А то при закрытии можно получиться так, что ссылка есть, а функция __gc уже вызвалась.
Andrey BushevПохоже в 5.5 externalstring это прям способ сделать деструктор, что может исполняться при emergency gc, а также после всех userdata при закрытии. Может есть что проще? А то при закрытии можно получиться так, что ссылка есть, а функция __gc уже вызвалась.
Не понял? Я точно уже не помню, но при закрытии стейта вроде и так просто всё собирается, разве нет? (Ну вроде да правда я не помню уже как там emergency gc со всем этим работает... Вроде бы emergency gc финалайзеры и не вызывает, т.к для этого надо объект "воскресить" и ещё на стеке место на его вызов, а в emergency мы могли войти как раз из-за нехватки стека. Собственно ассерты об этом же и говорят...)
U
Andrey BushevПохоже в 5.5 externalstring это прям способ сделать деструктор, что может исполняться при emergency gc, а также после всех userdata при закрытии. Может есть что проще? А то при закрытии можно получиться так, что ссылка есть, а функция __gc уже вызвалась.
Насколько я смутно помню, externalstring "деструктор" он только для освобождения собственно памяти строки, и со стейтом луашным из него взаимодействовать нельзя. Слегка похоже на то, как в luau финалайзеры юзердаты в целом сделаны, но не суть... По сути это более оптимизированная версия на случай, когда надо внешние ресурсы прибить, без оверхеда. Вроде-бы новый лоадер нативных либ так её использует... Хотя канонично это всё делали для переиспользования памяти константных строк между независимыми стейтами, а не вот это всё... К слову большой вопрос стоило-ли оно того, т.к теперь надо по ещё одному указателю прогуляться, чтобы собственно данные строки получить... но да ладно.
L
Для 3D и Lua (и Python) есть GeeXLab.
S
Возвращаясь к теме глобалок - хотелось сделать нечто вроде: if Lua_version < 5.5 then require 'strict' else load('global none')() x = 10 -- x не запрещена end y = 20 -- а здесь и подавно Всё из-за скоупов. В принципе, это странный дизайн - глобальные переменные должны быть глобальными, в этом их назначение, а то мы фактически получили ещё один вид локалок. И смысл?
Sergey NikonovВозвращаясь к теме глобалок - хотелось сделать нечто вроде: if Lua_version < 5.5 then require 'strict' else load('global none')() x = 10 -- x не запрещена end y = 20 -- а здесь и подавно Всё из-за скоупов. В принципе, это странный дизайн - глобальные переменные должны быть глобальными, в
Опять-таки, это не замена поведения глобалок, это чисто компайл-тайм проверки для сохранения времени и нервов в случае опечаток и прочего) Потому, что в луа, по умолчанию, если переменная не определена как локалка - значит юзаем глобалки. Здесь же, если ты явно прописал какие глобалки ты хочешь чтобы были глобалками и только они - будет ошибка во время загрузки исходника, а не исполнения.
U
Это понятно, но ещё раз - механизм работает только в пределах скоупа, в том числе не распространяется на загруженное load/require.
U
Sergey NikonovЭто понятно, но ещё раз - механизм работает только в пределах скоупа, в том числе не распространяется на загруженное load/require.
В пределах цельного куска кода так сказать, да. По очевидным причинам. global ключевое слово просто стоит больше интерпретировать как "allow_only_theese_globals_here", тогда всё становится проще к пониманию) Ну и в разных файлах, само собой, может захотеться естественным образом навесить свои уникальные ограничения... Так что...
S
U
Sergey NikonovВозвращаясь к теме глобалок - хотелось сделать нечто вроде: if Lua_version < 5.5 then require 'strict' else load('global none')() x = 10 -- x не запрещена end y = 20 -- а здесь и подавно Всё из-за скоупов. В принципе, это странный дизайн - глобальные переменные должны быть глобальными, в
Такое можно сделать маленьким костыликом, написав условный if Lua_version >= 5.5 then function my_load(str) return load("global print, assert, table, string, etc; " ... str) end else my_load = load end :) и повторить на все функции загрузки кода подобное... Можно ещё <const> вдобавок навесить вроде)
Тогда уж нужно просто переопределить load/require в корневом скрипте. Почему-то эта мысль мне в голову не пришла)
S
Можно даже вынести определения в отдельный модуль.
С
Такой способ только не ловит _G[...] лукапы.
U
СавваОстаётся _ENV :-)
Ну тут да... Но на прямое чтение/запись из/в ENV в целом должны быть веские основания, обычно это крайне специфичный и изолированный код... Так что...
S
_ENV тоже можно перехватывать, но это уже будет рантайм.
S
А давайте просто сделаем компилятор луашки с оптимизатором. Он всё тут заинлайнит, везде просунет прямые ссылки вместо лукапов и наругается на неправильно использованные strict const volatile и всякое такое.
S
(5 + 7) Нинель Miller, пожалуйста, отправьте решение указанной арифметической задачи в этот чат в течение указанного времени, иначе вы будете кикнуты. Спасибо! (60 сек) При поддержке 1inch
Архив по месяцам
ноябрь 2026октябрь 2026сентябрь 2026август 2026июль 2026июнь 2026май 2026апрель 2026март 2026февраль 2026январь 2026декабрь 2025ноябрь 2025октябрь 2025сентябрь 2025август 2025июль 2025июнь 2025май 2025апрель 2025март 2025февраль 2025январь 2025декабрь 2024ноябрь 2024октябрь 2024сентябрь 2024август 2024июль 2024июнь 2024май 2024апрель 2024март 2024февраль 2024январь 2024декабрь 2023ноябрь 2023октябрь 2023сентябрь 2023август 2023июль 2023июнь 2023май 2023апрель 2023март 2023февраль 2023январь 2023декабрь 2022ноябрь 2022октябрь 2022сентябрь 2022август 2022июль 2022июнь 2022май 2022апрель 2022март 2022февраль 2022январь 2022декабрь 2021ноябрь 2021октябрь 2021сентябрь 2021август 2021июль 2021июнь 2021май 2021апрель 2021март 2021февраль 2021январь 2021декабрь 2020ноябрь 2020октябрь 2020сентябрь 2020август 2020июль 2020июнь 2020май 2020апрель 2020март 2020февраль 2020январь 2020декабрь 2019ноябрь 2019октябрь 2019сентябрь 2019август 2019июль 2019июнь 2019май 2019апрель 2019март 2019февраль 2019январь 2019декабрь 2018ноябрь 2018октябрь 2018сентябрь 2018август 2018июль 2018июнь 2018май 2018апрель 2018март 2018февраль 2018январь 2018декабрь 2017ноябрь 2017октябрь 2017сентябрь 2017август 2017июль 2017июнь 2017май 2017апрель 2017март 2017февраль 2017январь 2017декабрь 2016ноябрь 2016октябрь 2016сентябрь 2016август 2016июль 2016июнь 2016май 2016апрель 2016

Открытая публичная лента из поискового индекса ChatCrawler — «Google по публичному Telegram»; обновляется по мере обхода площадки. Время — UTC.

Только публичный контент, официальный API Telegram. О проекте · Вопросы · Границы индекса · Убрать страницу из выдачи · Каталог · Поиск · Как мы считаем