@ProLua

Страница 220 из 307
Timur
05.01.2018
18:57:26
Коллеги, привет. Так-как ни одного нормального ресурса с удобными поиском и большой базой IT-событий (хакатонов, конференций, вебинаров) не нашли, решили сделать свой агрегатор. Кто готов - потратьте, пожалуйста, минуту на наш Google-опросник https://docs.google.com/forms/d/e/1FAIpQLSeF62yKGrK_dA9s06MXASrGZMof2pVPsI_cBXCvKk-6BBA4-A/viewform

Group Butler [beta]
05.01.2018
19:18:07
Hi Sheridan!

Sheridan
05.01.2018
19:18:14
Счастья всем!

люди, пните в строну потоков в lua

Google
Sheridan
05.01.2018
19:18:55
желательно стандартное чтото, если возможно то вообще из core

задача такая: пишу конфиг для awesome. Виджет проверки доступности инторнетов лагает всё, хочу саму проверку вынести в поток, а оттуда нопример дергать за коллбэк установки состояния виджета

Philipp
05.01.2018
19:32:24
Стандартно в Луа нет потоков.

Snusmumriken
05.01.2018
19:32:57
Ну шо, есть такая штука как lanes. Это сторонняя сишная библиотека. В ней есть клёвые потоки, например вот такие: local lanes = require'lanes' -- заготовка для будущего потока function worker_func(linda) local sleep = require'socket'.sleep local timeout = .1 while true do -- в _ придёт 'request' local _, data = linda:receive(timeout, 'request') -- do something with request linda:send('response', 'thread complete') sleep(.1) end end -- это уже почти поток worker_func = lanes.gen('*', worker_func) -- хреновина, через которую пересылаем данные local linda = lanes.linda() -- вот тут он уже типа запущен local thread = worker_func(linda) linda:send('request', 12345) requre'socket'.sleep(10) -- то что поток вышлет local _, answer = linda:receive(.1, 'response')

Довольно громоздко, да. И рассчитано что поток крутится в бесконечном цикле, а его время от времени грузят работой/опрашивают, не пришло ли чего. Но зато ничего не блокируется, можно навешать колбеков "когда от потока что-то придёт", и всё такое.

Sheridan
05.01.2018
19:34:58
ага, возможно подойдёт, да и в пакетах есть, гуд. Спасибо! Пойду вкуривать )

Snusmumriken
05.01.2018
19:36:32
Это рассчитано на последнюю версию lanes, предыдущие версии слегка проще.

Sheridan
05.01.2018
19:37:27
разберусь ) Я второй день в луа пока правда, но пока что первый вопрос это про потоки возник )

Snusmumriken
05.01.2018
19:38:18
Дык у стандартной луа, всё кроме метатаблиц (для неподготовленного) - достаточно просто, так что можешь особо не морочиться : ) Если имел опыт в питоне/js - почти не будет проблем.

Sheridan
05.01.2018
19:38:34
проще сказать в чём я не писал )

Snusmumriken
05.01.2018
19:38:40
Ну тем более.

Если хочешь ООП - загляни в middleclass. Или у меня есть микро-либа, чутка похожая на ООП в петоне, полированная за несколько лет. https://pastebin.com/K1yRyE1T

Sheridan
05.01.2018
19:42:15
ооп еще не пригождается пока, я всего лишь конфиг пишу. Хотя если пару недель таким темпом, то возможно и да )

Google
Alex Фэils?︙
06.01.2018
13:28:16
/extra list

Group Butler [beta]
06.01.2018
13:28:16
/extra list
No commands set

Hi Egor!

Ivan
07.01.2018
07:28:30
/ghzen@FailsBot

Philipp
07.01.2018
18:40:32
Друзья, а подскажите решение для архитектурной. Есть некоторый класс (прототип) MazeGen, от которого наследуются другие классы. Он, по сути, занимается исключительно генерацией лабиринтов. Без рендера. Для работы ему нужен объект типа Grid, у которого будет набор определенных функций, тиап, setWall, removeWall, getSize, etc. В идеале, нужно разрешить передавать Grid как аргумент функции new, чтобы иметь возможность менять внутренность грида и не трогать сами алгоритмы генерации. Как лучше всего реализовать передачу и проверку необходимых функций? Или лучше отказаться от этой затеи и просто рекваирить необходимые гриды напрямую при создании генератора?

Я уже задавал этот вопрос, но пришлось отложить проект и вот снова к нему вернулся

@Snusmumriken @mva_name Чай @FGNTFG

fgntfg
07.01.2018
18:43:11
У тебя объект типа Grid, который содержит сам лабиринт и его методы. Так?

Philipp
07.01.2018
18:43:46
Да

fgntfg
07.01.2018
18:43:57
А что ты в конечном итоге хочешь?

Результат важнее процесса.

Philipp
07.01.2018
18:44:24
Иметь возможность быстро менять сам Grid, не изменяя генераторов. Типа, сменить square на polar grid

Вижу один вроде бы неплохой вариант – базовый класс Grid с наследниками, реализующими функции базового

fgntfg
07.01.2018
18:45:09
А проблема в чём?

Philipp
07.01.2018
18:45:16
В том, что не знаю, как это лучше сделать

fgntfg
07.01.2018
18:45:20
сделай

как нибудь

имея в руках готовый продукт можно будет сказать хорош он или не очень

а так с концептуальной точки зрения - чем больше атомарность, тем гибче будет

Philipp
07.01.2018
18:46:41
Да, тоже уже склоняюсь чтобы написать просто как получится, а там уже фиксить

Google
Philipp
07.01.2018
18:46:41
Спасибо

fgntfg
07.01.2018
18:46:51
или не фиксить :)

пачить ;)

Philipp
07.01.2018
18:47:02
=)

FailsBot
07.01.2018
21:48:55
/ghzen@FailsBot
Avoid administrative distraction.

Group Butler [beta]
07.01.2018
22:33:58
Hi Никита!

Alex Фэils?︙
08.01.2018
00:09:26
кто меня звал

Philipp
08.01.2018
00:09:40
Кто? Никто

Кто тебя звал?

Alex Фэils?︙
08.01.2018
00:10:03
так чем тебе помочь

79885
08.01.2018
06:06:30
/ghzen@FailsBot

FailsBot
08.01.2018
06:06:31
/ghzen@FailsBot
Avoid administrative distraction.

GET

Group Butler [beta]
08.01.2018
15:02:13
Hi d9k!

d9k
08.01.2018
15:15:57
Бот Falls, написанный на си и запущенный на планшете?! зачем так извращаться? ?

[Anonymous]
08.01.2018
16:00:28
>Falls

d9k
09.01.2018
03:39:02
/me failed to write @FailsBot name

Group Butler [beta]
09.01.2018
06:06:02
Hi Dimok!

ShadoWalkeR
09.01.2018
07:26:20
Если кому интересно - я тут хороший ман по написанию модулей для Lua на С нашел - http://chsasank.github.io/lua-c-wrapping.html

Alex Фэils?︙
09.01.2018
08:21:50
Отличненько

Google
ShadoWalkeR
09.01.2018
09:10:00
Полуоффтоп - разработчики Lua не знают чем стек отличается от очереди, и называют первым второй ?

Хотя я бы даже сказал между стеком и массивом

Поскольку при обмене данными между С и Lua обратиться можно к любому элементу по его индексу

ShadoWalkeR
09.01.2018
09:39:20
Стек LIFO - Last In First Out, очередь FIFO - First In First Out

The Dude
09.01.2018
09:39:47
Стек LIFO - Last In First Out, очередь FIFO - First In First Out
И они не могут быть в обратные стороны, да?

ShadoWalkeR
09.01.2018
09:40:07
Угу.

lua по умолчанию забирает также как в очереди аргументы - начиная с первого закинутого

The Dude
09.01.2018
09:41:26
Эх, ладно, не буду продолжать :)

ShadoWalkeR
09.01.2018
09:41:50
Ну раз начал - то продолжай

https://www.intuit.ru/studies/courses/648/504/lecture/11457?page=1

Philipp
09.01.2018
09:48:41
И они не могут быть в обратные стороны, да?
>Стек (англ. stack — стопка; читается стэк) — абстрактный тип данных, представляющий собой список элементов, организованных по принципу LIFO (англ. last in — first out, «последним пришёл — первым вышел»).

Нет, не могут

Иначе это будут уже не эти структуры данных

>О́чередь — абстрактный тип данных с дисциплиной доступа к элементам «первый пришёл — первый вышел» (FIFO, First In — First Out). Добавление элемента (принято обозначать словом enqueue — поставить в очередь) возможно лишь в конец очереди, выборка — только из начала очереди (что принято называть словом dequeue — убрать из очереди), при этом выбранный элемент из очереди удаляется.

ShadoWalkeR
09.01.2018
09:51:28
Я почему и поправился что верней следовало бы назвать массивом - по индексу доступна выборка.

Aleksey
09.01.2018
09:51:34
Еще в студенческие годы ходила шутка, что автомат Калашникова преобразует стек в очередь

ShadoWalkeR
09.01.2018
09:55:37
А еще есть дека насколько помню - там можно добавлять/удалять в начало и конец

А еще оффдоки на CAPI писал чукча. У него lua_get* и lua_push всегда чтото помещают в стек, хотя lua_get* забирает это оттуда?

А наврал. Это check* забирает со стека

Google
Snusmumriken
09.01.2018
14:08:27
Карочи, это двунаправленная очередь (дека (колода), потому что можно и пушить и попать с обеих сторон), но изначально (в ранних версиях lua) это был именно что стек. А ещё, есть такая штука как "стековая виртуальная машина", она так называется, и луа организована по этому принципу.

Поэтому хватит цепляться к мелочам : ) Пусть называется как называется, всё равно все знают что это. А те кто не знает - тем и не нужно, хе.

А хотя не, меня глючит. Это вполне себе нормальный стак. Попать "со дна" нельзя, только через "settop" сбросить значения с другого конца. Другое дело что в луа оно грузится "первые аргументы - на дне", а из луа в С выгружается "первые аргументы на вершине", для удобства использования.

FailsBot
09.01.2018
14:26:49
d9k failed to write @FailsBot name

Snusmumriken
09.01.2018
14:48:07


Хм, или я не помню всех фич. При пуше не исключено что добавляется не "на вершину" а "в конец", хм. Тогда имеют смысл конструкции типа lua_rawset(L, -3);, типа, пушим таблицу, ключ и значение, они болтаются в конце, а этой фигнёй мы их типа склеиваем, -3 - с конца, чтобы не париться с вычислением номера позиции этих ключей-значений. В общем, это всё равно стек, никакая не очередь, ребзя. Так что когда пушим строку - она добавляется первым элементом, пушим ссылку на таблицу - добавляется второй, пушим число - добавляется третьим, и в этом же порядке оно выгружается в луа (да, как очередь). Всё норм. снус не всё знает, он редко пишет/читает сишные прослойки, но он уверен что это стек

[Anonymous]
09.01.2018
15:42:12
Здраствуйте. Норм ли писать сайты на луа?

Andrey
09.01.2018
15:48:14
http://chsasank.github.io/lua-c-wrapping.html - все как в этом примере

Луа кладет сначала 4 потом 5 в стек. С через luaL_checknumber (L, 1) забирает 4, потом через luaL_checknumber (L, 2) получает 5.

В обратку также работает

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