Я как-то читал, что вызов процедуры - это, всегда, сохранение состояния стека, передача новых параметров в процедуру, потом по окончании работы возврат стека. Это медленно, по сравнению с линейным кодом. (функции, наверное, тоже, туда тоже передаются параметры) Отчасти еще и поэтому процедурные языки медленнее работают. Просто это удобно.
Благо, в FTCG можно всё собирать линейно, в одной процедуре - много кода, удобство не важно.
PB это, конечно, не язык а песня
#bas
x=1
y=2
z.d=x+y
Debug z
z=x/y
Debug z
//это все, что есть на листе, и оно компилируется и работает.
Тупо выводить на лист всё подряд.
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 -
Сборка завершена.
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