Вверх ↑
Ответов: 1429
Рейтинг: 50
#1: 2012-03-26 05:31:01 ЛС | профиль | цитата
Начал читать книжки по PureBasic, удивительно, но нигде не сказано о том, что использование процедур замедляет код.

Я как-то читал, что вызов процедуры - это, всегда, сохранение состояния стека, передача новых параметров в процедуру, потом по окончании работы возврат стека. Это медленно, по сравнению с линейным кодом. (функции, наверное, тоже, туда тоже передаются параметры) Отчасти еще и поэтому процедурные языки медленнее работают. Просто это удобно.

Благо, в FTCG можно всё собирать линейно, в одной процедуре - много кода, удобство не важно.

PB это, конечно, не язык а песня


#bas
x=1
y=2

z.d=x+y
Debug z

z=x/y
Debug z

//это все, что есть на листе, и оно компилируется и работает.
Декларация переменных, работа с ними - что может быть проще. На FTCG, можно писать элементы даже не используя блоки
Тупо выводить на лист всё подряд.

CriDos, в вашем старом пакете PB сразу нашел странную ошибку, в элементе "main" главное событие event(onStart) стояло до печати главного цикла формы. Передвинул ее "после" - код начал компилиться без pre-компилятора.
И компиляция теперь мгновенная
peasr45.png

Ограничения по количеству строк в компиляторе нет:
******************************************
PureBasic 4.51 (Windows - x86)
******************************************

Compiling Crogram FilesHiAsmElementsPureBasiccodePure.pb
Loading external libraries...
Starting compilation...
100009 lines processed.
Creating executable "Crogram FilesHiAsmPure.exe".

- Feel the ..PuRe.. Power -
Сборка завершена.

Точное определение времени выглядит так:


#bas
QueryCount1.q
QueryCount2.q
HPB_For4i_pos.i
HPB_For5i_pos.i

OpenWindow(1, 0, 0, 390, 261, "pbtest")
ButtonGadget(2, 175, 110, 55, 20, "Push")

Repeat
EventID.l = WaitWindowEvent()

If EventGadget() = 2
QueryPerformanceCounter_(@QueryCount1)
For HPB_For4i_pos = 1 To 100000
For HPB_For5i_pos = 1 To 18
If HPB_For5i_pos >= 11 And HPB_For5i_pos <= 16
EmuleMem.b = 0
EndIf
If HPB_For5i_pos = 17
EmuleMem.b = 1
EndIf
Next
Next
QueryPerformanceCounter_(@QueryCount2)
Debug "Hardware Timer: "+Str((QueryCount2 - QueryCount1) / 1000000)
EndIf

If EventID = #PB_Event_CloseWindow : End : EndIf
ForEver


карма: 0

0
файлы: 1peasr45.png [14.4KB] [335]