Local $iTimer = TimerInit()
For $i = 1 To 100000000
Next
ConsoleWrite( $i & ' ' & ( TimerDiff( $iTimer ) / 1000 ) & @CRLF)
100000001 3.44210686728515
;#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
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
firex сказал(а):Общение же.
У C++ слишком узкопрофильное применение в ввиду скорости разработки хоть он и был моим 1 языком программирования на протяжение пары лет... после знакомства с Autoit ушёл на 2 планProg сказал(а):Если нужна скорость выполнения, тогда пишите на компилируемых ЯПах. На том же C++.
вот поэтому на нем пишут библиотеки, а все остальное на AutoITА вот за PureBasiс огромное спасибо,интересный язык
Это не так. Просто есть отличия от AutoIt. В котором кстати большая проблема со структурами (реально неудобно с ними работать). И что после этого AutoIt считать не для людей? Нет конечно же, он для людей. Просто есть особенности. Скорее даже кто к чему привык. Если вы долгое время пользовались AutoIt, то после него другой язык может показаться местами нелогичным.PureBasiс, это ЯП явно не для людей.
Функции распределены в справке по категориям. Это удобно и нет необходимости в одинаковом начале их имен.А после краткого ознакомления с PB начинаешь понимать всю гениальность разработчиков AutoIt, когда функции из одного раздела имеют одинаковый префикс, например
Да несколько лет назад добавили. Проверял вызывая dll на PB из сишного кода с передачей структуры. Выравнивание работает нормально на x86 и x64.Нет выравнивания структур (в последних версиях вроде бы добавили).
Обычно компилятор сообщает о проблеме. Реально несовместимые изменения делают не так часто.Таким образом, установив новую (платную) версию, велика вероятность, что большая часть написанных до этого программ просто не будут работать должным образом. В большей степени это относится к написанным ранее библиотекам.
Почему? По моему удобная. Функции отсортированы по разделам.А еще в PB на редкость тупая справка.
Да, работать со структурами не очень удобно, но после того, как разработчики добавили доступ к полям структуры аналогично COM, стало намного лучше. Да и не сказал бы я, что работа со структурами в PB удобнее, особенно, когда приходится часто менять адреса. Но согласен, это особенность данного ЯП.Prog сказал(а):Просто есть отличия от AutoIt. В котором кстати большая проблема со структурами (реально неудобно с ними работать).
Это очень удобно, когда используется Autocomplete и ты не являешься гуру PB, помня названия всех функций.Prog сказал(а):Функции распределены в справке по категориям. Это удобно и нет необходимости в одинаковом начале их имен.
Я специально акцентировал внимание на библиотеках. Достаточно почитать разные форумы, где люди пишут, что до сих пор сидят на 4.50, из-за подобных проблем.Prog сказал(а):Реально несовместимые изменения делают не так часто.
Если вы хорошо знакомы с PB, то да, нет проблем. А человеку, который только начинает осваивать PB, это головная боль. Мало примеров, описания функций порой неполные, зачастую даже не указано, что именно возвращает та или иная функция. Как следствие, приходится лезть на форумы и искать там ответы на банальные вопросы.Prog сказал(а):Почему? По моему удобная. Функции отсортированы по разделам.
Ка бы то ни было, но для платного ЯП PB явно не дотягивает.
Изменить адрес структуры не проблема.Да и не сказал бы я, что работа со структурами в PB удобнее, особенно, когда приходится часто менять адреса.
x=0
y=0
*Struct.Integer
*Struct=@x ; Присвоили адрес структуре.
*Struct\i = 10
*Struct=@y ; Присвоили адрес структуре.
*Struct\i = 20
Debug x
Debug y
UserLibrary это не официальные библиотеки. Разработчики не несут ответственность за совместимость сторонних библиотек на бинарном уровне. Сейчас наблюдается тенденция перехода с UserLibrary на модули. В этом случае, совместимость версий намного выше.Я специально акцентировал внимание на библиотеках.
По моему найти нужную функцию не так сложно. Например если требуется работа с файлами, смотрим справку и обнаруживаем раздел File и логично предположить что необходимая функция будет там. Если нужна математическая функция или скажем требуется работа со строками, смотрим справку и находим разделы Math и String.Если вы хорошо знакомы с PB, то да, нет проблем. А человеку, который только начинает осваивать PB, это головная боль.
Посмотрел пару функций в справке. У всех есть в описании раздел "Return value" где написано что возвращается.зачастую даже не указано, что именно возвращает та или иная функция.
Знаете почему нет? Потому что PB не только для винды. Он еще поддерживает Linux и MacOS и в перспективе веб. Там нет реестра. В PB, за редким исключением, только кроссплатформенные функции. Если нужна работа с реестром, сообществом написано много кода для этого, к примеру модуль Registry. http://www.purebasic.fr/english/viewtopic.php?f=12&t=56204Где базовые функции для работы с реестром?
Вот в этом-то и проблема. И если честно, то это сильно напрягает. Как результат, AutoIt'а так сказать "из коробки" достаточно в 90-95% случаях для решения большинства задач. PB без пользовательских библиотек или курения WinAPI годится разве что начального ознакомления. Я бы не был столь критичен, если бы PB был бесплатным а так...Prog сказал(а):Потому что PB не только для винды.
Почти все API доступны без их явного вызова из dll и #Null передать вместо текста можно.А еще, почему-то я не могу указать #Null для строк в API-функциях, для которых в PB определен Prototype.
MessageBox_(0, "Текст", #Null, #MB_ICONINFORMATION)
По моему вполне понятное описание. http://www.purebasic.com/documentation/memory/copymemorystring.htmlПо поводу неполного описания, например, CopyMemoryString().
Я в 4.50 смотрел.Prog сказал(а):По моему вполне понятное описание. http://www.purebasic.com/documentation/memory/copymemorystring.html
Вполне нормальная. Это чисто субъективное мнение.Ps родная ide pb ужасна
Это как?добавление функций кликом мыши из меню нечто
Есть Freebasic - бесплатный, документация на русском, быстрое создание dll, многопоточность, Linux, библиотеки - все есть.Я бы не был столь критичен, если бы PB был бесплатным а так...