@ProLua

Страница 103 из 307
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! Ознакомься с правилами чата (в описании и прикрепленном сообщении), и присоединяйся к обсуждению.

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

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
Лол. Внезапное открытие для Чувака :D
Я пропустил момент когда он устроился :(

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()

Страница 103 из 307