Snusmumriken
Да, лямбда для приёма каждого сообщения. И ffi-перевод char* в строку, потому что это - ffi-биндинг сишной либы. Он работает, хоть и без сахара. И даже для того чтобы получить принятые данные, нужно лезть в ffi. Кстати, возрадуйся пропускам между блоками и отсутствию жутких однострочников : )
Tverd
На Мунскрипте было бы интереснее, как мне думается )
Snusmumriken
Там на выходе генерируется кошмар, и я избегаю препроцессоров :<
Мунскрипт работает если есть мунскрипт, а луа работает и с мунскриптом и без него.
Хотя на практике, я могу сделать комплект хендлеров, которые подключаются через препроцессор или без него.
Tverd
На выходе, конечно да ))) Но исходник как по мне лучше читается... хотя дело привычки
Snusmumriken
Ну, просто у меня отношение к препроцессорам как к замедляющей фигне, необходимой только в узких случаях : )
Ну, имхо, это всё равно что городить большую пирамидку из препроцессоров.
С тем же успехом, можно запускать в браузере vmware, скомпилированное в asm.js (native client), внутри которой открывать браузер, в котором открывать фотошоп, скомпилированный в asm.js. Это, конечно, кидание из крайности в крайность, но щито поделать, я и так использую две прослойки между железом (c-виртуалка lua-код). Примерно по той же причине я не ставлю моды на игры.
Snusmumriken
Тут, конечно, много смехуёчков не по делу, но товарищ значительно умнее (эрудиция + логика) основной целевой аудитории жаваскрипта. И тут как раз примеры длинных цепочек запуска десктопных приложений, запущенных в браузере через компиляторы С в JS, начиная с 11:50.
https://vk.com/video3209020_168239546
Tverd
Да, весело рассказывает )
Anonymous
И тебе не хворать. А почему ты в бете? Вроде уже давно стабильный и распространился
Snusmumriken
Дворецкий более приветлив чем общество : 3
Mars
😂
Alex
Чот дворецкий примолк.
Alex
Добро пожаловать в чат pro.lua! Ознакомься с правилами чата (в описании и прикрепленном сообщении), и присоединяйся к обсуждению.
Мерль
Приглашаем на Lua in Moscow 2017 5 марта http://bit.ly/2m2Yyzw
Tverd
эх... делековато
Ruslans
Мерль
Неа
Мерль
(
Cosmo
Tverd
ради интереса, может что новое нашел бы
Cosmo
это как?) но вообще да - я про пьянку после забыл)
Snusmumriken
Хех, можно спросить Роберто на тему что он думает про луаджит лично :3
Tverd
Кстати, а корутины есть более быстрые, чем встроенные в луа?
Tverd
а то легче функцию вызвать, чем продолжить корутину
Snusmumriken
Корутины имхо больше похожи на лямбды: в корутине, например, бесконечный цикл и состояние.
Но да, обычные маленькие функции имхо более актуальны, а для всякой асинхронщины - просто выставляем все таймауты в ноль: пока что не пришло - рыпаемся и сразу проверяем что-то следующее.
Что-то истинно синхронное (вроде io.read) не получится сделать асинхронным на корутинах, уж тут придётся лепить многопоточность.
Snusmumriken
В целом, на корутинах делают всякие диспетчеры, выполняющие идентичную или почти идентичную работу: https://www.lua.org/pil/9.4.html
В некоторых случаях это чутка быстрее чем, например, ждать пока загрузится каждый файл в очереди. Типа елдим корутину до тех пор, пока что-то не придет на сокет.
Snusmumriken
Но с тем же успехом можно сделать табличку со списком соединений с нулевым таймаутом, и проходить по ней циклом, пока все не скачается.
Alexander
у меня в гуи на луа сделаны три ветки выполнения: корутина и отдельный posix-поток
1) основной поток принимает нажатия от кнопок и принимает решение о действиях
2) корутина обновляет часы и принимает фоновую информацию от потока и датчиков
3) поток занимается потенциально долгими блокирующими операциями, в первую очередь сетевым обменом.
Если я правильно понимаю механизм корутин, то блокировка в корутине по вызову синхронного ввода/вывода приведет к блокировке всего приложения. поэтому и вынес в поток.
Snusmumriken
Мог бы вынести в обычную функцию :3
Где хороши корутины - в сложных функциях, где нужно несколько раз елдить. Но не знаю, поддерживают ли луа-корутины эту штуку. Насколько я знаю - да. Но технически, корутина - это такой goto между функциями, в красивой оболочке.
Tverd
Ну да, все верно, стандартная работа с IO все блочит.
Tverd
по этому и навешивают всякие эвентлупы со своими обработчиками, комбайн такой.
Snusmumriken
Поэтому только истинная многопоточка, только хардкор, да.
Snusmumriken
Да не, просто дочерний поток, который что-то исполняет.
В самом простейшем случае, многопоточность можно заменить через os.execute: запускаем ещё один скрипт и соединяемся с ним через сокеты. Это костыльно, но работает практически везде. Плюс дочернему потоку приходится проверять существование родительского, чтобы самоубиться в случае чего.
Tverd
я про то, если без многопоточки... Если есть треды ОС, то все намного лучше, правда иногда и сложнее. + не везде есть треды. Я про специфические ОС.
Snusmumriken
Ну, мы не говорим про однозадачные ОС.
Однозадачные остались, считай, только на мобильных телефонах и, возможно, всяком embedded-железе типа навигаторов/музыкальных центров. И то, их активно переводят на ведро, в котором есть многопоточка.
Но даже если ОС не поддерживает дочерние процессы, вариант с запуском ещё одного скрипта и сокето-связи - работает.
Snusmumriken
Лучшие потоки, на моей памяти - в love2d. Там сам sdl открывает много виртуальных машин, и сам обеспечивает каналы связи. Пространство полностью разделено, что позволяет коду выполняться на разных процессорах. Где-то мутил надстройку над этим счастьем, дабы слить поток и пару его каналов (дуплексная связь с родителем), налепить колбеков на приём сообщений и так далее. Хех, костыльные эвентлупы :3
Tverd
а на чем там основаны эвенты? в sdl
Tverd
libevent?
Snusmumriken
Хех, справка по потокам:
Если что: поток - это отдельная фигня.
Операционные системы делят их на два типа - "лёгкие" и "тяжёлые" потоки.
Лёгкие - это программа сообщает операционной системе, мол, вот этот кусок кода можно выполнять параллельно, и ось начинает скакать между блоками кода. Они легко плодятся и имеют общую память, правда, за переключение между потоками отвечает операционная система, и они могут выполняться только на одном процессоре, единственное различие - асинхронность. Lanes выполняет именно такие потоки.
Тяжёлый поток - это как будто совсем другое приложение, с которым можно общаться через общие каналы. У них нет ни одного куска общей памяти, а пересылка - только текстовыми сообщениями через пайпы-каналы. Вот эта херовина может выполняться на разных процессорах, и жрать огромную кучу памяти. Но тут лишний дискомфорт в виде невозможности работать с объектами друг друга напрямую, только через посредника, типа "читалка-отправлялка сообщений" в каждом потоке. Это очень, очень похоже на сетевое взаимодействие разных приложений.
А корутины - это считай что очень много GOTO. Функция, которая может в любой момент прерваться через yeld, и продолжить своё выполнение после того как её снова вызвали
Информация по lanes слегка устаревшая. В версии с появлением линды - оно переходит в состояние настоящей, тяжёлой многопоточности.
Snusmumriken
У меня кстати есть страшная штука - версия linda для luajit.
Tverd
стоп, легкий поток это thread, тяжелый это process. Треды так же могут скакать между физ ядрами.. А вот могут ли на разных сокетах... вот вопрос конечно
B
чет посидел тут пару дней, думал будет что то типа егегей с радугой и единорогами, ав итоге все тут задвигают страшные сложные штуки
Tverd
это типа local a = 10 ? ))))))))))
Snusmumriken
Alexander
Tverd
B
Ну типа😂
B
это типа local a = 10 ? ))))))))))
B
Ну да насчет простоты языка и реализуемых на нем вещей я согласен
B
Ну в плане что простой язык не значит простые приложения
Snusmumriken
Да ладно, можешь задавать тупые вопросы :3
Ну, я тут просто изначально ориентируюсь на всякий лоулевел, многопоточку, использование недокументированного функционала и стрёмные байтоёбские оптимизации, типа ffi/jit и всего такого, всё ради игрушек. Но я типа чутка преподаватель, поэтому и на нубские вопросы отвечаю свободно.
На луях довольно легко собирается приложение, сравнимое с самотрансформирующимся огромным боевым человекоподобным роботом, как и в питоне, например.
B
Мне бы такого преподавателя
уже вижу что то типа
"ну че сучары, как там компиляция говнокода идет?"
Snusmumriken
Во-во, я примерно так и вёл, когда проходил преподавательскую практику в школе.
Детишки были рады.
B
B
мда я все еще новый в телеграме человек
нужно попрактиковаться в отправке файлов
B
просто решил щас пока остановиться на Lua и получить хоть какой то вменяемый результат в изучении ЯП
а то были возвратно-поступательные движения и с C# и с Java немного с C++ но там далеко не ушел а тут хочу как то серьезно но с чего то небольшого
Snusmumriken
Питон/жаваскрипт/луа. Но если ты не живёшь в Москве/Питере/Киеве/Минске, шанс найти работу чистым программистом на чём-то таком - мизерен.
B
знание ЯП и умение их применять разные вещи
щас пока концентрируюсь на том что б доводить какие либо начинания до конца, проблема в том что как бы и логику прикинуть могу и алгоритмы работы в голове но вот когда дело доходит до реализации там просто беда
Snusmumriken
Ну, если ты планируешь зарабатывать деньгу программированием и живёшь не в столице - придётся углубляться в жаву/шарп/плюсы, а скрипты останутся вспомогательным ЯП. Учиться об них очень приятно, но неудобно слезать: очень много синтаксического сахара. Меня, например, очень сильно раздражают конструкции типа: Кукарек<кококо> кукарек = new Кукарек<кококо>. Когда я хочу получить что-то простое.
Поэтому, собственно, пишу на луях (jit) - очень много сахара с огромной скоростью исполнения и возможностью хардкорных сишных штук.
Tverd
Кстати, заинтригован языком nim, уже писал модули для lua.
Я к тому что у нас работу для такого языка найти еще сложнее )
Snusmumriken
Во, типичное применение FFI в луях.
Хоть в node.js есть что-то подобное, но в luajit это получается как исполнение нативного кода. Нет оверхеда на вызов внешних функций, плюс tiny c-compiler.
Snusmumriken
И возможность обернуть эти страшные штуки в красивую луёвую оболочку (node.js это тоже может).
B
я так пока на хороших примерах потискаю может love2d
или возможно Defold
Snusmumriken
@love2d_ru
Задавай свои ответы :3
Tverd
Hi-Hi )))
Alejandro Jeditobe
Привед
Tverd
превед
Tverd
На русском ? У меня кажись только 3-я
Tverd
Хм, а что в ней нового?
Tverd
Ну я ее даже так найти не могу... а где увидел?
Tverd
пока не в курсе про профайлер... Да, нашел... Хитрый какой сукин сын, ну 3-я редакция приурочена к 5.3 версии, ладно. А 4-я?
Tverd
Ну Роберто, ну молодец )))
🦥Alex Fails
Можно попробовать
Tverd
Пробовал, там одна большая проблема и описана на форуме...
Tverd
Там на каждый чих раз в кадр приходит пачка колбеков, из-за этого фпс не фонтан.
Tverd
Для 3д? не нашли? По каким критериям смотрели? Крайенджине не подошел?
Tverd
Ну если бы мне сейчас выбирать 3д - это прямиком край
Tverd
Вот тут не знаю, крайенджайн без джита?
Tverd
Эм... Кокос? там есть вроде примитивы для работы с 3д
Tverd
Не, вы конечно можете юзать урху, если хватает...