swerg,Так оно не работает, если запустить два разных скрипта, но с одной DLL. У меня при этом остановка одного скрипта, останавливается второй скрипт. Частично в том, чтобы использовать openlib и каждый раз переименовывать библиотеку.
swerg написал: мы должны иметь две полных структуры адресов Lua-API функций для разных версий Lua и вставлять проверку в каждую функцию библиотеку, доступную для Lua-скрипта, переключаясь на адреса нужной версии Lua для каждой интерфейсной функции нашей библиотеки....
Вот так в квике и сделано. Есть lua_getglobal51, lua_getglobal53, теперь и lua_getglobal54, и есть lua_getglobalX, которая из переданного стейта выуживает версию и дергает нужный вариант функции. И так все. Сам квик всегда использует lua_*X, для него разницы нет, в какой версии скрипт выполняется, если еще десяток версий добавят, основной код и не заметит. Честно говоря, думал, что это временное-переходное решение, но вот с добавлением 5.4 стало ясно, что так и останется.
Александр написал: lua_getextraspace - опять же надо загружать какую-то из этих DLL
Не то чтобы загружать, а получить хэндл. Если длл отсутствует, то и печалиться не о чем, она никак нас не могла запустить. Вот вариант извлечения прицепленной к стейту версии. Возвращает версию числом или 0, если ничего не удалось выудить. На 5.3 и 5.4 попробовал, 5.1 нет под рукой, чисто "а чо ей не работать-то".
swerg написал: Волшебно работать с какой-то одной версией - это поможет.А вот с двумя разными одновременно в рамках одной dll...
Тоже можно, хотя на самом деле я считаю, что создание одной универсальной длл - это создание себе геморроя. В том числе жаль, что арка пошла по этому пути, а не сделала отдельный плагин под каждую версию луа. Как говорится, сложность программы растет, пока не превысит способностей программиста, так зачем приближать этот момент.
Вставляя проверялку в каждый интерфейсный метод библиотеки, я о чем я и писал сразу. Оно, конечно, затраты на проверялку копеечные - фактически сравнить несколько интов (чем являются указатели) по готовым адресам, особенно если развернуть и убрать вызовы вложенных красивых функций. Но синтаксически все загромождается и загромождается.
Anton,Ни во всех версиях квика в луа библиотеке есть luaI_getextraspace swerg, Первый способ: сделать 2 разные библиотеки для разных версий DLL. Второй способ: сохранить указатели для каждой версии Lua DLL (сделать struct с указателями). И в колбеках проверять, в какой версии Lua запущена библиотека и брать указатели (как вы и писали).
swerg написал: Хотелось бы уточнить у тех. поддержки про новую версию 8.11:
1) Зачем остался в дистрибутиве (в обновлении) файл lua5.1.dll ? как он функционирует?! Вроде его планировали убрать.
2) В списке исправленных недоработок есть несколько пунктов про Lua (пункты 10, 11, 12, 13) Подразумевается, что указанные в них проблемы исправятся только при использовании Lua 5.4 ? или для Lua 5.3 они исправлены тоже?
1. Поддерживаю, не понятно для какой именно версии lua исправлены ошибки, перечисленные в списке обновлений. 2. Выбор версии Lua будет Вами поддерживаться и дальше или с какой-то версии вы перейдете строго на Lua 5.4.1? 3. Почему не 5.4.2?
Ну и что что баги и так сойдет ведь работа уже почти закончена))
Key removed from a table during traversal may not be accepted by 'next'. reported by Xmilia Hermit on 11 Oct 2020. existed since 5.4.0. fixed in 5.4.2.
Example:
t = {} t["no" .. "ref1"] = 1 t["no" .. "ref2"] = 2 for k, v in pairs(t) do t[k] = nil print(k, v) collectgarbage("collect") end
swerg написал: 1) Зачем остался в дистрибутиве (в обновлении) файл lua5.1.dll ? как он функционирует?!
В данную библиотеку не было привнесено каких-либо изменений, она по-прежнему присутствует в дистрибутивах условно, использовать её на новых версиях терминала невозможно, в будущем планируется исключить её.
Цитата
swerg написал: 2) В списке исправленных недоработок есть несколько пунктов про Lua (пункты 10, 11, 12, 13)Подразумевается, что указанные в них проблемы исправятся только при использовании Lua 5.4 ? или для Lua 5.3 они исправлены тоже?
П.10 исправлен только в lua54.dll, прочие доработки выполнены и для lua54.dll и для lua53.dll. Андрей,
Цитата
Андрей написал: В новом квике 8.11 не сохраняется checkbox "Получать обезличенные сделки с момента подключения", если нажать его и в этом же окне сохранить. Но сохраняется если перейти в другое окно и там нажать сохранить.(Настройки клиентского места-Программа-Получение данных-Обезличенные сделки)
Ваше обращение получено, проблема изучается. Постараемся в ближайшее время дать ответ. Старатель,
Цитата
Старатель написал: Lua 5.3.5 в QUIK 8.11 в этом тесте падает с ошибкой
Для библиотеки lua53.dll было устранено зависание рабочего места, однако причину ошибку ACCESS_VIOLATION in script удалось устранить только в lua54.dll. TGB,
Цитата
TGB написал: Новая версия QUIK 8.11.0.66 (QLua 5.3) продолжает «падать» ( CQ02750791, CQ02779753, CQ02787899. CQ02802279) (CQ02809006) Могу прислать поддержке дампы.
Просьба прислать новые полученные файлы *.dmp для анализа. Заранее большое спасибо.
Цитата
TGB написал: 1) ответьте, пожалуйста, зачем устраиваются скачки с новыми версиями Lua (очередная 5.4)? Какие проблемы при этом решаются? 2) есть ли понимание у разработчиков QUIK, что при существующей архитектуре обработки событий в QLua, уборка мусора в нем должна быть потокобезопасной?
1) Переход на новые версии LUA позволяет исключить необходимость/предоставляет возможность исправлять проблемы, обусловленные недоработками и не оптимальностями, характерными для устаревшей версии. 2) Для обеспечения потокобезопасности Вы можете использовать заранее подготовленные функции для работы с таблицами LUA, которые гарантируют потокобезопасность. Эти функции приведены руководстве по QLUA в разделе 8 – «Потокобезопасные функции для работа с таблицами Lua». Для прочих функций мы не гарантируем потокобезопасность. Александр,
Цитата
Александр написал: Вопрос к разработчикам, как понять в Lua Api в какой версии lua запущен скрипт и к какой версии библиотеки подключаться?
С нашей стороны решения для данной задачи не предусмотрено. Можем зарегистрировать Ваше пожелание на доработку.
Andrey Bezrukov написал: Для прочих функций мы не гарантируем потокобезопасность.
А для колбеков вы гарантируете их потокобезопасность? Они же выполняются в отдельном потоке, в контексте скрипта пользователя, в котором работает и поток main. А если если гарантируете, то чем?
Александр, Ваше пожелание зарегистрировано. Мы постараемся рассмотреть его и сообщить Вам результаты анализа. Впоследствии, по результатам анализа, будет приниматься решение о реализации пожелания в будущих версиях ПО. TGB, Именно для callback-функций потокобезопасность и гарантируется. Предлагаем ознакомиться с разделом 8 документации к интерпретатору LUA – «Потокобезопасные функции для работы с таблицами». Евгений, Ваше сообщение получено, проблема изучается. Постараемся в ближайшее время дать ответ. Александр М, 1. В настоящем информации по данному вопросу нет. 2. Сейчас предусмотрена работа скриптов на lua5.3.5 и lua5.4.1. Если Вас интересует поддержка более поздних версий, например, lua5.4.2 – можем зарегистрировать Ваше пожелание. Регистрируем? 3. Данный вопрос предлагаем уточнить непосредственно у разработчиков данного инструментария с учётом того, что, по всей видимости, он предусматривает совместимость с lua5.4.0. Другой вариант – проверить совместимость самостоятельно, на практике. В случае подозрения на некорректную работу со стороны интерпретатора LUA в терминале QUIK – пожалуйста, сообщите. По вопросам эксплуатации представленных библиотек также предлагаем обращаться к их непосредственным разработчикам.
Andrey Bezrukov написал: 3. Данный вопрос предлагаем уточнить непосредственно у разработчиков данного инструментария с учётом того, что, по всей видимости, он предусматривает совместимость с lua5.4.0. Другой вариант – проверить совместимость самостоятельно, на практике. В случае подозрения на некорректную работу со стороны интерпретатора LUA в терминале QUIK – пожалуйста, сообщите. По вопросам эксплуатации представленных библиотек также предлагаем обращаться к их непосредственным разработчикам.
Это не библиотеки, это стандартный компилятор Lua. Когда я у Вас спрашивал про точно такой-же аналогичный, но по версии 5.3.5, Вы отвечали, что именно им и пользуетесь для компиляции. Если по данному компилятору (по версии 5.4) Вы ответить не можете, то укажите, каким ПО компилировать скрипты под Вашу версию 5.4.1.
Возможно не в тему, но сам искал где же взять этот самый lua 5.4.1, на lua.org не нашел, но гугл выдал таки одну ссылку: https://joedf.ahkscript.org/LuaBuilds/
И да, мой скрипт, скомпилированный win64 компилятором взятым по ссылке выше, работает с выбором 5.4.1 в квике, и в параметрах самого скрипта также отображается эта версия.
ISR написал: Возможно не в тему, но сам искал где же взять этот самый lua 5.4.1, на lua.org не нашел, но гугл выдал таки одну ссылку: https://joedf.ahkscript.org/LuaBuilds/
Несколько смущают размеры файлов по Вашей ссылке, они раза в 2 отличаются от тех, что по официальной ссылке. Для примера картинка файлов официальных версий 5.35 и 5.40:
Александр М написал: Несколько смущают размеры файлов по Вашей ссылке
Согласен, меня то же смутил этот момент, как будто скомпилировано в дебаг'е (с информацией для отладки), но размер может быть увеличен и по каким то еще причинам. Но тем не менее скомпилированный скрипт работает. Разрабам квика все же, на мой взгляд, стоило бы заботиться о клиенте, можно было бы ссылку в доку добавить, или вовсе win32/64 компиляторы подкинуть, благо пока они места много не едят. По самой работе же 8.11 и моим скриптом скомпиленым под 5.4.1. за сегодня еще ни разу не упало, в то время как на предыдущей версии 8.09 по нескольку раз за день, устал уже перезапускать.
Александр М написал: Несколько смущают размеры файлов по Вашей ссылке
Согласен, меня то же смутил этот момент, как будто скомпилировано в дебаг'е (с информацией для отладки), но размер может быть увеличен и по каким то еще причинам. Но тем не менее скомпилированный скрипт работает. Разрабам квика все же, на мой взгляд, стоило бы заботиться о клиенте, можно было бы ссылку в доку добавить, или вовсе win32/64 компиляторы подкинуть, благо пока они места много не едят. По самой работе же 8.11 и моим скриптом скомпиленым под 5.4.1. за сегодня еще ни разу не упало, в то время как на предыдущей версии 8.09 по нескольку раз за день, устал уже перезапускать.
Все-таки хотелось бы получить официальный ответ от разработчиков, по поводу компилятора под их версию lua.
По моим наблюдениям на сегодняшний день самая стабильная версия 8.8.4.3, у меня ни разу не упала, работает круглосуточно.
Так-то компилятор (одного файла) выглядит вот так и запускается в самом квике (куда уж совместимее-то)
Код
-- compilation arguments
local srcname = getScriptPath() .. '\\test.lua'
local dstname = getScriptPath() .. '\\test.out'
local strip_debug_info = false
-- the compiler itself
function main()
local chunk, err = loadfile(srcname, 't')
if nil == chunk then
error('Compilation error:\n' .. err)
end
local bin = string.dump(chunk, strip_debug_info)
local f = io.open(dstname, 'wb')
if nil == f then
error('Unable to create the destination file')
end
f:write(bin)
f:flush()
f:close()
end
Anton написал: А если нет разницы, зачем платить больше )
Интересный вариант, спасибо за инфу :)
2ARQA: Насчет работы квика 8.11 - вроде не падает, но кажется как будто ресурсов жрет многовато: 1.5Гига памяти и 20-30% проца (I5 из первых) сразу после старта и далее не снижается (15 вкладок 46 окон).
Александр М написал: укажите, каким ПО компилировать скрипты под Вашу версию 5.4.1.
Каких-либо строгих требований к используемому компилятору со стороны lua5.4.1 в QUIK, кроме совместимости версий - нет, соответственно, можно использовать любой компилятор, который считаете подходящим в остальных отношениях.
ISR написал: 2ARQA: Насчет работы квика 8.11 - вроде не падает, но кажется как будто ресурсов жрет многовато: 1.5Гига памяти и 20-30% проца (I5 из первых) сразу после старта и далее не снижается (15 вкладок 46 окон).
Просьба уточнить, какие конфигурации сравниваете? QUIK 8.11 + lua5.4.1 (или ua5.3.5?) и QUIK 8.8.4 + lua5.3.5, верно, или иная конфигурация? Есть ли возможность снять файлы дампа с info.exe в процессе работы терминала и скриптов в нём, во время роста потребления памяти и прислать их нам для анализа? Если это возможно - просьба также предоставить минимальные и достаточные для воспроизведения фрагменты используемых скриптов и архив рабочего места без ключей. Запрошенные данные просьба присылать по адресу quiksupport@arqatech.com со ссылкой на данную ветку форума. Заранее большое спасибо.
Евгений написал: При сворачивании нижней области индикатора на графике исчезает шкала
Вот на это обратите внимание
Добрый день! Ошибка, описанная в данном инциденте, будет исправлена в одной из очередных версий программы.Приносим извинения за причиненные неудобства.
Андрей написал: В новом квике 8.11 не сохраняется checkbox "Получать обезличенные сделки с момента подключения", если нажать его и в этом же окне сохранить. Но сохраняется если перейти в другое окно и там нажать сохранить.(Настройки клиентского места-Программа-Получение данных-Обезличенные сделки)
Описанная в данном инциденте ошибка была исправлена в версии 8.12.0 терминала QUIK. Рекомендуем вам обновить версию программы.
Nikolay написал: include файлы и lua54.lib взято с оф. сайта lua.
Не точно, но возможно, вы взяли статическую библиотеку lua54.lib (~300 кб.). Надо использовать библиотеку импорта dll lua54.lib (~30 кб.) с тем, чтобы использовались функции QUIK из его lua54.dll. Либо надо самому создать библиотеку импорта lua54.lib, используя lua54.dll из QUIK.
Nikolay написал: include файлы и lua54.lib взято с оф. сайта lua.
Не точно, но возможно, вы взяли статическую библиотеку lua54.lib (~300 кб.). Надо использовать библиотеку импорта dll lua54.lib (~30 кб.) с тем, чтобы использовались функции QUIK из его lua54.dll. Либо надо самому создать библиотеку импорта lua54.lib, используя lua54.dll из QUIK.
Nikolay написал: Ни у кого не было проблем с подключением dll, собранных под 5.4? Я собрал одну библиотеку, в чистом lua она работает корректно. При подключении к Квик получаю ACCESS VIOLATION.
Nikolay написал: include файлы и lua54.lib взято с оф. сайта lua.
Не точно, но возможно, вы взяли статическую библиотеку lua54.lib (~300 кб.). Надо использовать библиотеку импорта dll lua54.lib (~30 кб.) с тем, чтобы использовались функции QUIK из его lua54.dll. Либо надо самому создать библиотеку импорта lua54.lib, используя lua54.dll из QUIK.
Возможно. Но, как написал, просто сам собрал.
Собрал Lua 5.4.1, не работает. Файл lua54.lib производится динамический (30кб). Использовал вот такой скрипт:
Код
cl /MD /O2 /c /DLUA_BUILD_AS_DLL *.c
ren lua.obj lua.o
ren luac.obj luac.o
link /DLL /IMPLIB:lua54.lib /OUT:lua54.dll *.obj
link /OUT:lua.exe lua.o lua54.lib
lib /OUT:lua54-static.lib *.obj
link /OUT:luac.exe luac.o lua54-static.lib