LINUX.ORG.RU

Асинхронный Lua

 


0

1

Доброго дня, комрадес.

Есть ли тут изврахрабрецы, которые использовали в ±продакшне асинхронный Lua?

Если да, то какое именно из доступных стапятиста решений использовали?
Пока остановился на двух: cqueues (standalone решение) и luv (биндинги к libuv — то, на чём работает nodejs)

Буду рад, если кот-то поделится опытом.

По луа не скажу, конечно, но вообще ничего извращённого в асинхронном коде на скриптовых языках нет. Сам tcl использовал - всё норм. Там даже расширений и либ никаких не нужно - есть fileevent.

cppsektant ()
Ответ на: комментарий от annerleen

Lua — встраиваемый, потому очень многого не умеет (и вряд ли научится).

Накостылять-то можно что угодно, но если нужно надёжно, то единственный способ асинхронно гонять Lua-кот и не страдать — гонять его из C (ну или другого нормального языка). То есть потоки генерируешь в родительском процессе на компилируемом языке, а детишки на Lua гоняют однопоток и возвращают родителю что от них требуется (или полную чушь, если кодер обосрался ☺).

mord0d ★★★ ()
Ответ на: комментарий от mord0d

Луа не только встраиваемый, но и расширяемый, поэтому научить его можно чему угодно, что можно по идее делать на Си/++ и даже то что нельзя, главное руки ровные и капля желания, хотя если просто так ныть - то да всё тлен, тут спорить нет смысла.

AKonia ()
Ответ на: комментарий от AKonia

главное руки ровные и капля желания

И тонна терпения. А я начинаю ПСИХОВАТЬ, когда обнаруживается, что эта ссанина не умеет в половину того, что есть даже в самой сырой поделке пьяного студента с задержкой развития.

mord0d ★★★ ()
Последнее исправление: mord0d (всего исправлений: 1)
Ответ на: комментарий от mord0d

Если у вас проблемы с программированием, только из-за отсутствия отдельной плюшки, то батенька вы возможно ошиблись с профессией, потому что путей сделать что угодно в луа - множество и способы разные в зависимости от потребности или вы из тех которые приходят с Си++ на другой язык и с высоты своего ЧСВ плётесь в любой другой язык, только потому что в нём ООП нет или он по другому реализуется или что-то в духе «Луа - говно, т.к. нет умных указателей»

AKonia ()
Ответ на: комментарий от cppsektant

Эмм область видимости, слабые таблицы, сборка мусора с интерфейсом из Си библиотеки суммарно могут дать вам столь желанный RAII, также можно поступать так LuaRAII, но ИМХО если для вас программирование замыкается в узкий набор парадигм и вы закостенели рассматривать и проектировать продукты через другие парадигмы, то возможно вы ошиблись профессией.

AKonia ()
Последнее исправление: AKonia (всего исправлений: 1)
Ответ на: комментарий от AKonia

проблемы с программированием

Скорее проблемы со временем. Мне никто не оплатит изобретение очередного костыля. А учитывая, что изобретение некоторых базовых фич потребует не одну минуту времени, на изобретение этих костылей уйдёт больше времени, чем на, собственно, задачу.

И да, программирование — это не мой профиль, так что мимо. ☺

mord0d ★★★ ()
Ответ на: комментарий от AKonia

LuaRAII

Это не RAII, это просто scoped_X. Разница здесь в том, что в крестах разработчик типа определяет управление ресурсами. А здесь - клиентский код. Не обернул в scoped() - похерил ресы.

cppsektant ()
Ответ на: комментарий от cppsektant

Это не RAII клиентский код […] не обернул в scoped() - похерил ресы.

Разве в С++ нельзя похожим образом обосраться? Ну, например, использовать глупые указатели вместо умных и забыть сделать free()/delete/delete[].

(Если что – я в крестах не разбираюсь)

dsxl ()
Последнее исправление: dsxl (всего исправлений: 1)
Ответ на: комментарий от dsxl

С динамической памятью можно. Как и с другими стореджами, аллоцируемыми вручную. Но с автоматическими переменными - никогда. Тут нужно понимать одну вещь - в lua нет аналогов new some_type и std::aligned_storage_t<sizeof(some_type),alignof(some_type)> storage; ... new(&storage) some_type, поэтому соответствующих проблем тоже нет.

cppsektant ()