Size: a a a

2020 February 07

DF

Dollar Føølish in pro.lua
А кому нибудь в истории человечества удалось разобраться в коде луаджита?
источник

S

Snusmumriken in pro.lua
Нет : )
источник

DF

Dollar Føølish in pro.lua
Кек
источник

I

Igor725 in pro.lua
Dollar Føølish
А кому нибудь в истории человечества удалось разобраться в коде луаджита?
Только если самому Майку
источник

I

Igor725 in pro.lua
Но тот где-то в других проектах утонул
источник

S

Snusmumriken in pro.lua
Ну, по частям разве что. Всё таки очень много специфичных асмов. Там весь прекол в том, что здоровенная кодобаза под кучу разных платформ, если что-то править — придётся искать и фиксить сразу везде, иначе кроссплатформа улетит в тартарары.
источник

I

Igor725 in pro.lua
Именно поэтому туда и никто не суётся, а если и суются, то форкают и поддерживают только какую-нибудь одну платформу
источник

AZ

Aydar Zarifullin in pro.lua
Snusmumriken
Если третий вариант — то в целом возможно. Но есть несколько неприятных штук:
1. Придётся делать схему работы массива с дырками, в противном случае будет непонятен порядок вызовов (хеш не имеет порядка), или айди будет меняться, и пользователь не сможет удалить конкретный колбек. А с сишной стороны это делать неприятно;
2. Получится почти то же что есть, но только со списком, что мог бы сделать сам юзер;
3. Ну типа избыточное нагромождение. Зачем громоздить когда можно не громоздить? Юзеру нужно нагромождение — он себе сделает, функционала достаточно.
Что не так с порядком в первом варианте?

{["onSome"] = {userFunc1, userFunc2}}

Порядок функций будет сохранен.
источник

S

Snusmumriken in pro.lua
Теперь добавь пять функций, а потом удали три из середины, сохранив индексы.
источник

S

Snusmumriken in pro.lua
table.remove — сдвинет все элементы после удаляемого назад, поэтому мы просто делаем tbl["onSome"][2] = nil.
источник

S

Snusmumriken in pro.lua
И итерировать придётся pairs'ом.

А теперь сделай то же самое на сишной стороне : )
источник

AZ

Aydar Zarifullin in pro.lua
Snusmumriken
table.remove — сдвинет все элементы после удаляемого назад, поэтому мы просто делаем tbl["onSome"][2] = nil.
Ну, тем самым table.remove закроет дырки, разве не это нужно?
источник

S

Snusmumriken in pro.lua
Нет. Как у нас работает ЖСовый
let timerId = setTimeout(func|code, [delay], [arg1], [arg2], ...)?
Он возвращает айдишку, индекс этого события.

Если мы закроем дырки просто так — у нас изменятся айдишки. И мы не сможем удалить _конкретный_ колбек.
источник

S

Snusmumriken in pro.lua
Поэтому нам просто необходимы дырки. А при добавлении новых элементов — надо проверять ближайшую дырку и пихать новый колбек в неё. И если на луях это не сложно, то на сишке более стрёмно.
источник

AZ

Aydar Zarifullin in pro.lua
Snusmumriken
Нет. Как у нас работает ЖСовый
let timerId = setTimeout(func|code, [delay], [arg1], [arg2], ...)?
Он возвращает айдишку, индекс этого события.

Если мы закроем дырки просто так — у нас изменятся айдишки. И мы не сможем удалить _конкретный_ колбек.
Сравнил функцию по адресу и все, где траблы?
источник

S

Snusmumriken in pro.lua
Какую функцию с чем?
источник

S

Snusmumriken in pro.lua
Или ты предлагаешь так:
function foo() ... end
setTimeout(foo, 20)
removeTimeout(foo)
?
источник

AZ

Aydar Zarifullin in pro.lua
Snusmumriken
Или ты предлагаешь так:
function foo() ... end
setTimeout(foo, 20)
removeTimeout(foo)
?
Ну да как-то так
источник

S

Snusmumriken in pro.lua
Ты так автоматически запрещаешь использовать одну и ту же функцию несколько раз с разными таймаутами. За этим там и id, чтобы точно идентифицировать, что именно ты удаляешь.
источник

S

Snusmumriken in pro.lua
И оно выглядит вот так:
let id = setTimeout(foo, 20)
removeTimeout(id)

И вот работа с этим идентификатором есть в жаваскрипте, сам проверь.
Плюс ты предлагаешь перебирать список всех таймаутов/колбеков, это O(n).
источник