Snusmumriken
http://luajit.org/ext_ffi_api.html
ffi.metatype(ct, metatable)
Выставляешь метатаблицу с функцией на __gc, очищающей данную сишную структуру. Всё очень просто.
Snusmumriken
Snusmumriken
В общем, если ты всё таки каким-то расчудесным чудом умудрился потечь памятью в луях — сишка тебя уже не спасёт, мда. Но во всех остальных случаях, тебе не даёт течь сборка мусора обыкновенная.
Super
спасиб, буду использовать
vvzvlad
Snusmumriken
vvzvlad
ху из додикство?
Snusmumriken
Технически, память "течёт", но мы можем тупо проверить все глобальные таблички (или просто прошариться по всем спискам, найти те где много элементов и отследить трейсбек на __newindex).
Snusmumriken
В моём понимании, тру-текущая память — это, например, зацикленные острова, которые можно получить, используя сборщик мусора на ссылках, или там — разметка больше памяти чем нужно и неполная очистка, так что остаются занимаемые кусочки. В общем, всё что потенциально проблематично отследить, и что может "реально" надавать по шарам. А "бесконечно заполняющиеся динамические структуры" — это фигня на постном масле : )
Правда, эта фигня может быть сныкана в каком-нибудь замыкании, но тем не менее, это уже точно проблемы писателя: в нормальных условиях такого не происходит, за этим, в 95% случаев, не нужно "особо следить" и т.п.
Слава
Похоже на спам-бота
ㅤ
Это выглядит как утка, но как оно крякает — пока неизвестно.
Слава
Программисты - поразительные люди
Слава
Они всегда выдают необычные афоризмы, они всегда многогранны
ㅤ
Шо?
Dima
Dima
Слава
+
Dima
я набегами в Lua между , скажите что означает : в синтаксисе.
Dima
Dima
разберался с статьей. И зашел код оценить.
Dima
вообще в этом коде #nStr дает для синтаксиса много вопросов : и # что это?
mva
Dima
так с : раобрались
Dima
mva
т.е. обычно используется для ООП
Dima
mva
т.е. можно вызывать string.method(string_vairable,args), a можно string_variable:method(args)
mva
а #foo == len(foo)
mva
применимо только к таблицам и строкам, правда
Dima
спасибо за помощью
Dima
mva
следующий коммент улыбает
mva
автор НИАСИЛИЛ естественную нотацию и то, что в луа таблицы - не совсем таблицы :)
Dima
да вот вот эта вот local sum, nStru, digin =0, tostring(n) не понятно до конца как работает, тут равено идет множественное присванивание
mva
Dima
я не понимаю этот код
Dima
что там заполняет nStr
Dima
Dima
а что делает nStr чем оно заполняется?
Dima
ясно спасибо
Dima
a,b,c=1,2
a = 1
b = 2
c = nil
@CyberSpirit @mva_name благодарю за помощь.
Dadaskis
Это точно будет Lua?
Dadaskis
Просто вроде с теми средствами которые предоставлены в Lua сделать это низя, т.е надо будет биндинг делать, хотя...
Dadaskis
Поеял принял
Lucky
Тащемто должно выдирать из строки символ и делать из него цифру
Lucky
Ну, может в контексте программы так было удобнее
Lucky
Ага
Lucky
Однообразно безобразно
Lucky
Эх, опять навертел кода, который работает, но х.з. как.
Snusmumriken
Natalie
привет, народ. Подскажите, как луа относится ко всяким "+="?
Даниил
Плохо
Natalie
Плохо
т.е. писать вручную: а= а+1?
или у него есть какой-то аналог?
Snusmumriken
Да, писать a = a + 1, к сожалению или к счастью (минус всякие i++ + ++i).
Natalie
Snusmumriken
Но в целом, на луях не так много всякой арифметики, а те места, где активно используется i++ в сишке (циклы) — в луях указываются только с шагом цикла.
Ну, то есть
for (int i = 1; i < 11; i++) {...}
for i = 1, 10 do ... end
for i = 10, 1, -1 do ... end -- другой шаг
Natalie
Но в целом, на луях не так много всякой арифметики, а те места, где активно используется i++ в сишке (циклы) — в луях указываются только с шагом цикла.
Ну, то есть
for (int i = 1; i < 11; i++) {...}
for i = 1, 10 do ... end
for i = 10, 1, -1 do ... end -- другой шаг
Спасибо за наглядный пример. Сохраню. Уже знаю, когда пригодится)
Просто мне нужно посреди цикла менять одну переменную, допустим, сумму
Удобным казалось сум+=а[I]
Snusmumriken
А, ну summ = summ + a[i]
Natalie
Natalie
сенкс)
Natalie
а сравнения <= и тд? Видела, что в метатаблицах вроде бы только меньше_равно можно "перегружать"
Но сами по себе сравнения ж разные есть?
Natalie
ой и вот еще - стринг в луях вкурсе, как плюсовать к себе новые стринги?)
или его надо учить?
или это мне в гугл и не доставать?)
Yuriy
Natalie
Snusmumriken
а сравнения <= и тд? Видела, что в метатаблицах вроде бы только меньше_равно можно "перегружать"
Но сами по себе сравнения ж разные есть?
Да, ==, >, <, <=, >=.
В метатаблицах только __eq, __lt, __le, обратные сравнения вызывают тот же метаметод, но с другим порядком элементов.
Snusmumriken
https://habr.com/ru/post/346892/
Natalie
Snusmumriken
str = 'qwerty'
print(str .. '12345') --> qwerty12345
В метатаблице — __concat
Natalie
Snusmumriken
Ага, просто .. вместо +, как в "обычных языках".
Natalie
ааагггаа. Думала, это чисто визуальная фишка для printa, а в остальных случаях все равно плюс липила.
Все переделывать...
спасибо снова)
Snusmumriken
Плюс — всегда пытается преобразовать аргументы в числа (или вызвать метатаблицу), то есть:
print(10 + '20') --> 30. Отделено от конкатенации для того чтобы мы точно понимали что делаем. Чтобы не было как в javascript : )
Natalie
Snusmumriken
Прочитай lua in 15 minutes, а потом статейку по метатаблицам, она клёвая (я писал).
Snusmumriken
А так — ты же пишешь на новом для себя языке. Написала функцию — тут же запустила, проверяешь как работает, пофиксила ошибки, поняла что где не так и т.п.
Или написала короткий вариант функции, где проверяется только то что тебе непонятно в данный момент, запустила, проверяешь. Основы!
Lucky
через неделю забыл, что и как зачем