
Group Butler [beta]
21.06.2017
17:12:57
Добро пожаловать в чат pro.lua, Roman! Ознакомься с правилами чата (в описании и прикрепленном сообщении), и присоединяйся к обсуждению.

MrSmeet
21.06.2017
18:00:02
Вот я сейчас серьезно, есть любители доты?
Гуйз хочет кто мод пописать?

Snusmumriken
21.06.2017
18:17:32
Слишком сложно ))
Ты про первую? А то с меня начальство хочет побольше карт на третий варик, чтобы прям интересно было.

Google

Group Butler [beta]
21.06.2017
19:06:12
Добро пожаловать в чат pro.lua, Azoyan! Ознакомься с правилами чата (в описании и прикрепленном сообщении), и присоединяйся к обсуждению.

MrSmeet
21.06.2017
19:31:57

Tverd
22.06.2017
14:11:18
Нужен аналог питонячего OrderedDict?
на тесты?

Snusmumriken
22.06.2017
14:25:41
Его можно написать.
Но фигня в том, что его нельзя создавать вот так:
v = orderedDict{{a = 10}, {a = 20}, {a = 30}}, то есть, необходимо его сначала создать, а потом заполнять.
__newindex срабатывает на момент добавления нового поля, при инициализации он всегда будет пуст.
И да, тут есть косяки в плане удаления значений из такого словаря.
Когда мы пишем: dict.key = nil - newindex тоже не срабатывает. Разве что держать пустую прокси-табличку, в __index которой - словарь (и доступ по числовым ключам), а в __newindex - заведение нового значения или удаление из таблички.
В общем, довольно много мусора на один упорядоченный словарь.
Если заполнять огромным количеством ключей - получится довольно жопно (три-четыре таблички на одну фигню).
Хотя набросать рабочий могу )))

Tverd
22.06.2017
14:32:20
он уже написан
https://pastebin.com/bAWpi0n1

Snusmumriken
22.06.2017
14:33:26
Тут есть лишние ключи в объекте: _keys и _vals. Можно без этого, через прокси.

Tverd
22.06.2017
14:34:07
тогда надо прокси сохранять в объекте

Snusmumriken
22.06.2017
14:34:27
Не а, надо таблицу сохранять в замыкании, а прокси вывешивать наружу ))
Теперь надо придумать как по этому итерировать через pairs/ipairs.

Philipp
22.06.2017
14:35:56
Написать свой итератор))

Snusmumriken
22.06.2017
14:36:26
Вот вообще не вижу никаких проблем ))
Итератор по хеш-стороне и по числовой. Хм.

Tverd
22.06.2017
14:39:30
окай, подумаю как через прокси сделать

Google

Tverd
22.06.2017
14:49:20
Снус, а где пример чего-нить такого? а то не совсем понятно - сохранять в замыкании? там несколько таблиц
что-то типа этого?
local function createHashtable() -- конструктор хэштаблицы
local self = {
_keys = {}, -- список ключей
_vals = {}, -- список значений
_keyvals = {}, -- таблица ключ-значение
}
local proxy = newproxy(true)
local mt = getmetatable(proxy)
mt.__index = function( _, k )
end
mt.__newindex = function( _, k, v )
end
return proxy
end
return createHashtable

Snusmumriken
22.06.2017
15:07:27
А я-то хотел сахарно ))
Плюс метаметоды pairs/dict нормально работают толко в lua5.2 и выше.

Tverd
22.06.2017
15:09:42
у меня не сработало setmetatable на прокси, може ошибся где

Snusmumriken
22.06.2017
15:10:37
Ох, ты в качестве прокси дёргаешь newproxy? Эта функция возвращает абстрактный указатель. Проще возвращать пустую табличку. Тут - прокси-таблица а не указатель, в общем.

Tverd
22.06.2017
15:11:45
а, ну тогда проще... для меня прокся - это через newproxy )))

Snusmumriken
22.06.2017
15:12:21
В принципе, с newproxy тоже должно проканать. Это же чисто перенаправлятор.

Tverd
22.06.2017
15:13:08
ну да, а сильно медленнее такой создание таблиц, нежели обычным способом? я так понимаю постоянная компиляция при new? не так выразился, интерпретатор проходит же по заново создаваемым функциям?

Snusmumriken
22.06.2017
15:14:29
Медленно, да. Ещё как. Ну, в сравнении с нативными фичами.
Ну, тогда в функциях index/newindex будут использоваться не таблицы числовых/реальный словарь, а непойми что. Тут нужны замыкания, для "скрытости" реального положения дел, чтобы нельзя было ничего случайно сломать.

Tverd
22.06.2017
15:15:31
ну или проксей тогда скрывать, без замыканий...

Snusmumriken
22.06.2017
15:16:30
Ой, боюсь что не покатит ((
Карочи, надо подумать. Вариант объекта с методами add/get/pairs/ipairs - оказывается самым надёжным и быстрым, хоть и не таким сахарным.

Tverd
22.06.2017
15:17:48
опять же pairs/ipairs у меня не покатит, только свой итератор

Snusmumriken
22.06.2017
15:42:32
Мороки реально ещё больше. Тут удаление через set(number_key, nil) корректно работает только если значение - таблица или функция (ссылки с уникальными id), или наш словарь заполнен сплошь уникальными значениями.
Это можно исправить если хранить ещё одну таблицу numberToKey, но с ней тоже морока.

Dmitry
22.06.2017
15:49:36
ребя а почему луа стабильней питона? ))

Snusmumriken
22.06.2017
15:49:53
Потому что проще.
Чем сложнее инструмент, тем больше в нём косяков.
А почему вы спрашиваете? ))

Dmitry
22.06.2017
15:51:18
выбрали типо стабильный

Snusmumriken
22.06.2017
15:52:26
Ну и правильно. Проблема в чём? ))
Питон - с бохатой библиотекой, но большим количеством неочевидностей.
Луа - с бедной библиотекой, но с мелким количеством неочевидностей (по пальцам пересчитать), плюс luajit как магии кусок. Да и народ учить проще.

Google

Dmitry
22.06.2017
15:54:06
ну вот учить буду ) даже не знал о таком языке. стабильность только не понятно чем меряется, оно же все динамически типизированное.. ну в питоне плюшки - слайсы, как бы админы одобряют вроде

Snusmumriken
22.06.2017
15:55:23
Подозреваю что под "стабильностью" они имели ввиду скорость исполнения и отсутствие жутких внешних тормозов при обработке большого количества данных разом (из-за сборки мусора и не шибко оптимальной работе со структурами данных).
У меня на работе весь бекенд на луа, и всё ок, а там распределённые вычисления на куче серверов с map-reduce и прочим ))

Dmitry
22.06.2017
15:56:34
ну да, про скорость говорили, плюсы и луа. у них все скоростное должно быть, свои протоколы.. крутые ребята ))

Vadim
22.06.2017
15:58:15
но отвечая на то, что ты на самом деле имел в виду, хочется привести цитату одного именитого разработчика:

Snusmumriken
22.06.2017
15:59:11
Цитата: "А я - томат!" - и это сказал я!

Vadim
22.06.2017
15:59:18
Python tries to give you as much as possible, while Lua tries to give you as **less** as possible
То бишь: питон — комбаен, который в любой момент может отстрелить тебе ногу потому что ты его не знаешь

Snusmumriken
22.06.2017
16:00:30
И никогда не узнаешь, потому что он не поместится у тебя в голове.

Vadim
22.06.2017
16:00:33
а Lua — набор "сделай сам" из которого ты можешь сделать ровно то, что тебе нужно

Snusmumriken
22.06.2017
16:02:12

Tverd
22.06.2017
16:52:47
Есть еще вариант - завести в модуле локальную таблицу для всех экземпляров и повесить __mode = "v". Я про dict питонячий

Snusmumriken
22.06.2017
17:21:06
Сдвиги ключей. Они нужны.

Admin
ERROR: S client not available

The Dude
22.06.2017
17:23:06
Я думал ты луа в качестве хобби изучаешь.
А ты, оказывается, на ней бабочки зарабатываешь.

Philipp
22.06.2017
17:37:29
Лол. Внезапное открытие для Чувака :D

Dika
22.06.2017
17:41:34

Google

Dika
22.06.2017
17:41:49
можно поподробнее про бэкэнд?

Snusmumriken
22.06.2017
17:42:23

Azoyan
22.06.2017
17:46:34
На Яндексе ни одной вакансии по луа

Snusmumriken
22.06.2017
17:48:29
Я на hh искал ))
И да, это Москва. Не знаю как обстоят дела где-то ещё.

The Dude
22.06.2017
17:51:39

Snusmumriken
22.06.2017
17:52:32
Ну, месяцев семь-восемь как.

fgntfg
22.06.2017
20:35:09
А вот и письмо о бесплатности короны прилетело
С чем вас и поздравляю

The Dude
22.06.2017
20:35:56

fgntfg
22.06.2017
20:36:18
Полностью
Корона тырпрайз ой всё

Tverd
22.06.2017
21:09:29
опа! ынтерпрайз???
Поздравляю коллег!
Вот теперь другой вариант
https://pastebin.com/wBUgWGLc

Mons
23.06.2017
09:28:09
эээ, а зачем писать хэш-таблицу на хэш-таблицах?

Tverd
23.06.2017
09:29:42
там возможно получение списка ключей, списка значений и все в порядке добавления

Snusmumriken
23.06.2017
09:39:53
Удаление по хешу/номеру работает?

Mons
23.06.2017
09:41:02
pairs от таблицы может вернуть и ключи и значения
а здесь оверхед по памяти x2 минимум

Google

Tverd
23.06.2017
10:50:43
да, удаления работают... оверхед по любому есть
вместо pairs - hash:iter()