Maxx
Maxx
имелся в виду один thread на уровне ОС, а не lua-вский
Maxx
"но если запрос на поиск слать из С-обвязки в другом потоке"
писал же уже
Maxx
или "чукча не читатель"? =)
Maxx
ну, я не воспринимаю (пока) луа отдельно =)
Snusmumriken
В корутинах есть некоторый смысл.
Maxx
для меня это эмбедед язык, работающий в связке.
конечно, это не верно.
Snusmumriken
Применение корутин.
https://www.lua.org/pil/9.4.html
Maxx
она сработала очень быстро и передала это "очень быстро" другой корутине.
не воспринимай эту корутину как единственную
Maxx
причём, передала - на полпути, не закончив свою задачу, а лишь прервавшись для получения новых данных например
Snusmumriken
Карочи, корутины применяются для реактивного программирования и подобия функциональщины с ленивыми вычислениями, или для создания цепочек-корутин.
В некоторых случаях ускоряют процесс.
Maxx
ты про "вытесняющую многозадачность" читал? =)
Maxx
угу, вытесняющая многозадачность - это вообще не многозадачность
Snusmumriken
Чувак, в питоне тоже нет тру-потоков.
Мерль
Мы запустили внешний процесс - > отдаём время для другиъ корутин -> просыпаемся, проверяем результат
Мерль
Snusmumriken
Тру-потоки в луа достигаются модификацией хост-программы. В результате, ты посылаешь хосту код проги в виде строки, тот создаёт новый luastate и гоняет переданный код в другом тру-потоке.
Snusmumriken
А то.
Snusmumriken
Нет.
Мерль
Конечно (
Snusmumriken
В фреймворке который я использую, потоки именно такие.
Мерль
В теории можно реализовать что-то типа труъ зелёных потоков как в Go
но это надо переписывать рантайм
Полностью
Хотя есть уже реализация на go
В принципе.....
У меня есть задумка
Мерль
Хотя нет
Всё равно надо переписывать
Мерль
Если ты зделаешь в корутине вечный цикл без yield, то ты заблокируешь всю программу
Если ты запустишь цикл в среде с вытесняющей многозадачностью, то всё будет бежать асинхронно
Maxx
эээ... а я что написал? =)
Мерль
эээ... а я что написал? =)
Ты написал
"только прерывает исполнение не ОС, а сама сопрограмма"
то есть управление отдаёт корутина
Но это, блин, принципиальное отличие
В этом и состоит отличие вытесняющей многозадачности и кооперативной
Мерль
:3
Maxx
нее... кооперативная - это много потоков, по задаче на поток, всё параллельно.
а вытесняющая - это один поток, разделяемый между разными задачами, от параллельности - только видимость, т.е. реальной параллельноси нет.
Мерль
Maxx
да не, без обид конечно, но я до сих пор не вижу, где б ты указал на противоречие :)
Maxx
т.е. я вижу, что ты упёрся в термин и не можешь или не хочешь сделать одного шага в сторону :)
Мерль
Maxx
но ведь я ж именно так и написал: это КАК вытесняющая многозадачность, ТОЛЬКО прерывание идёт не от ОС, а от самой корутины. =)
Мерль
Maxx
ну да. но ведь задачей стояло не дать формальное определение, а как-то по-другому показать смысл, чтоб The Dude разобрался
Мерль
нет, лучше так: смерть - это как жизнь, просто не дышишь и разлагаешься
Maxx
именно =)
Мерль
Мерль
Впрочем он всё прекрасно понял и без нас
хехехе
Maxx
даёшь отправную точку поближе к конечной, а затем одним двумя штрихами указываешь правильный путь
Anonymous
Мерль
Была статья, что то вроде "Пишем простую систему учёта" недавно
Там упоминался этот чатик
Мерль
Maxx
была ещё другая статья на гиктаймсе. там тоже упоминался. вторая волна - оттуда
Мерль
Нет
Мерль
?
Snusmumriken
Хм. Можно сделать класс-обёртку вокруг любой userdata.
Это проще всего. Я так с сишными структурами работал.
Ну там,
a = {}
a.obj = ffi.new(struct)
function a:iterator() bla-bla end
function a:getValue(...) end
И т.д, с метатаблицами и прочим.
Сишные методы, правда, приходится дублировать.
Кстати, с итераторами к многомерным массивам есть смешная история.
Вместо key высылается табличка типа {10, 20, 30}, которая определяет текущие положения по i, j, k, ... -измерениям, а вместо value - текущее значение. Это самое рациональное имхо.
Anonymous
Где чаты с java?
Snusmumriken
Может загуглишь?
Anonymous
На кой же вы мне тогда?
Snusmumriken
Вот именно, зачем ты здесь? :3
Anonymous
В гости пришел.
Snusmumriken
Молодец. А я, обычно, людей спрашиваю в тех случаях, когда пол часа гугленья не помогло. Не дергаю людей по пустякам. Это тактично.
Anonymous
Да, прикольно.
Anonymous
Так чем вы тут занимаетесь?
Snusmumriken
Хернёй всякой. Можешь прочитать выше. Предыдущие сообщения доступны для всех желающих.
Anonymous
Хорошо.
Чем занимаешься? Кто ты?
void *
Snusmumriken
Я делаю игрульки на чистой lua. Сетевой код, либы коллизий в 2d, физика, шейдеры, парсеры, либы для работы с UTF8, либы на сишке, которые можно подключить к lua (DLL/so), огромную кучу всякой херни.
Я - студент который вчера защитил диплом про ПО, написанное на lua, живу в Москве, неофициально работаю приходящим админом в паре офисов. Хобби - плотничество, гитарка/укулеле, изготовление ништяков из кожи.
Достаточно полная информация?
Anonymous
Вполне.
Anonymous
Snusmumriken
Хм. Только сейчас, спустя три года кодинга, обнаружил, что я не могу сделать так:
t = {10, 20, 30}
for i, v in ipairs(t) do
v = 10
end,
Из-за того что v передается не как ссылка на значение, а как будто создается локальная переменная.
Всю дорогу работал с хешами/вложенными списки и тупо не замечал.
Срочно переделал итератор по ffi-структурам, чтобы тот вместо v-значения возвращал функцию, с помощью которой можно узнать текущее значение многомерного массива или задать текущее значение.
Со структурами проще. Не надо передавать конкретное значение, только ссылку на элемент структуры.
Oleg
Ребят, никто не в курсе про подобные группки по python
Alex
в курсе.
Oleg
Ooo
Alex
https://telegram.me/ru_python
https://telegram.me/python_beginners
https://telegram.me/rudepython
Oleg
Спасибо
Kirill
ребят
Kirill
как кошерно объединить циклы?
for f in paths.files(params.train_images_path, 'JPEG') do
table.insert(image_names, f)
end
for f in paths.files(params.train_images_path, 'jpg') do
table.insert(image_names, f)
end
Kirill
torch paths
Kirill
for image_name in paths.files("examples/", "jpg") do
..> print (image_name)
..> end
girlyand.jpg
tubingen.jpg
moscow.jpg
homer_low.jpg
anna.jpg
Kirill
paths.files("examples/", "jpg")+paths.files("examples/","JPG")
Kirill
вот так не работает
Kirill
на луа
Vladimir
если второй параметр регэксп, то почему не использовать что-нибудь вроде paths.files("examples/", ".*\.jpe?g$")
Vladimir
?