Название: "Умные" переменные в срипте Отправлено: SASA от Сентябрь 12, 2008, 19:49 Здравствуйте.
Появилась необходимость добавить в скриптИнжин переменную, и отслеживать её изменение. Например, переменная называется variable. При исполнении скрипта Код: variable = 123; Сделал классик СVariable, наследовал его от QObject, перекрыл оператор присваивания operator=(int). Добавил в скриптИнжин объект СVariable с именем variable. Всё хорошо – скрипт говорит, что такая переменная объявлена. Но во время исполнения скрипта Код: variable = 123; Код: class СVariable: public QObject Название: Re: "Умные" переменные в срипте Отправлено: yoyo от Октябрь 01, 2008, 09:18 Первое, что бросается в глаза:
m_ScriptEngine ->globalObject().setProperty(variable,ScriptElem) может надо: m_ScriptEngine ->globalObject().setProperty("variable",ScriptElem) Второе, опять же не уверен, переопределение оператора присваивания для своего объекта никак не связано с операцией присваивания в скрипте. Поэтому следует, например, расширить свой объект свойством Q_PROPERTY(int val WRITE setVal READ getVal) и обращаться к объекту variable.val = 123; Название: Re: "Умные" переменные в срипте Отправлено: SASA от Октябрь 09, 2008, 11:34 Цитировать Первое, что бросается в глаза: Да, конечно. Это просто описка.m_ScriptEngine ->globalObject().setProperty(variable,ScriptElem) может надо: m_ScriptEngine ->globalObject().setProperty("variable",ScriptElem) Цитировать Поэтому следует, например, расширить свой объект свойством К сожалению, этот способ не подходит. Q_PROPERTY(int val WRITE setVal READ getVal) и обращаться к объекту variable.val = 123; Я уже склонен думать о невозможности создания таких переменных. Т.к. скриптовый язык не типизирован. Пытался читать стандарт языка – ни чего не понял. Пишу в надежде, что кто-то просветит.:) Название: Re: "Умные" переменные в срипте Отправлено: ритт от Октябрь 09, 2008, 14:59 > кто-то просветит
рентгеном, что ли? ) согласен. фича была бы полезна - кто-нибудь хочет отправить саггест троллям? :) как-то не придёмывается как эту задачу можно решить по-умному, зато вмиг придумалось как решить тупо :) таймер упд. только что подумалось, что в в ас2/3 можно делать такое, но для этого нужно запустить слежение за неким свойством (все переменные там фактически являются свойствами рута или контекста). а слежение-то по сути и есть сеттер+геттер+таймер+сигнал :) Название: Re: "Умные" переменные в срипте Отправлено: SASA от Октябрь 09, 2008, 18:43 А что-такое ас2/3???
Название: Re: "Умные" переменные в срипте Отправлено: ритт от Октябрь 09, 2008, 18:57 "акшен скрипт" (или "актив скрипт"?) - убогий скриптовый язык, используемый в технологии флэш
Название: Re: "Умные" переменные в срипте Отправлено: Tonal от Октябрь 09, 2008, 19:11 Вообще-то вырос из того же стандарта, что и QScript, так что не сильно и убог. :)
Название: Re: "Умные" переменные в срипте Отправлено: ритт от Октябрь 09, 2008, 19:15 я бы не ставил ас и кускрипт в один ряд :)
ни по функциональности, ни по производительности ас и рядом не валялся... Название: Re: "Умные" переменные в срипте Отправлено: Tonal от Октябрь 09, 2008, 19:22 Насколько мне известно, ас3 поддерживает статическую типизацию а в кускрипте только динамическая.
Так что сравнивать их действительно не следует. Про производительность - страно. Народ на ас пишет довольно серьёзные приложения.Да и в Адобе не дохи сплошные сидят... Можешь какие-нибудь цифры привести по сравнению производительности? Название: Re: "Умные" переменные в срипте Отправлено: ритт от Октябрь 09, 2008, 23:17 не, я не собираюсь доказывать что-то и меряться...ну, чем обычно меряются :)
мне бы тогда пришлось сейчас всё бросить на несколько часов и написать пару тестиков, а это не то и к теме не относится. если нтересно, набросай сам: например, отрисовка миллиона отрезков/квадратиков/треугольничков на канве размером 20К*20К пикселей...или хотя бы 10К мувиков из магазина на той же поверхности :) ас3 несомненно стал лучше своего предшественника, но гроб ему - будущее... Название: Re: "Умные" переменные в срипте Отправлено: Tonal от Октябрь 10, 2008, 07:16 Уж офтопить, так офтопить. :)
Я спросил не в смысле чем-то мерятся, просто удивило (меня не тот не другой пока не сильно колышат - я на python-е сижу). И возникло некоторое подозрение, что сравнивалось несколько не то и не с тем... Я твою фразочку понял в смысле сравнения самих языков, их фичь и их интерпретаторов, без "внешних" библиотек. Например набросать на обоих какую-нибудь трассировку луча и сравнить понятность кода, его объём и скорость выполнения. А про предложенный тобой тест - как-то не срастается. Мне трудно на вскидку представить в Qt аналог флешового мувика. Да и примитивы в Qt как мне кажется изрядно "примитивнее" чем во флеше. Это всё равно как сравнивать пилу с топором - пила лучше топора, потому как фиг ты с помощью топора так быстро получишь так много таких мелких опилок. :) Название: Re: "Умные" переменные в срипте Отправлено: ритт от Октябрь 10, 2008, 07:54 гут, пофлудим. ветку потом почищу...
уж про трассировку луча не знаю, а "внешний" функционал что здесь, что там. флэш как бы заточен под графику, но на графике же и показывает плачевные результаты. пример выше я привёл со злым умыслом :) дело в том, что даже 10К объектов будет строиться довольно продолжительное время, а памяти съест сколько приспичит. единственный выход - рисовать сканлайном, но и то при размерах полотна хотя бы 20К*20К пикселей тормозить будет конкретно. ну, а если отбросить "внешний" функционал, то мне порой хотелось дать в рожу хоть кому-нибудь из адобовцев :) однажды несколько часов потратили, выясняя отчего происходит такой парадокс: создаём мувик, снимаем с него маску в битмап, накладываем на битмап-подложку, который установлен источником большого мувика (мувик действительно большой и таким образом хотели ограничить рабочую зону до размеров видимой части), затем удаляем временный битмап (или рисуем на нём, пока нужно, и удаляем), удаляем временный мувик (рабочую область). после каждой такой операции отжиралось по 15 метров оперативы...и рекурсивное удаление всего-подряд до самого рута почти ничего не дало. в результате было решено забить на оптимизацию по скорости, раз она требует таких жертв :) сейчас уже не смогу вспомнить было это на ас2 или на ас3, но было ) зы. а ещё ас2/3 нельзя научить работать с другими скриптованными языками, а кускрипт - можно :) Название: Re: "Умные" переменные в срипте Отправлено: Tonal от Октябрь 10, 2008, 13:56 Сдаётся мне, что вы какой-то GIS или сложный CAD делали.
Только зачем всё это надо было делать средствами флеша? Флешь как бы на красочную переносимую веб анимацию заточен, типа как здесь: http://vedma.net.ru/ Т.к. веб, то предполагается сервер. Вот на сервер и нужно всю обработку больших объёмов данных скидывать, чтобы на клиента уже только то что нужно в подготовленном виде по запросу вываливалось. Ну и таки не нужно смешивать язык и среду, хотя в для флеша они очень сильно увязаны. :) Название: Re: "Умные" переменные в срипте Отправлено: ритт от Октябрь 10, 2008, 17:08 Цитировать Т.к. веб, то предполагается сервер. Вот на сервер и нужно всю обработку больших объёмов данных скидывать, чтобы на клиента уже только то что нужно в подготовленном виде по запросу вываливалось. так и было :) флэшка получала уже обработанные данные, оптимизированные полигоны, центральные точки объектов...единственной задачей флэшки было (и есть до сих пор) - отображение этих данных, взаимодействие с пользователем. на ас3 уже писали третью версию, первые две были на ас2; первая версия работала только с растром - всё тормозило, вторую научили работать в растром и вектором, от растра почти ушли - всё тормозило и даже жрало больше памяти(!); третью версию перевели на новое ядро (всё переписали на ас3), практически полностью ушли от растра (не считая статичных объектов) - тормозов стало заметно меньше и с большим рабочим пространством оперировать уже можно более-менее терпимо...и сдаётся мне, что этот ужас будет минимум до ас5 :) и плюс ещё ко всем этим недугам из-за убогости реализации многих механизмов флэша пришлось связать флэшку с хтмлкой, цсс/жс и либой аякса на жс. и ещё меня вечно раздражает, что так сразу никогда не догадаешься с чем работаешь - с указателем на объект или с самим объектом...не дай божа оставишь входную переменную нетипизированной - дыра...и т.д., и т.п. я понимаю, что это уже совсем далеко от темы, но всё же...:) пора уже чистить ветку или ещё посплетничаем? :)) Название: Re: "Умные" переменные в срипте Отправлено: Detonator от Ноябрь 14, 2008, 10:43 Здравствуйте. Появилась необходимость добавить в скриптИнжин переменную, и отслеживать её изменение. Например, переменная называется variable. При исполнении скрипта Код: variable = 123; Это можно сделать, даже разными способами, если еще интересуеет объясню как. Название: Re: "Умные" переменные в срипте Отправлено: SASA от Ноябрь 15, 2008, 17:26 Это можно сделать, даже разными способами, если еще интересуеет объясню как. Конечно!!!!!!!!!!!!!!! Я, правда, придумал способ, но только один . Собирался написать как я сделал это. Название: Re: "Умные" переменные в срипте Отправлено: Detonator от Ноябрь 15, 2008, 18:33 1) можно установить set-метод на это свойство
QScriptValue::setProperty(name, value, QScriptValue::PropertySetter) 2) можно подсунуть объекту (global или activated или this, как вам больше нравится) в качестве фонового QObject с нужным свойством: QScriptEngine::newQObject(scriptObject, qtObject) 3) можно установить объекту QScriptClass и обрабатывать присваивание/чтение руками QScriptValue::setScriptClass(scriptClass) У себя я пошел путем 2), абсолютно всем объектам вешаваю фоновый объект производный от QObject который отслеживает изменения всех свойств. Заодно у всех объектов теперь появился сигнал updated(), который срабатывает при изменении любого свойства, и дополнительные методы которые позволяют проверить какое именно свойство было изменено и какое было старое значение этого свойства. Название: Re: "Умные" переменные в срипте Отправлено: SASA от Ноябрь 17, 2008, 10:24 Я пошёл путём номер раз.Скоро напишу подробно.
Про три - а как это? В двух словах. Про два - подробней можно. С примерчиком. Название: Re: "Умные" переменные в срипте Отправлено: Detonator от Ноябрь 17, 2008, 12:05 Ну в документации же все описано, смотри подробности функций которые я привел.
|