Вы используете устаревший браузер. Этот и другие сайты могут отображаться в нем неправильно. Необходимо обновить браузер или попробовать использовать другой.
С учетом того, что задача программы - вырезать из скрипта не используемые функции/переменные, исключение, по логике, должно обозначать что определенные функции/переменные будут исключены из процесса вырезания.
Этот список облегчает работу разработчику (как UDF, так и пользователю UDF).
Как? Разработчику вместе с UDF нужно будет выложить пояснения, чтобы пользователь нашел определенный ini-файл и внес в него определенные данные. Если пользователь получит UDF без пояснений, то ему или самому придеться разбираться и с UDF и с форматом ini-файла, или спрашивать об этом на форумах.
CreatoR
Касательно идей:
Замена всех DllCall -> DllCallAddress. Лишний раз не придется интерпретатору бегать по таблице экспорта. Для iDll(Internal hModule Id) и pFn(Pointer to function) резервировать наиболее короткие имена переменных, их инициализацию производить в шапке. Для особых случаев можно ввести директиву, которая будет игнорировать определенные имена библиотек.
Если мне не изменяет память, то это давало ~80-100% прирост скорости в работе с DllCall(во времени вызова).
Идея может и хорошая, но мне для начала нужно понимать как это работает и с чем это едят. И к тому же, сейчас в приоритете стабильность и скорость работы самого стрипера .
Я пришёл к выводу, что скорость идёт за счёт стабильности.
Я могу сделать рабочую версию, но это будет оооочень медленно, я думаю тут никакие алгоритмы не помогут, нужно переносить часть очистки неиспользуемых функции/переменных в другой ЯП.
Я конечно ещё помучаюсь над этим, но предчувствую что это не даст положительных результатов.
Я вот что ещё подумал, может проще сделать врапер для Au3Stripper...
Чтобы при /mo (MergeOnly) соединял моим методом (он делает это более корректно), а всё остальное делал Au3Stripper, и уже при использовании задавать для него рабочую папку врапером.
если запустить из редактора - работает на предложенных примерах.
компилирую - не обрабатывает включаемые библиотеки. то есть на выходе тот же скрипт, только без строк #include
Удалось оптимизировать скорость (с приложенными скриптами ~7-10 сек.).
Перенёс часть кода поиска предустановленных функции на этап получения списка игнорируемых функции.
Также теперь работает и в скомпилированной версии (путь к папке аутоита берётся в первую очередь с ini).
CreatoR
Проблема в том, что, судя по коду, так и не доделан алгоритм определения используемых/неиспользуемых функций/переменных. Это, в дальнейшем приведет к тому, что весь код нужно будет переписывать практически с нуля, или, легче будет забросить проект.
Добавлено:
Сообщение автоматически объединено:
Насчет алгоритма фильтрации - интересное "использование" AutoIt нашел в ISN AutoIt Studio :
Код:
Func _WM_NOTIFY_EDITOR($hWnd, $iMsg, $iwParam, $ilParam)
...
; здесь используется глобально объявленная константа $tagNMHDR
$tNMHDR = DllStructCreate($tagNMHDR, $ilParam)
...
; здесь локально объявляется $tagNMHDR, которая даже не используется в функции
Local $tagNMHDR, $event
...
EndFunc
По-моему это очень "не конструктивное" решение, в пределе оно сводится к алгоритму:
- удалить все функции, которые не встречаются вне функций, за исключением функций, которые встречаются в сохраненных функциях (тут, блин, намечается рекурсия)
- удалить все глобальные константы, которые объявлены, но в оставшемся коде больше не встречаются
Результат будет совсем мало отличаться по размеру от исходного файла, вряд ли это будет приемлемо. Больших результатов можно будет добиться, используя какой-никакой синтаксический разбор кода.
Добавлено:
Сообщение автоматически объединено:
Набросал некоторые правила синтаксического разбора кода вне функций:
- если строка начинается с функции или ключевых слов If, For, ElseIf, Case, Switch, Until, With, While, Exit , то все переменные и функции из этой строки необходимы для работы скрипта
- если строка начинается с переменной являющейся COM-объектом , то все переменные и функции из этой строки необходимы для работы скрипта
- если строка начинается с переменной (не константы) за которой идет операция присваивания (знак "=") , то все переменные и функции из этой строки необходимы для работы скрипта (гораздо правильнее было бы проверить используется ли дальше по коду эта переменная в необходимых строках, но тут есть ньюанс - есть такой код который по другому как говнокод не назовешь, в котором эта проверка вернет неверный результат)
- Претендуют на удаление только те переменные, которые имеют Global или Local в начале, а также те, которым не присваивается значение возвращаемое от обработки функции.
Хоть на ASSEMBLER, как и в оригинальном Au3Stripper есть досадный изъян - время обработки зависит от объема обрабатываемых данных в геометрической прогрессии. Это, кстати, дает основание полагать, что на AutoIt можно будет добиться как минимум не меньшего быстродействия, а, возможно, и большего.
в оригинальном Au3Stripper есть досадный изъян - время обработки зависит от объема обрабатываемых данных в геометрической прогрессии. Это, кстати, дает основание полагать, что на AutoIt можно будет добиться как минимум не меньшего быстродействия, а, возможно, и большего
Но при этом, большинство пользователей скорость его работы удовлетворяет, поэтому я буду приравниваться к этому (как минимум).
Да и по другому никак, это парсинг текста.