
The Dude
12.09.2017
15:01:51
...
Давай. Расскажи мне обратное.
И не забудь ссылку на "JavaScript wut" видео.

Philipp
12.09.2017
15:14:56
Чувак, JS - лютое УГ

The Dude
12.09.2017
15:18:55

Google

Alexey
12.09.2017
15:24:58
Чем https://github.com/craigbarnes/lua-gumbo не устраивает?
Вроде обновляется, есть FFI версия
Даже документация какая то

Vadim
12.09.2017
16:07:46

Vadim
12.09.2017
16:24:19
И на том спасибо.
Интересно, что там в структуре страницы не так?

Vadim
12.09.2017
16:31:56
через пару часов погляжу :)

Snusmumriken
12.09.2017
17:31:55
Чувак, JS - лютое УГ
ЖС - просто ещё один инструмент.
Свои задачи выполняет неплохо, но если бы там была статическая типизация - он оказался бы в пяит раз лучше, ибо минимизировалась половина факапов.

Saphire
12.09.2017
17:33:36
В это время - мой отец обнаружил "Бизнес-Процессы" в Битрикс24.
И оказывается это тупо визуальный язык программирования. Интересссно.
Есть импорт/экспорт в формате сжатого zlib php serialize() массива/объекта.
И у меня чешутся руки сделать нормальный "компилятор" для этой фигни.

Snusmumriken
12.09.2017
17:48:21
Давай лучше заебош программирование блюпринтами (как в ue4), только с нормальными модулями, произвольным программированием и соединением модульчиков в цепочки.
Идеальная задача для нуба: не самое простое, не самое сложное.
Визуальщину - на том же love2d. Для красивых связей есть кривули безье.

Alex Фэils?︙
12.09.2017
17:50:48

Vadim
12.09.2017
18:24:50

The Dude
12.09.2017
18:55:33

TheRainwildsKeeper
12.09.2017
18:57:02

Google

Snusmumriken
12.09.2017
20:23:39
Ну вот я про то же.
Без оболочек, жс малополезен.
А у тайпскрипта, кстати, самый заебатый синтаксис, из всего что я знаю.

Aydar
12.09.2017
22:03:06
Именно вне браузера

Snusmumriken
12.09.2017
22:07:24
Нода чем не устраивает?

Vadim
12.09.2017
23:20:34
например, v8 и spidermonkey
ну и всякие маргинальные а-ля mujs, duktape, rhimo

The Dude
13.09.2017
06:11:26
Это какой-то смешной аргумент...

Aydar
13.09.2017
06:22:38

The Dude
13.09.2017
07:02:15
Точнее на Блинке в котором в8

Чай
13.09.2017
07:16:02
Смешались в кучу кони, люди.
Blink разве не браузерный движок для отображения веб-страниц?

The Dude
13.09.2017
07:18:13
В составе которого в8

Google

The Dude
13.09.2017
07:18:31
Которые в составе электрона

Чай
13.09.2017
07:18:43
Электрона, а не ноды.
А нода не на в8?
Точнее на Блинке в котором в8

The Dude
13.09.2017
07:19:01
Смешалось немного.

Snusmumriken
13.09.2017
08:16:43
У меня где-то болтается v8 для луа, кек.
Просто выполняем кусок кода:
v8 = require'v8'
v = v8.eval[[
function foo(){
return args[1] + args[2];
};
return foo();
]](10, 20)
Чот такое.
Это только движок, ничего больше.

Рома
13.09.2017
09:00:04
Тут вроде про браузеры и v8, мое мнение нужно.
Браузеры слишком много оперативки кушают! Все, хромиум больше всех, потом фф, потом всякие там.
Это действительно несправедливо!
Надо было писать на си, не на плюсах, не знаю насколько бы стало лучше, но было бы лучше.
И надо было luajit вместо v8! Пусть v8 гордиться оптимизациями, но памяти точно во много раз больше кушает.
Вот какого черта браузер самая тяжелая программа

Snusmumriken
13.09.2017
09:01:05
Браузер - двигатель прогресса.
Если бы он был лёгким, хомячки бы все равно сидели на нищепеках с 2гб оперативки.

Рома
13.09.2017
09:01:15

The Dude
13.09.2017
09:33:00

Aydar
13.09.2017
09:39:42
Не могу понять как в Lua C API поинтеры передать в стек

Snusmumriken
13.09.2017
09:40:39
https://www.lua.org/manual/5.1/manual.html#lua_pushlightuserdata

Aydar
13.09.2017
09:41:07

Snusmumriken
13.09.2017
09:41:46
А что ты на выходе хочешь получить? : )
Поинтер - light userdata. Ты хотел поинтер.

Aydar
13.09.2017
09:42:45

Snusmumriken
13.09.2017
09:44:33

Aydar
13.09.2017
09:45:29
Меня интересует как без ffi так сделать

Alexey
13.09.2017
09:45:45
Передали откуда?

Snusmumriken
13.09.2017
09:45:52
Опачки, а тут же как-то цепляют! Это первая строка на запрос в гугл lua c api metatable.
https://stackoverflow.com/questions/3449759/lua-c-api-and-metatable-functions
Почему ты это не загуглил? ))

Google

Alexey
13.09.2017
09:46:32
Можно просто обернуть указател в full userdata

Aydar
13.09.2017
09:47:26

Alexey
13.09.2017
09:47:46
и если надо по указателю находить объект, то просто таблицу light userdata => full userdata.
Возможно weak

Snusmumriken
13.09.2017
09:47:53
http://lua-users.org/wiki/UserDataExample

Aydar
13.09.2017
09:48:39

Snusmumriken
13.09.2017
09:49:00

Aydar
13.09.2017
09:49:49

Snusmumriken
13.09.2017
09:50:10
Тебе не нужна фулл-юзердата, только поинтер на структуру на сишной стороне, на которую прицеплена метатаблица.
Иначе всякие методы типа __gc не прокатят, и появятся всякие утечки памяти с прочим говном.

Aydar
13.09.2017
09:51:14

Admin
ERROR: S client not available

Alexey
13.09.2017
09:51:18
какие утечки с full userdata?
Надо только определится кто отвечает за уничтожение объекта

Aydar
13.09.2017
09:51:52

Snusmumriken
13.09.2017
09:52:37
Ну как тебе сказать.
foo = require'dynamic_lib'
obj = foo.newObj() -- userdata
obj = nil -> вся юзердата в луа идёт поинтерами. Удалили поинтер но не удалили объект? Радуемся спиду.

Alexey
13.09.2017
09:53:34
у тебя есть указатель на память распределенную гдето.
далее ты оборачиваешь его в full userdata.
далее тебе необходимо определится должна ли эта память освобождатся при
уничтожении full userdata или нет

Snusmumriken
13.09.2017
09:53:59
А каким образом, кроме метода __gc?

Alexey
13.09.2017
09:54:48

Snusmumriken
13.09.2017
09:55:20
Ты на стороне луа что-то удалил, присвоив переменной с указателем на память - nil.
Как об этом узнает сишная сторона?

Alexey
13.09.2017
09:55:35
этот указатель может быть получен из некой библиотеки.
Это может быть указатель с подсчетом ссылок

Snusmumriken
13.09.2017
09:56:38
Предлагаешь сканировать указатели? С какой частотой? В какое время?
Поставить хук на collectgarbage?

Google

Alexey
13.09.2017
09:57:01
Что значит сканировать

Snusmumriken
13.09.2017
09:57:10
Подсчитывать ссылки : )
Ну, их ещё сосчитать надо. А где?
Ну, просто виртуальная луа-машина перехватывает всю сишную сторону, пока не выполнится луа-код (без грязных костылей), поэтому нужно чтобы твоя функция подсчёта ссылок и чистки мусора выполнилась в какой-то момент.
Как вариант - можно добавить плодителю юзердаты функцию clean и дёргать её с луа-стороны, чтобы вычистить мусор, но это - не круто. Нарушает абстракцию.


Alexey
13.09.2017
10:02:50
Реальный пример
Есть некий сервер который на каждый запрос создает новый Lua State.
Этот сервер имеет пул подключений к БД.
При запросе сервер берет подключение из пула и обарачивает его в full userdata.
По завершению запроса сервер удаляет Lua state. Естественно удаляется и full userdata.
При это ни какого удаления памяти не нужно, Просто вернуть указатель в пул,
Про подсчет ссылок.
В момент создания full userdata делаем IncremenCounter(ptr)
в __gc делаем DecrimentCounter(ptr).
ptr это некоторый указатель с подсчетом ссылок.


Snusmumriken
13.09.2017
10:06:02
Ох. Да, это рабочий вариант, но о-о-о-очень узкоспециализированный.
Представь что ты делаешь компьютерную игру.
Тебе нужна ниибацца огромная куча векторов и матриц, с офигенно быстрыми сишными операциями, с битовыми сдвигами и прочей прелестью.
И ты не можешь удалять lua_State.
Векторы плодятся и "удаляются" каждый кадр, 60 раз в секунду. Пусть каждый и весит несколько байт, но за пол часа, допустим, успевает создасться и удалиться тридцать миллионов векторов и матриц, что выливается в 50-100мб памяти. А удалять lua_State ты не можешь.
И ты знаешь? Твой способ - это всё равно что перезагружать компьютер, чтобы закрыть окошки.
Ну, или закрывать фотошоп чтобы закрыть картинку, которую редактируешь в данный момент, иначе она только покажет что закроется. Да, это ближе.
В любом случае, я считаю что библиотеки, которые рассчитаны на такой подход - хуйня.


Alexey
13.09.2017
10:08:44
при чем тут способ как ты создаешь много Lua объектов за которые отвечает сборщик мусора.

Snusmumriken
13.09.2017
10:08:56
А юзердата? За них сборщик мусора не отвечает?

Alexey
13.09.2017
10:09:21
отвечает

Snusmumriken
13.09.2017
10:09:29
А зачем закрывать lua_state, если сборщик всё равно соберёт?
Карочи. Есть такой замечательный метод, называется __gc, я про него уже говорил.
К любой юзердате вешаем метатаблицу с методом __gc, который вызовет сишную функцию удаления (мы сами её пишем) всего связанного с этим объектом в тот момент, когда на эту юзердату не останется поинтеров, и дёрнется сборщик мусора.
Никаких закрывающихся луа-стейтов, только метатаблицы.
Это всё.

Alexey
13.09.2017
10:11:29
я тебя не понимаю.
Задача. Есть объект в C и нужно дать к нему доступ из Lua.
При любых вариантах необходимо создавать объект в Lua.
Будь то full userdata или lighuserdata

Snusmumriken
13.09.2017
10:13:35
Я просто смотрю на бешеные переусложнения, и в голову закрадывается вопрос: "Нахуя так сложно, когда за вас уже всё написали?".
И фулл-юзердата нахрен не всралась из-за этого.
Она вообще нужна только в о-о-о-очень отдельных случаях, я сильно сомневаюсь, что у айдара именно такой.
Он просто придумал переусложнённое решение, и хочет чтобы за него всё сделали.

Alexey
13.09.2017
10:15:38
Удаление объекта в Lua не означает удаление его в системе в целом.
Но да в __gc нужно некоторое освобождение в общем смысле.
__gc это мутаметод => нужна метатаблица => очень желательно использовать full userdata

Snusmumriken
13.09.2017
10:17:25
Если программой рулит луа-код, сишка работает "паровозом" а луа - "машинистом" - удаляя юзердату лучше её удалять из системы финалайзером, попутно, мб, выполняя кучу лишней фигни : )
Ну там, сокеты - лайт-юзердата. Когда ты удаляешь присоединённый сокет - вызываются методы закрывания сокета, изымания аренды у оси и всё такое.

Alexey
13.09.2017
10:17:35
Устанавливать метатаблицы на lightuserdata не очень хорошая идея

Snusmumriken
13.09.2017
10:17:36
Обоснуй фулл-юзердату. Зачем?
Почему устанавливать метатаблицу на лайт - плохая? Типа, если закрывать луа-стейт с лайт-юзердатой с метатаблицей - всё упадёт нафиг и ничего не удалится?
Если дёрнуть сборщик мусора перед закрытием (а он дёргается автоматом) - удалится.

Alexey
13.09.2017
10:19:06

Snusmumriken
13.09.2017
10:19:25
Метатаблица с типом в __index ))