Что нового

Быстродейсвтие Autoit

qqww22

Новичок
Сообщения
115
Репутация
4
:( :( :(


4fae70004cd2.jpg
 

joiner

Модератор
Локальный модератор
Сообщения
3,557
Репутация
628
Re: Совсем не оптимистично

по этому поводу уже была тема.
в первом случае на выходе число i точно имело значение 100 000 000? :smile:
еще момент
конструкция
Код:
For $i = 1 To 100000000
	$s += 1
Next

работает быстрее
 

Yashied

Модератор
Команда форума
Глобальный модератор
Сообщения
5,379
Репутация
2,724
Re: Совсем не оптимистично

Предупреждение За нарушение правил форума (пункт Б.5):
Имя темы должно нести смысловую нагрузку (отражать суть вопроса/проблемы)
Правильно сформулированное название темы привлекает больше внимания, и шансы получить конкретный ответ увеличиваются.


Данные правила могут пополняться локальными правилами раздела.
Как правильно называть темы

"Совсем не оптимистично " - это неприемлемое название темы, переименуйте тему иначе она будет закрыта, а вам возможно будет выдан бан на несколько дней.

С уважением, ваш Модератор.
 

firex

AutoIT Гуру
Сообщения
943
Репутация
208
Re: Совсем не оптимистично

Yashied
Общение же.

qqww22
Код:
Local $iTimer = TimerInit()
For $i = 1 To 100000000
Next
ConsoleWrite( $i & ' ' & ( TimerDiff( $iTimer ) / 1000 ) & @CRLF)


Код:
100000001 3.44210686728515



P.S. Раз уж затронули эту тему - есть предложение для разработчиков:
Код:
;#Include <APIConstants.au3>
;For $i = 1 To 100000 Step 1
	;Assign( _RandStr( Random( 10, 15, 1 ) ), 0 )
;Next

Local $Test, $TargetTest, $iTimer = TimerInit()
; ---
For $i = 1 To 10000000
	$TargetTest = $Test
Next
ConsoleWrite( ( TimerDiff( $iTimer ) / 1000 ) & @CRLF)


Func _RandStr($iLen)
	Local $sRet, $aBase
	; ---
	$aBase = StringSplit('0123456789_ABCDEFGHIKLMNOPQRSTUVWXYZ', '')
	For $i = 1 To $iLen
	$sRet &= $aBase[Random(1, $aBase[0], 1)]
	Next
	; ---
	Return $sRet
EndFunc


Раскомментирование шапки этого кода никак не отражается на его быстродействии(более того, появляется выигрыш ~в 0.1%). Из этого следует, что более этично будет оформлять встроенные библиотеки следующим образом:
Код:
Func _GDIPlus_ImageGetGraphicsContext($hImage)
	If Not IsDeclared( '_GdipGetImageGraphicsContext' ) Then _DECLAREFUNC( 'gdiplus.dll', 'GdipGetImageGraphicsContext' )
	; ---
	Local $aRes = DllCallAddress( "int", $_GdipGetImageGraphicsContext, "handle", $hImage, "handle*", 0)
	If @error Or $aRes[0] Then  _
		Return SetError(@error + 1, 0, 0)
	; ---
	Return $aRes[2]
EndFunc   ;==>_GDIPlus_ImageGetGraphicsContext


С таким подходом скорость выполнения увеличивается на 25%, а с предварительным получением адреса ~ 40%.
 

Prog

Продвинутый
Сообщения
581
Репутация
70
Re: Совсем не оптимистично

Если нужна скорость выполнения, тогда пишите на компилируемых ЯПах. На том же C++.
Хотя некоторые на форуме советуют PureBasic утверждая что он похож на AutoIt, но я сильной схожести не заметил. Но проги да, работают быстро. Цикл как в первом сообщении выполнился за 0.2 секунды.
 

Вложения

  • Test.zip
    2.4 КБ · Просмотры: 6
Автор
Q

qqww22

Новичок
Сообщения
115
Репутация
4
Re: Совсем не оптимистично

Prog сказал(а):
Если нужна скорость выполнения, тогда пишите на компилируемых ЯПах. На том же C++.
У C++ слишком узкопрофильное применение в ввиду скорости разработки хоть он и был моим 1 языком программирования на протяжение пары лет... после знакомства с Autoit ушёл на 2 план:smile:
А вот за PureBasiс огромное спасибо,интересный язык гибрит паскаля и Autoit и самое главное ехе как в С++ почти не хранит мета данных о коде,страдать обрусификатарми не придётся.
 

joiner

Модератор
Локальный модератор
Сообщения
3,557
Репутация
628
qqww22 [?]
А вот за PureBasiс огромное спасибо,интересный язык
вот поэтому на нем пишут библиотеки, а все остальное на AutoIT
насчет гибрида это слегка преувеличено . просто есть схожесть в синтаксисе. что облегчает понимание
 

Yashied

Модератор
Команда форума
Глобальный модератор
Сообщения
5,379
Репутация
2,724
PureBasiс, это ЯП явно не для людей. Есть поддержка 3D (зачем???), RS-232 и пр. плюшки, но нет совершенно банальных функций, например что-то типа FileExists(). Да, знаю про трюк с FileSize(), но не в этом суть. Нет выравнивания структур (в последних версиях вроде бы добавили). А после краткого ознакомления с PB начинаешь понимать всю гениальность разработчиков AutoIt, когда функции из одного раздела имеют одинаковый префикс, например:

FileGetAttrib
FileGetSize
FileGetVersion

DirCopy
DirCreate
DirMove

и т.д.

И самое главное, по поводу поддержки предыдущих версий разработчики PB походу вообще не парятся. Таким образом, установив новую (платную) версию, велика вероятность, что большая часть написанных до этого программ просто не будут работать должным образом. В большей степени это относится к написанным ранее библиотекам.

P.S

А еще в PB на редкость тупая справка.
 

Prog

Продвинутый
Сообщения
581
Репутация
70
Не совсем согласен.

Yashied [?]
PureBasiс, это ЯП явно не для людей.
Это не так. Просто есть отличия от AutoIt. В котором кстати большая проблема со структурами (реально неудобно с ними работать). И что после этого AutoIt считать не для людей? Нет конечно же, он для людей. Просто есть особенности. Скорее даже кто к чему привык. Если вы долгое время пользовались AutoIt, то после него другой язык может показаться местами нелогичным.

А после краткого ознакомления с PB начинаешь понимать всю гениальность разработчиков AutoIt, когда функции из одного раздела имеют одинаковый префикс, например
Функции распределены в справке по категориям. Это удобно и нет необходимости в одинаковом начале их имен.

Нет выравнивания структур (в последних версиях вроде бы добавили).
Да несколько лет назад добавили. Проверял вызывая dll на PB из сишного кода с передачей структуры. Выравнивание работает нормально на x86 и x64.

Таким образом, установив новую (платную) версию, велика вероятность, что большая часть написанных до этого программ просто не будут работать должным образом. В большей степени это относится к написанным ранее библиотекам.
Обычно компилятор сообщает о проблеме. Реально несовместимые изменения делают не так часто.

А еще в PB на редкость тупая справка.
Почему? По моему удобная. Функции отсортированы по разделам.
 

Yashied

Модератор
Команда форума
Глобальный модератор
Сообщения
5,379
Репутация
2,724
Prog сказал(а):
Просто есть отличия от AutoIt. В котором кстати большая проблема со структурами (реально неудобно с ними работать).
Да, работать со структурами не очень удобно, но после того, как разработчики добавили доступ к полям структуры аналогично COM, стало намного лучше. Да и не сказал бы я, что работа со структурами в PB удобнее, особенно, когда приходится часто менять адреса. Но согласен, это особенность данного ЯП.

Prog сказал(а):
Функции распределены в справке по категориям. Это удобно и нет необходимости в одинаковом начале их имен.
Это очень удобно, когда используется Autocomplete и ты не являешься гуру PB, помня названия всех функций.

Prog сказал(а):
Реально несовместимые изменения делают не так часто.
Я специально акцентировал внимание на библиотеках. Достаточно почитать разные форумы, где люди пишут, что до сих пор сидят на 4.50, из-за подобных проблем.

Prog сказал(а):
Почему? По моему удобная. Функции отсортированы по разделам.
Если вы хорошо знакомы с PB, то да, нет проблем. А человеку, который только начинает осваивать PB, это головная боль. Мало примеров, описания функций порой неполные, зачастую даже не указано, что именно возвращает та или иная функция. Как следствие, приходится лезть на форумы и искать там ответы на банальные вопросы.

Ка бы то ни было, но для платного ЯП PB явно не дотягивает.

P.S

Где базовые функции для работы с реестром? Эх...
 

asdf8

Скриптер
Сообщения
564
Репутация
152
Yashied [?]
Ка бы то ни было, но для платного ЯП PB явно не дотягивает.

Согласен, так-же, как и с тем, справка в РВ по сравнению с AutoIt - детский лепет. Реализация внутренних оберток над WinApi тоже так себе - как пример : ссылка.
Тем не менее, сам пользуюсь РВ, т.к. в нем есть то, что никогда не будет в AutoIt - возможность создавать DLL и многопоточность.
 

Prog

Продвинутый
Сообщения
581
Репутация
70
Yashied [?]
Да и не сказал бы я, что работа со структурами в PB удобнее, особенно, когда приходится часто менять адреса.
Изменить адрес структуры не проблема.
Код:
x=0
y=0
*Struct.Integer
*Struct=@x         ; Присвоили адрес структуре.
*Struct\i = 10
*Struct=@y         ; Присвоили адрес структуре.
*Struct\i = 20
Debug x
Debug y
Или речь про что-то другое.

Я специально акцентировал внимание на библиотеках.
UserLibrary это не официальные библиотеки. Разработчики не несут ответственность за совместимость сторонних библиотек на бинарном уровне. Сейчас наблюдается тенденция перехода с UserLibrary на модули. В этом случае, совместимость версий намного выше.

Если вы хорошо знакомы с PB, то да, нет проблем. А человеку, который только начинает осваивать PB, это головная боль.
По моему найти нужную функцию не так сложно. Например если требуется работа с файлами, смотрим справку и обнаруживаем раздел File и логично предположить что необходимая функция будет там. Если нужна математическая функция или скажем требуется работа со строками, смотрим справку и находим разделы Math и String.


зачастую даже не указано, что именно возвращает та или иная функция.
Посмотрел пару функций в справке. У всех есть в описании раздел "Return value" где написано что возвращается.


Где базовые функции для работы с реестром?
Знаете почему нет? Потому что PB не только для винды. Он еще поддерживает Linux и MacOS и в перспективе веб. Там нет реестра. В PB, за редким исключением, только кроссплатформенные функции. Если нужна работа с реестром, сообществом написано много кода для этого, к примеру модуль Registry. http://www.purebasic.fr/english/viewtopic.php?f=12&t=56204

Кстати, подобие модулей не помешало бы добавить AutoIt. Проще будет писать библиотеки.
 

Yashied

Модератор
Команда форума
Глобальный модератор
Сообщения
5,379
Репутация
2,724
Prog сказал(а):
Потому что PB не только для винды.
Вот в этом-то и проблема. И если честно, то это сильно напрягает. Как результат, AutoIt'а так сказать "из коробки" достаточно в 90-95% случаях для решения большинства задач. PB без пользовательских библиотек или курения WinAPI годится разве что начального ознакомления. Я бы не был столь критичен, если бы PB был бесплатным а так...

Да, я тоже использую PB для написания DLL или тупо вместо ASM. Ну и Threads конечно же.

P.S

А еще, почему-то я не могу указать #Null для строк в API-функциях, для которых в PB определен Prototype.

P.S.S

По поводу неполного описания, например, CopyMemoryString().
 

Prog

Продвинутый
Сообщения
581
Репутация
70
Yashied [?]
А еще, почему-то я не могу указать #Null для строк в API-функциях, для которых в PB определен Prototype.
Почти все API доступны без их явного вызова из dll и #Null передать вместо текста можно.
Код:
MessageBox_(0, "Текст", #Null, #MB_ICONINFORMATION)


По поводу неполного описания, например, CopyMemoryString().
По моему вполне понятное описание. http://www.purebasic.com/documentation/memory/copymemorystring.html
 

Yashied

Модератор
Команда форума
Глобальный модератор
Сообщения
5,379
Репутация
2,724
Prog сказал(а):
По моему вполне понятное описание. http://www.purebasic.com/documentation/memory/copymemorystring.html
Я в 4.50 смотрел.
 
Автор
Q

qqww22

Новичок
Сообщения
115
Репутация
4
Autoit + C++(DLL) уделали pb на пару мили секунд :smile:

pb отрабатывает за 15-16

Ps родная ide pb ужасна,добавление функций кликом мыши из меню нечто ;D
ладно sb спасает ситуацию.

f8ea3d920220.jpg
 

Prog

Продвинутый
Сообщения
581
Репутация
70
qqww22 [?]
Ps родная ide pb ужасна
Вполне нормальная. Это чисто субъективное мнение.

добавление функций кликом мыши из меню нечто
Это как?




Добавлено:
Сообщение автоматически объединено:

Кажется понял. Имеется в виду выбор функции в списке автозавершения. Функция добавляется по нажатию кнопки Tab. Если кому-то это покажется неудобным, и захочется чтобы функция вставлялась по нажатию Enter, то заходим в настройки в "Горячих клавишах" ищем в списке (почти в самом низу) "Вставить выбранное слово из окна авто-завершения" и меняем кнопку на нужную.
 

WSWR

AutoIT Гуру
Сообщения
941
Репутация
363
Yashied
Я бы не был столь критичен, если бы PB был бесплатным а так...
Есть Freebasic - бесплатный, документация на русском, быстрое создание dll, многопоточность, Linux, библиотеки - все есть.
И, говорят, быстрее, чем Purebasic)
Как по мне - страшно недооценен это язык.
 
Верх