@ProLua

Страница 222 из 307
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
(Установить Юникс, бгг)

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
а зачем lua 5.3?
для многопоточности, интиджеров и т.п.

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
как это нету? есть: https://www.lua.org/manual/5.3/manual.html lua_newstate() гляньте :)
В ванильной - нету. Это - просто инициализация виртуальной машины. Попробуй туда ещё провесить пайпы и открытие потоков из самой Lua. Кстати, смотри на 5.1: https://www.lua.org/manual/5.1/manual.html#lua_newstate

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, как раз тогда брал себе малинку.

Snusmumriken
18.01.2018
13:54:58
Хе-хе, да : ) Но оба - с jit-компиляцией. v8 имеет jit-компилятор, но не настолько БЫСТРЫЙ как у luajit.

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

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