Вопросы по использованию FFI

Столкнулись с проблемой в использовании макросов? Здесь можно получить помощь.
gotar
Posts: 293
Joined: Sun 06 Sep, 2009 12:34
Has thanked: 8 times

Вопросы по использованию FFI

Post by gotar » Tue 23 Aug, 2016 17:16

Latest post of the previous page:

Теперь у меня ругается на :

Code: Select all

    ╔═════════════════════════════ LuaMacro ══════════════════════════════╗
    ║ \\?\E:\1\pal.lua:19: unexpected symbol near 'LF_FACESIZE' at line 8 ║
    ║ stack traceback:                                                    ║
    ║    [C]: in function 'cdef'                                          ║
    ║    \\?\E:\1\pal.lua:19: in main chunk                               ║
    ╟─────────────────────────────────────────────────────────────────────╢
    ║                               { OK }                                ║
─   ╚═════════════════════════════════════════════════════════════════════╝
Поиск гуглом на LF_FACESIZE не дал определения этой константы. В winapi.lua ее тоже нет. Может кто нибудь найдет у себя чему она равна.

2useven10
Posts: 2953
Joined: Mon 07 Sep, 2009 10:40
Has thanked: 2 times
Been thanked: 77 times

Ликбез по Lua

Post by 2useven10 » Tue 23 Aug, 2016 17:25

gotar wrote: Поиск гуглом на LF_FACESIZE не дал определения этой константы.
В первой же ссылке = 32.
Искать лучше в актуальных хидерах MS.
VS может найти значение за вас.

gotar
Posts: 293
Joined: Sun 06 Sep, 2009 12:34
Has thanked: 8 times

Ликбез по Lua

Post by gotar » Tue 23 Aug, 2016 17:33

Спасибо. У меня первая ссылка про VisualBasic. Добавление в строку поиска windows.h результата не дало

gotar
Posts: 293
Joined: Sun 06 Sep, 2009 12:34
Has thanked: 8 times

Ликбез по Lua

Post by gotar » Tue 23 Aug, 2016 17:51

То что в winapi.lua не нашлось определения UINT и WCHAR это только у меня или у всех?

User avatar
John Doe
Бюрократ
Posts: 11074
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 11 times
Been thanked: 64 times

Вопросы по использованию FFI

Post by John Doe » Tue 23 Aug, 2016 18:51

gotar
Только у вас

Shmuel
Posts: 5040
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 11 times
Been thanked: 133 times

Вопросы по использованию FFI

Post by Shmuel » Sun 02 Oct, 2016 17:05

У меня (уже давно) есть макрофайл, вызывающий изредка падение Far. Я уже голову сломал, что это может быть, единственно, что удалось видоизменить его так, что падение происходит практически гарантированно:

Для падения нужно из панели, содержащей не менее 20 папок или файлов с комстроки вызвать
lua:for k=1,300 do Panel.SetCustomSortMode(500) end
Вроде не вижу криминала в скрипте. Может у кого-нибудь возникнет идея, что с этим делать или как продебаггировать.

Shmuel
Posts: 5040
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 11 times
Been thanked: 133 times

Вопросы по использованию FFI

Post by Shmuel » Mon 03 Oct, 2016 11:24

По поводу предыдущего поста - есть продвижение в понимании проблемы.
Выполнение любого одного из следующих двух пунктов прекращает падения:

1. Запрет сборки мусора (lua:collectgarbage"stop").
2. Вставка в начало ф-ции Compare строки local foo = rsm.

Таким образом ясно, что падение вызывается освобождением величины rsm сборщиком мусора. Но возникает вопрос: какое право сборщик мусора имеет это делать, при том, что rsm является upvalue функции Compare, пусть даже она и не производит к нему доступа через Lua ???

Shmuel
Posts: 5040
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 11 times
Been thanked: 133 times

Вопросы по использованию FFI

Post by Shmuel » Mon 03 Oct, 2016 15:44

Всё, вопрос закрыт. Почему-то я был уверен, что величине достаточно быть upvalue у какой-то живой функции, чтобы спастись от сборщика мусора. Оказывается нет, если к величине нет обращений. Ниже следует пример (запускать из-под lua.exe (Lua 5.1) или luajit.exe).

Code: Select all

-- File 1: sum.lua
local pr = newproxy(true)
getmetatable(pr).__gc = function(o) io.write("__gc:",tostring(o),'\n') end
local function sum(a,b) return a+b end
return sum

Code: Select all

-- File 2: test.lua
local sum = dofile "sum.lua"
print(sum(3,4))
collectgarbage"collect"
print(sum(-3,-4))
Запускаем test.lua и видим, что величина pr подбирается сборщиком мусора, несмотря на то, что является upvalue функции sum.

User avatar
Aidar
Posts: 524
Joined: Mon 09 Mar, 2009 22:43
Location: Kazan
Has thanked: 7 times
Been thanked: 6 times
Contact:

Вопросы по использованию FFI

Post by Aidar » Mon 03 Oct, 2016 16:05

Спасибо за информацию.
Вот полезная ссылка по теме: upvalue memory leak в LuaJIT.

Shmuel
Posts: 5040
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 11 times
Been thanked: 133 times

Вопросы по использованию FFI

Post by Shmuel » Mon 03 Oct, 2016 17:15

Aidar, спасибо за ссылку.
Меня сейчас (справедливо) поправили, что объявление переменной во внешнем окружении функции ещё не делает эту переменную upvalue.

User avatar
John Doe
Бюрократ
Posts: 11074
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 11 times
Been thanked: 64 times

Вопросы по использованию FFI

Post by John Doe » Mon 03 Oct, 2016 19:16

Shmuel wrote: величине достаточно быть upvalue у какой-то живой функции, чтобы спастись от сборщика мусора.
Действительно неочевидный случай.
Будь RS lua-таблицей, обсуждаемая величина не была бы собрана сборщиком.

Впрочем, в документации предупреждали http://luajit.org/ext_ffi_semantics.html#gc

Shmuel
Posts: 5040
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 11 times
Been thanked: 133 times

Вопросы по использованию FFI

Post by Shmuel » Mon 03 Oct, 2016 20:12

John Doe wrote: Впрочем, в документации предупреждали http://luajit.org/ext_ffi_semantics.html#gc
Это совсем не тот материал из-за недопонимания которого я потратил много времени.

User avatar
John Doe
Бюрократ
Posts: 11074
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 11 times
Been thanked: 64 times

Вопросы по использованию FFI

Post by John Doe » Mon 03 Oct, 2016 21:00

Это я отвечал сам себе

Post Reply

Return to “Нужна помощь”

Who is online

Users browsing this forum: Bing [Bot] and 3 guests