fgntfg
Спасибо
Snusmumriken
Ну знаешь, это такой простой велосипед, который можно написать за пятнадцать секунд, что я и сделал : )
fgntfg
Согласен.
fgntfg
Я вот думаю, нет ли более изящного метода.
Snusmumriken
Подозреваю, что самый изящный метод - переопределить __newindex, чтобы он просто не заносил дубликаты, но для этого требуется лишняя внешняя табличка, наполненная ссылками (может сидеть в замыкании самого __newindex и нигде не светиться).
fgntfg
Да. Пожалуй так. И смотреть indexOf
Snusmumriken
Ну смотри: function createTableWithoutDoubles() -- чтобы не было утечек памяти из-за этой таблички local temp = setmetatable({}, {__mode = 'kv'}) local function __newindex(self, key, value) if not temp[value] then rawset(self, key, value) temp[value] = true end end return setmetatable({}, {__newindex = __newindex}) end a = {} b = {} tbl = createTableWithoutDoubles() tbl.yo = a -- всё ок tbl.foo = b -- и снова всё ок tbl.bar = b -- не прокнет, ибо табличка 'b' уже тут присутствует, под ключом foo
Snusmumriken
Нормуль?
fgntfg
Ага. А зачем в явном виде указывать тип для таблицы? Key-value это же default не?
Snusmumriken
Ты про __mode? По дефолту, там пусто, а 'kv' указывает, что если на объект осталась ссылка только в ключе или только в значении этой таблицы (и других, с аналогичным режимом) - то их можно удалять и из этой таблицы, и из глобального пространства. Хотя мб туда актуальнее пихнуть 'k'. Почитай про это
Snusmumriken
https://habrahabr.ru/post/163679/
Snusmumriken
нн?
Alexey
https://www.youtube.com/watch?v=fUP6ZpVGJOo&app=desktop
Alexey
Возможно, кому-то интересно.
Tverd
Интересно, спасибо
Alexey
правда чую, там можно мозг вывихнуть, пытаясь понять контекст)
Alexander
таких докладов несколько
Alexander
посмотрите в том же треке доклад Игоря Эрлиха
Tverd
Посмотрим, если найду
Snusmumriken
По поводу производительности, я уже писал, правда, в другой чатик: "> даже если luajit не хитрит и не превращает этот цикл во что-то более простое, не факт что на более сложном коде он будет всё так же быстр Он и будет медленнее. Быстрее всего он выполняет то что трассируется и прогревается. Фактически, собирая из наиболее часто выполняющихся команд (буквально, куски функций, которые вызывают друг друга в определённом порядке). То есть, если у тебя в цикле есть много условий, то если регулярно выполняется один набор условий - из него составляется скомпилированная трасса, которая будет жутко быстрой. А прогрев - это просто количество выполнений трассы. Карочи, допустим, у нас есть такой код: function foo(x) if x > 0 then return x else return -x + 1 end end function bar(value) if type(value) == 'table' then for i = 1, #value do value[i] = foo(value[i]) end return value elseif type(value) == 'number' then return foo(value) end end То при вызове, допустим, bar(10) у нас образуется примерно такая трасса: if type(value) == 'number' then return value end А при bar({-10, 20, -30}) - сразу две трассы, вот такие: if type(value) == 'table' then for i = 1, #value do value[i] = -value[i] + 1 end return value end и if type(value) == 'table' then for i = 1, #value do value[i] = value[i] end return value end И при каждом вызове одной и той же трассы, у неё повышается приоритет, по достижении некоторого значения в котором, она таки компилируется в машинный код, но со временем приоритет падает, чтобы не скомпилить вообще все трассы, ибо количество допустимых трасс, в мало-мальски крупном приложении, может превышать количество атомов во вселенной (можно примерно вычислить, как факториал от встречания if + else в коде). Поэтому даже одно условие в цикле, при распределении вариантов как 50/50, сразу увеличивает количество вызовов для компиляцией вдвое. Очень сложные условия, с равномерным распределением вызовов трасс, могут не скомпилироваться даже с охренительно огромным количеством вызовов: просто не хватит времени на разогрев. Основная задача - быть проще, но приложения в бесконечных. JS-движок v8 делает примерно то же самое, только там поменьше оптимизаций и похуже баланс компиляции при энном количестве вызовов. А ещё оверхед на всю js-херомундию, ибо изначально спроектировано не очень хорошо." Если в двух словах: "Больше простых циклов с минимумом дополнительных условий - и всё будет чики-пуки".
Snusmumriken
Да, luajit автоматически кеширует функции, поэтому можно не кешировать. Хотя если либа может использоваться и там и там - всё таки стоит. function foo() local t = {} -- кеш функций помогает в ванильной луа -- но в jit на это пофигу local sin = math.sin for i = 1, 100000 do t[i] = sin(i) end return t end
🦥Alex Fails
Хм. Меня тут попросили упомянуть про канал, прсвященный сталкеру. Видимо, слишком буквально восприняли правила в пине. Ну а т.к. сталккр я люблю, то почему бы и нет. Присоединяйтесь, если хотите: @stalkerwelle
Alxius
Хм. Меня тут попросили упомянуть про канал, прсвященный сталкеру. Видимо, слишком буквально восприняли правила в пине. Ну а т.к. сталккр я люблю, то почему бы и нет. Присоединяйтесь, если хотите: @stalkerwelle
Бестолковый канал, нельзя оставить пост с вопросом как Survarium наконец запустить на линукс так чтобы он прошёл дальше лаунчера и античита. ато надоело что будучи на линукс считаешься за читера по умолчанию. (типа с эмулятора сидишь)
Alxius
Ведьмак 3 блин уже идёт , а Сурвариум нет. видимо он круче ВЕдьмака 3 по всем параметрам. Игра тысячелетия не меньше. Даже комп после апгрейда и то не тянет. От её крутизны можно вообще офигеть. Извините за оффтоп.
Alxius
Вообще могу что нибудь связанное с линукс или полезное для отрекламировать в своей группе на 1750 чел в ВК.
Alxius
я новенький я не отличаю каналы от чатов.
Alxius
для меня если нельзя постить - значит плохой канал
Alxius
я сразу обычно отписываюсь
Alxius
это также легко как с программами на ПК - если не идёт на линукс - значит некачественная программа, авторы не осилили нажать кнопочку портировать.
Alxius
а если есть канал без чата то обязательно есть ему парный канал для чата или нет?
🦥Alex Fails
Вот у моего канала чата нет, кроме флудильни😂
🦥Alex Fails
🦥Alex Fails
А вообще, портирование софта – не очень простая задача. И не сложная, если софт писался с уделом на портируемость. Мне для портирования бота с линя на винду потребовалосьтпоправить три строчки, где вижал студия была более беспощадна к стандарту, чем шланг
mva
кстати, для этого, в своё время, был придуман SDL :)
Alxius
Alxius
Подскажите кто нибудь чего они хотят. уже 3 часа и так и так пост кручу разместить не могу текст и код уже похудели на 70% 4 строки всего блин осталось а им все чёто не так.
Отступы на нулевом уровне вложенности точно нужны внутри <code></code>?
Alxius
офигеть принялось я уже и скобки у тегов разные менял.
Alxius
спасио
mva
https://www.lua.org/about.html#name
Alxius
и цо ? ну Lua называется Lua и цо ?
Alxius
я уже видел эту ссылку
mva
> Please do not write it as "LUA", which is both ugly and confusing, because then it becomes an acronym with [different meanings](http://acronyms.thefreedictionary.com/lua) for different people. So, please, write "Lua" right!
mva
вот что
Alxius
я пишу так как шифт нажмётся
mva
а должен писать так, чтобы другим было удобно и приятно тебя читать
Фྀлууудᮢ!
😂😂😂
Alxius
у меня толерантность к размеру букв. мне до лампочки каких оно размеров
Просто педанты, лишь бы подрюкать
Никакого продакшена
།པའ - пусть будет так
Anonymous
где-нибудь продают ноутбуки с процессором 7-10 мегагерц, dos и большой батарейкой?
Anonymous
Можно сделать такой из de2-115
Anonymous
да когда-то ж производили, причем неслабыми тиражами. Самому денег не хватит ни на обучение паянию и собиранию, ни на получение итогового результата =)
Anonymous
Дык такие ноуты, наверное, это раритет и стоят соответственно, особенно, если они рабочие.
mva
у меня есть вопрос
Anonymous
беда =( Такой бы работал от батарейки месяц. А дешевый виндопланшет держится полчаса
mva
зачем он такой может быть нужен в 21 веке
Anonymous
Не работал бы.
mva
беда =( Такой бы работал от батарейки месяц. А дешевый виндопланшет держится полчаса
если дело только в работе от батарейки, то достаточно ARM M4
mva
хотя можно и из A'шек найти что-нибудь маложрущее
Anonymous
зачем он такой может быть нужен в 21 веке
писать текст, таблицы, играть в игры, делать игры. Хранить и обрабатывать информацию, для чего впринципе все компьютеры делались
mva
впрочем, можно и MIPS взять какой-нибудь, среди них тоже есть маложрущие
mva
правда?
mva
в змейку?
Anonymous
Там наверное и оперативки аж целый мегабайт.
mva
не, на LÖVE, конечно, можно, наверное пучок игорей под такие ресурсы наделать
Anonymous
а почему бы и нет. simcity2000 хватает 7мгц
mva
но это ж ещё надо наделать :)
Anonymous
Ага, главное, чтобы все действия в игре происходили только от ввода пользователя.
Anonymous
впрочем, можно и MIPS взять какой-нибудь, среди них тоже есть маложрущие
Здесь есть один неприятный момент. Если собирать самому - мне надо будет 5к долларов на эксперименты и самообучение со взрывами и порчей микросхем. Если покупать готовое - на нем будет стоять винда или андроид, без возможности поставить dos без потерь в драйверах. Относительно linux то же самое, в бюджетном оборудовании очень странные схемы (дешевый виндопланшет за 1000 рублей, 32-битный uefi, linux ставился, но звук, сетевуха - всё планшетное и проприетарное, по умолчанию точно не заводится, а дополнительно копаться не стал - последняя рабочая машина в доме как-никак)
Snusmumriken
Авито? Там толкают старые железки.
Snusmumriken
На самом деле, подозреваю что хватит чего-то такого. Тут хоть и, простите, десятая венда, но зато это нормальный ноут. Правда, стоит двадцатку. Батарея - часов на десять, но дос не поставишь.