Group Butler [beta]
18.01.2018
10:18:45
Hi Revertron!
Hi ? Алёна ? Helen Allien!
Snusmumriken
18.01.2018
10:34:06
Тебе обязательно 3.3?
На самом деле, не сложно, если есть dll/so-библиотека.
Подключаешь библиотеку ffi.load('lib'),
пишешь хедер на функции ffi.cdef[[]] (можно автоматически распарсить .h-заголовки),
дёргаешь функции. Возможно есть уже готовые.
Готовая портабельная обёртка с OpenGL 2.1 (сейчас - 2d, довольно скоро потянет 3d) и кучей игровых ништяков - Love2d.
Список особо крутых ffi-биндингов:
http://wiki.luajit.org/FFI-Bindings
OpenGL GLUT 3.x:
https://github.com/nanoant/glua
Просто большой комплект либ (некоторые - биндинги, но они созданы для совместной работы друг с другом, поэтому иногда, приходится переписывать убирая лишние зависимости):
https://luapower.com/
Google
Ilya
18.01.2018
11:12:55
Где-нибудь есть нормальный мануал по установке Lua (5.1) + Luarocks на Windows? Я это как-то сделал для 5.3, но теперь мне страшно вспоминать об этом, и, боюсь, повторить будет сложно.
А надо.
Да, и чтобы можно было компилировать сишные модули - в этом весь смысл.
Philipp
18.01.2018
11:16:25
(Установить Юникс, бгг)
mihacooper
18.01.2018
11:29:16
Snusmumriken
18.01.2018
11:43:16
Да, и чтобы можно было компилировать сишные модули - в этом весь смысл.
Сишные модули можно компилировать через MinGW/VS, у них регулярно есть Makefile.
Для VS - прописываем кучу лабуды в свойства проекта,
для MinGW - пишем makefile и пихаем в стандартную include-директорию нужные Lua-заголовки.
Кстати, можно поставить Luarocks, но там под вендой много всякой фигни, которую приходится прописывать в пути, в unix-подобных ставится в три строчки баша.
Pavel
18.01.2018
12:35:22
По поводу OpenGL, поясните, как "автоматически распарсить заголовки". Я понимаю так, надо обработать препроцессором, а что ещё? Есть готовый GLFW, надо только OpenGL.
Group Butler [beta]
18.01.2018
12:52:38
Hi 6 :)!
6 :)
18.01.2018
13:21:15
Revertron
18.01.2018
13:32:57
А никто не знает есть ли где-то уже JIT для Lua 5.3?
Snusmumriken
18.01.2018
13:33:23
Нет, потому что Luajit - это другая виртуальная машина, основанная на 5.1 для скорости/простоты.
Можно задонатить Майку Полу чтобы он переписал всё нафиг, но это дорого (десятки-сотни тысяч уе), и тогда посыпется филигранная оптимизация.
Можно переписать самостоятельно, но уровень навыков программирования на сишке должен быть где-то в районе Майка Пола, а свободного времени - с пол года.
Да и объективно - не очень нужно.
Vsevolod
18.01.2018
13:33:50
а зачем lua 5.3?
Revertron
18.01.2018
13:36:21
Google
Vsevolod
18.01.2018
13:36:39
какой многопоточности?
Snusmumriken
18.01.2018
13:36:44
Ох.
В Lua 5.3 нет многопоточности. Там довольно небольшая разница с 5.1, в основном - несколько лишних ключевых слов и метаметоды.
Vsevolod
18.01.2018
13:36:49
инты в 5.3 есть, но от них сплошная боль
тем более, что инты есть и в luajit...
Snusmumriken
18.01.2018
13:37:55
В Luajit есть не только int, но и unsigned long-long int и все остальные сишные типы включая структуры, в т.ч. многомерные.
Подробнее - тут:
https://habrahabr.ru/post/113804/
Vsevolod
18.01.2018
13:38:07
именно
Snusmumriken
18.01.2018
13:38:49
Для многопоточности - Lanes.
Для json - lua-cjson или pure-lua-либы.
Для сети - Luasocket (https - Luasec).
Всё это есть на luarocks.
Vsevolod
18.01.2018
13:39:12
а я json в lua читаю через ucl :)
Revertron
18.01.2018
13:39:52
как это нету? есть:
https://www.lua.org/manual/5.3/manual.html
lua_newstate() гляньте :)
Snusmumriken
18.01.2018
13:40:01
Для игрулек - CryEngine, Corona SDK и LOVE.
Чатик по LOVE - рядом: https://t.me/love2d_ru
Я там есть, и меня можно спрашивать.
Vsevolod
18.01.2018
13:40:40
https://rspamd.com/doc/lua/ucl.html - даже в luarocks должно быть, кстати
Snusmumriken
18.01.2018
13:40:53
Vsevolod
18.01.2018
13:41:31
lua_newstate и в 5.1 можно создавать per thread
сам интерпретатор lua, к счастью, thread safe
Snusmumriken
18.01.2018
13:43:03
как это нету? есть:
https://www.lua.org/manual/5.3/manual.html
lua_newstate() гляньте :)
А ты попробуй сделать что-то такое в 5.3:
Thread = require'thread'
local audiothread = {}
audiothread.func = [[
require'love.sound'
require'love.audio'
require'love.timer'
local sound = love.audio.newSource('sound.ogg')
while true do
data = thread:pop() -- threads has access to special object
if data == 'play' then
sound:play()
thread:push('Yea!')
end
love.timer.sleep(.01)
end
]]
function audiothread.receive(msg)
print(msg)
end
-- name, thread function and set of callbacks {receive, finish}
music = Thread('Music', audiothread.func, {receive = audiothread.receive})
music:send('play')
while true do
music:update()
end
Вот так выглядит многопоточность из-Lua в Love2d: код треда подгружается как строка и отправляется на исполнение новому LuaState.
Но в 5.3 так не получится, там вместо многопоточности - корутины (такие же как в 5.1).
Admin
Snusmumriken
18.01.2018
13:44:05
Lanes делает похожие вещи, но там частично выгребается байткод функций из текущей виртуальной машины, и пересаживается в другую.
(https://github.com/LuaLanes/lanes)
И оно, кстати, работает с Luajit, 5.1-5.3.
mihacooper
18.01.2018
13:49:22
Для многопоточности есть кое что получше
https://github.com/effil/effil
Snusmumriken
18.01.2018
13:50:21
На ARM-процах не очень работает, помнится :<
С год назад компилил или это или что-то похожее для raspberry pi, тогда не зашло.
mihacooper
18.01.2018
13:53:19
точно не это) т.к. этому меньше года
Google
mihacooper
18.01.2018
13:54:15
но на ARM может не зайти, да
Snusmumriken
18.01.2018
13:54:25
Не, таки в начале 2017, как раз тогда брал себе малинку.
Dika
18.01.2018
13:54:41
Snusmumriken
18.01.2018
13:54:58
Хе-хе, да : )
Но оба - с jit-компиляцией.
v8 имеет jit-компилятор, но не настолько БЫСТРЫЙ как у luajit.
Dika
18.01.2018
13:55:30
Snusmumriken
18.01.2018
13:56:31
У ffi ноды - несколько прослоек между ffi и ядром ЯП, которые чуть повышают комфорт но снижают скорость исполнения. Он будет медленнее в любом случае, ибо куча лишних переключений контекста и всё такое.
Плюс сам JS не способствует внутренней простоте и скорости, такие дела.
Но это важно, в основном, для игрушек и всяких суровых штук типа БД/микроконтроллеров/highload, обычному скриптописателю не нужно, можно продолжать писать на JS.
Dika
18.01.2018
14:07:42
Snusmumriken
18.01.2018
14:08:23
Да, а ещё вышел LuaJIT 2.1.0-beta3.
Vsevolod
18.01.2018
14:08:31
да, с gc64
но вообще v8 вряд ли медленнее luajit