swerg,Так оно не работает, если запустить два разных скрипта, но с одной DLL. У меня при этом остановка одного скрипта, останавливается второй скрипт. Частично в том, чтобы использовать openlib и каждый раз переименовывать библиотеку.
Пользователь
Сообщений: Регистрация: 21.08.2015
17.12.2020 01:10:58
Цитата
swerg написал: мы должны иметь две полных структуры адресов Lua-API функций для разных версий Lua и вставлять проверку в каждую функцию библиотеку, доступную для Lua-скрипта, переключаясь на адреса нужной версии Lua для каждой интерфейсной функции нашей библиотеки....
Вот так в квике и сделано. Есть lua_getglobal51, lua_getglobal53, теперь и lua_getglobal54, и есть lua_getglobalX, которая из переданного стейта выуживает версию и дергает нужный вариант функции. И так все. Сам квик всегда использует lua_*X, для него разницы нет, в какой версии скрипт выполняется, если еще десяток версий добавят, основной код и не заметит. Честно говоря, думал, что это временное-переходное решение, но вот с добавлением 5.4 стало ясно, что так и останется.
Пользователь
Сообщений: Регистрация: 21.08.2015
17.12.2020 06:49:45
Цитата
Александр написал: lua_getextraspace - опять же надо загружать какую-то из этих DLL
Не то чтобы загружать, а получить хэндл. Если длл отсутствует, то и печалиться не о чем, она никак нас не могла запустить. Вот вариант извлечения прицепленной к стейту версии. Возвращает версию числом или 0, если ничего не удалось выудить. На 5.3 и 5.4 попробовал, 5.1 нет под рукой, чисто "а чо ей не работать-то".
И всё же. Волшебно работать с какой-то одной версией - это поможет. А вот с двумя разными одновременно в рамках одной dll...
Пользователь
Сообщений: Регистрация: 21.08.2015
17.12.2020 10:33:34
Цитата
swerg написал: Волшебно работать с какой-то одной версией - это поможет.А вот с двумя разными одновременно в рамках одной dll...
Тоже можно, хотя на самом деле я считаю, что создание одной универсальной длл - это создание себе геморроя. В том числе жаль, что арка пошла по этому пути, а не сделала отдельный плагин под каждую версию луа. Как говорится, сложность программы растет, пока не превысит способностей программиста, так зачем приближать этот момент.
Вставляя проверялку в каждый интерфейсный метод библиотеки, я о чем я и писал сразу. Оно, конечно, затраты на проверялку копеечные - фактически сравнить несколько интов (чем являются указатели) по готовым адресам, особенно если развернуть и убрать вызовы вложенных красивых функций. Но синтаксически все загромождается и загромождается.
Пользователь
Сообщений: Регистрация: 21.08.2015
17.12.2020 11:12:47
Цитата
swerg написал: Вставляя проверялку в каждый интерфейсный метод библиотеки, я о чем я и писал сразу.
Да. Вот такой адок получается
Пользователь
Сообщений: Регистрация: 21.02.2015
17.12.2020 13:20:20
Anton,Ни во всех версиях квика в луа библиотеке есть luaI_getextraspace swerg, Первый способ: сделать 2 разные библиотеки для разных версий DLL. Второй способ: сохранить указатели для каждой версии Lua DLL (сделать struct с указателями). И в колбеках проверять, в какой версии Lua запущена библиотека и брать указатели (как вы и писали).
Пользователь
Сообщений: Регистрация: 21.02.2015
17.12.2020 13:23:09
Anton,За способ определения версии спасибо. Проверил, рабочий.
написал: Хотелось бы уточнить у тех. поддержки про новую версию 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?
Ну и что что баги и так сойдет ведь работа уже почти закончена))
Lua 5.4.2
No bugs have been reported.
Lua 5.4.1
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
Пользователь
Сообщений: Регистрация: 07.12.2020
Трейдер
17.12.2020 18:18:40
Придется переделывать
Пользователь
Сообщений: Регистрация: 07.12.2020
Трейдер
17.12.2020 18:19:31
Пользователь
Сообщений: Регистрация: 30.01.2015
Роботорговец
17.12.2020 18:58:45
Цитата
Евгений написал: Key removed from a table during traversal may not be accepted by 'next'.
Очень похоже:
Цитата
TGB написал: при существующей архитектуре обработки событий в QLua, уборка мусора в нем должна быть потокобезопасной
Наверное, придётся согласиться ))
Надо делать так, как надо. А как не надо - делать не надо.
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 запущен скрипт и к какой версии библиотеки подключаться?
С нашей стороны решения для данной задачи не предусмотрено. Можем зарегистрировать Ваше пожелание на доработку.
Пользователь
Сообщений: Регистрация: 21.02.2015
18.12.2020 10:28:10
Цитата
Andrey Bezrukov написал: С нашей стороны решения для данной задачи не предусмотрено. Можем зарегистрировать Ваше пожелание на доработку.
Решение, описанное выше, вполне подходит. Можно его сделать основным. Да сделайте.
Пользователь
Сообщений: Регистрация: 12.05.2020
18.12.2020 11:01:10
Цитата
Andrey Bezrukov написал: Для прочих функций мы не гарантируем потокобезопасность.
А для колбеков вы гарантируете их потокобезопасность? Они же выполняются в отдельном потоке, в контексте скрипта пользователя, в котором работает и поток main. А если если гарантируете, то чем?
Пользователь
Сообщений: Регистрация: 07.12.2020
Трейдер
18.12.2020 12:07:08
Цитата
Евгений написал: При сворачивании нижней области индикатора на графике исчезает шкала
Вот на это обратите внимание
Пользователь
Сообщений: Регистрация: 28.03.2016
18.12.2020 12:54:00
Цитата
...
Вы не ответили на мои вопросы: 1. В будущем будет строгий переход на 5.4 или поддержка 5.3 останется надолго? 2. Все-таки 5.4.1 или 5.4.2? 3. Я представил ссылку
С помощью данного инструментария можно компилировать скрипты для QUIK lua версии 5.4?
- Роботы и индикаторы
QUIK clients support
Сообщений: Регистрация: 18.04.2019
21.12.2020 06:46:07
Александр, Ваше пожелание зарегистрировано. Мы постараемся рассмотреть его и сообщить Вам результаты анализа. Впоследствии, по результатам анализа, будет приниматься решение о реализации пожелания в будущих версиях ПО. TGB, Именно для callback-функций потокобезопасность и гарантируется. Предлагаем ознакомиться с разделом 8 документации к интерпретатору LUA – «Потокобезопасные функции для работы с таблицами». Евгений, Ваше сообщение получено, проблема изучается. Постараемся в ближайшее время дать ответ. Александр М, 1. В настоящем информации по данному вопросу нет. 2. Сейчас предусмотрена работа скриптов на lua5.3.5 и lua5.4.1. Если Вас интересует поддержка более поздних версий, например, lua5.4.2 – можем зарегистрировать Ваше пожелание. Регистрируем? 3. Данный вопрос предлагаем уточнить непосредственно у разработчиков данного инструментария с учётом того, что, по всей видимости, он предусматривает совместимость с lua5.4.0. Другой вариант – проверить совместимость самостоятельно, на практике. В случае подозрения на некорректную работу со стороны интерпретатора LUA в терминале QUIK – пожалуйста, сообщите. По вопросам эксплуатации представленных библиотек также предлагаем обращаться к их непосредственным разработчикам.
Пользователь
Сообщений: Регистрация: 28.03.2016
21.12.2020 09:30:20
Цитата
Andrey Bezrukov написал: 3. Данный вопрос предлагаем уточнить непосредственно у разработчиков данного инструментария с учётом того, что, по всей видимости, он предусматривает совместимость с lua5.4.0. Другой вариант – проверить совместимость самостоятельно, на практике. В случае подозрения на некорректную работу со стороны интерпретатора LUA в терминале QUIK – пожалуйста, сообщите. По вопросам эксплуатации представленных библиотек также предлагаем обращаться к их непосредственным разработчикам.
Это не библиотеки, это стандартный компилятор Lua. Когда я у Вас спрашивал про точно такой-же аналогичный, но по версии 5.3.5, Вы отвечали, что именно им и пользуетесь для компиляции. Если по данному компилятору (по версии 5.4) Вы ответить не можете, то укажите, каким ПО компилировать скрипты под Вашу версию 5.4.1.
- Роботы и индикаторы
Пользователь
Сообщений: Регистрация: 02.02.2015
21.12.2020 15:38:26
Возможно не в тему, но сам искал где же взять этот самый lua 5.4.1, на lua.org не нашел, но гугл выдал таки одну ссылку:
Пользователь
Сообщений: Регистрация: 02.02.2015
21.12.2020 15:40:22
И да, мой скрипт, скомпилированный win64 компилятором взятым по ссылке выше, работает с выбором 5.4.1 в квике, и в параметрах самого скрипта также отображается эта версия.
Пользователь
Сообщений: Регистрация: 28.03.2016
21.12.2020 16:17:09
Цитата
ISR написал: Возможно не в тему, но сам искал где же взять этот самый lua 5.4.1, на lua.org не нашел, но гугл выдал таки одну ссылку:
Несколько смущают размеры файлов по Вашей ссылке, они раза в 2 отличаются от тех, что по официальной ссылке. Для примера картинка файлов официальных версий 5.35 и 5.40:
- Роботы и индикаторы
Пользователь
Сообщений: Регистрация: 02.02.2015
21.12.2020 22:14:59
Цитата
Александр М написал: Несколько смущают размеры файлов по Вашей ссылке
Согласен, меня то же смутил этот момент, как будто скомпилировано в дебаг'е (с информацией для отладки), но размер может быть увеличен и по каким то еще причинам. Но тем не менее скомпилированный скрипт работает. Разрабам квика все же, на мой взгляд, стоило бы заботиться о клиенте, можно было бы ссылку в доку добавить, или вовсе win32/64 компиляторы подкинуть, благо пока они места много не едят. По самой работе же 8.11 и моим скриптом скомпиленым под 5.4.1. за сегодня еще ни разу не упало, в то время как на предыдущей версии 8.09 по нескольку раз за день, устал уже перезапускать.
Пользователь
Сообщений: Регистрация: 21.08.2015
22.12.2020 05:44:10
Цитата
ISR написал: как будто скомпилировано в дебаг'е (с информацией для отладки)
написал: Несколько смущают размеры файлов по Вашей ссылке
Согласен, меня то же смутил этот момент, как будто скомпилировано в дебаг'е (с информацией для отладки), но размер может быть увеличен и по каким то еще причинам. Но тем не менее скомпилированный скрипт работает. Разрабам квика все же, на мой взгляд, стоило бы заботиться о клиенте, можно было бы ссылку в доку добавить, или вовсе win32/64 компиляторы подкинуть, благо пока они места много не едят. По самой работе же 8.11 и моим скриптом скомпиленым под 5.4.1. за сегодня еще ни разу не упало, в то время как на предыдущей версии 8.09 по нескольку раз за день, устал уже перезапускать.
Все-таки хотелось бы получить официальный ответ от разработчиков, по поводу компилятора под их версию lua.
По моим наблюдениям на сегодняшний день самая стабильная версия 8.8.4.3, у меня ни разу не упала, работает круглосуточно.
- Роботы и индикаторы
Пользователь
Сообщений: Регистрация: 21.08.2015
22.12.2020 11:32:44
Так-то компилятор (одного файла) выглядит вот так и запускается в самом квике (куда уж совместимее-то)
Код
-- 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
Пользователь
Сообщений: Регистрация: 30.01.2015
22.12.2020 13:07:45
Неинтересный вариант. Его нельзя в bat файл засунуть
Пасхалочка для Алексея Иванникова:
Пользователь
Сообщений: Регистрация: 30.01.2015
Роботорговец
22.12.2020 13:13:04
Цитата
Anton написал: Так-то компилятор (одного файла) выглядит вот так и запускается в самом квике
Скомпилил библиотеку в 4к строк данным скриптом и в luac54.exe по ссылке . Результаты совпадают до байта.
Надо делать так, как надо. А как не надо - делать не надо.
Anton написал: А если нет разницы, зачем платить больше )
Интересный вариант, спасибо за инфу :)
2ARQA: Насчет работы квика 8.11 - вроде не падает, но кажется как будто ресурсов жрет многовато: 1.5Гига памяти и 20-30% проца (I5 из первых) сразу после старта и далее не снижается (15 вкладок 46 окон).
Пользователь
Сообщений: Регистрация: 02.02.2015
миру мир!
22.12.2020 16:45:45
Цитата
s_mike@rambler.ru написал: Неинтересный вариант. Его нельзя в bat файл засунуть
Александр М написал: укажите, каким ПО компилировать скрипты под Вашу версию 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. Рекомендуем вам обновить версию программы.
Приносим извинения за причиненные неудобства.
Пользователь
Сообщений: Регистрация: 27.01.2017
30.01.2021 19:04:25
Ни у кого не было проблем с подключением dll, собранных под 5.4?
Я собрал одну библиотеку, в чистом lua она работает корректно. При подключении к Квик получаю ACCESS VIOLATION.
include файлы и lua54.lib взято с оф. сайта lua. Правда там нет 5.4.1, только 5.4.0 release 2 и 1
Пользователь
Сообщений: Регистрация: 12.05.2020
30.01.2021 19:34:29
Цитата
Nikolay написал: include файлы и lua54.lib взято с оф. сайта lua.
Не точно, но возможно, вы взяли статическую библиотеку lua54.lib (~300 кб.). Надо использовать библиотеку импорта dll lua54.lib (~30 кб.) с тем, чтобы использовались функции QUIK из его lua54.dll. Либо надо самому создать библиотеку импорта lua54.lib, используя lua54.dll из QUIK.
Пользователь
Сообщений: Регистрация: 27.01.2017
30.01.2021 19:37:04
Пришлось собрать lua, чтобы заработало. Да уж. Опять возникает вопрос: ну почему не 5.4.2, на который уже есть бинарники.
написал: include файлы и lua54.lib взято с оф. сайта lua.
Не точно, но возможно, вы взяли статическую библиотеку lua54.lib (~300 кб.). Надо использовать библиотеку импорта dll lua54.lib (~30 кб.) с тем, чтобы использовались функции QUIK из его lua54.dll. Либо надо самому создать библиотеку импорта lua54.lib, используя lua54.dll из QUIK.
Возможно. Но, как написал, просто сам собрал.
Пользователь
Сообщений: Регистрация: 02.02.2015
миру мир!
31.01.2021 07:25:28
Цитата
Nikolay написал: Ни у кого не было проблем с подключением dll, собранных под 5.4? Я собрал одну библиотеку, в чистом lua она работает корректно. При подключении к Квик получаю ACCESS VIOLATION.
написал: 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
Пользователь
Сообщений: Регистрация: 03.02.2021
09.03.2021 22:14:23
Собрал всё для Lua 5.4 а QUIK по-умолчанию запускает под 5.3. Вопрос снят, всё работает.