Здравствуйте. Наткнулся недавно на PowerBasic 7, а делать было нечего и решил посмотреть что нового (последний раз я смотрел с 3ю версию под DOS)
Поискал по сайтам небольшие тесты на оптимизацию (вроде циклов с условиями и мат. операциями) и сравнил с PureBasic, т.к. другого языка под рукой не оказалось.
Я так и не понял, то-ли оптимизация настолько кривая, то-ли она настолько хороша, т.к. PowerBasic приведеный ниже код выполняет меньше чем за миллисекунду, в то время как PureBasic 6-7 секунд.
исходник на PowerBasic
Код:
#COMPILE EXE
#INCLUDE "WIN32API.INC"
FUNCTION PBMAIN()
LOCAL i AS INTEGER
LOCAL a AS INTEGER
LOCAL b AS INTEGER
LOCAL c AS INTEGER
LOCAL d AS SINGLE
LOCAL e AS SINGLE
LOCAL f AS SINGLE
'-----------------------------------------------------------------------
LOCAL time1 AS QUAD
LOCAL time2 AS QUAD
LOCAL ticks AS QUAD
LOCAL etime AS DOUBLE
QueryPerformanceCounter(time1)
'-----------------------------------------------------------------------
a = 56
b = 100
d = 150.1765
FOR i = 0 TO 100000000
b = b + i
IF ((b = 1000) OR (b = 10000)) THEN
c = i / b * a
ELSE
c = b * i / a
END IF
IF ((b = 100000) OR (b = 1000000)) THEN
c = i / b * a
ELSE
c = b * i / a
END IF
c = 56 * (i - b) / (i + b)
e = 567.8765
f = (d * e) - 6746.56768
IF ((i > 100) AND (i < 100000)) THEN
f = b / e
ELSE
f = d * e
END IF
IF ((i > 1000) AND (i < 1000000)) THEN
f = b / e
ELSE
f = d * e
END IF
f = f * 567 / (d * 65 - f) * d
NEXT
'-----------------------------------------------------------------------
QueryPerformanceCounter(time2)
QueryPerformanceFrequency(ticks)
etime = ((time2 - time1) / ticks) * 1000.0
MessageBox(0, STR$(etime, 9), "Time in ms", 0)
'-----------------------------------------------------------------------
END FUNCTION
исходник на PureBasic
Код:
Define.l i, a, b, c
Define.f d, e, f
;-----------------------------------------------------------------------
Define.q time1, time2, ticks
Define.d etime
QueryPerformanceCounter_(@time1)
;-----------------------------------------------------------------------
a = 56
b = 100
d = 150.1765
For i = 0 To 100000000
b = b + i
If ((b = 1000) Or (b = 10000))
c = i / b * a
Else
c = b * i / a
EndIf
If ((b = 100000) Or (b = 1000000))
c = i / b * a
Else
c = b * i / a
EndIf
c = 56 * (i - b) / (i + b)
e = 567.8765
f = (d * e) - 6746.56768
If ((i > 100) And (i < 100000))
f = b / e
Else
f = d * e
EndIf
If ((i > 1000) And (i < 1000000))
f = b / e
Else
f = d * e
EndIf
f = f * 567 / (d * 65 - f) * d
Next
;-----------------------------------------------------------------------
QueryPerformanceCounter_(@time2)
QueryPerformanceFrequency_(@ticks)
etime = ((time2 - time1) / ticks) * 1000.0
MessageBox_(0, StrD(etime, 9), "Time in ms", 0)
;-----------------------------------------------------------------------
End
У кого есть PowerBasic попрошу проверить так ли это или же у меня галлюцинации. Хотелось бы сравнить так-же с другими языками.
Было бы вообще замечательно, если бы кто-нибудь привел исходник нормального теста, который бы в полной мере отразил качество оптимизации языков, самому придумывать честно говоря лень, может есть готовые?