Boolean: ReLoad
https://boolean.forumenko.com/

PowerBasic повзрослел?
https://boolean.forumenko.com/topic17.html
Страница 1 из 1

Автор:  Антон [ 04-03, 07:40 ]
Заголовок сообщения:  PowerBasic повзрослел?

Здравствуйте. Наткнулся недавно на 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 попрошу проверить так ли это или же у меня галлюцинации. Хотелось бы сравнить так-же с другими языками.
Было бы вообще замечательно, если бы кто-нибудь привел исходник нормального теста, который бы в полной мере отразил качество оптимизации языков, самому придумывать честно говоря лень, может есть готовые?

Автор:  Chrono Syndrome [ 15-03, 14:15 ]
Заголовок сообщения: 

Хм... Это, а PowerBASIC предусмативает возможность генерации ASM-листинга ?

Автор:  Антон [ 17-03, 14:34 ]
Заголовок сообщения: 

Цитата:
Хм... Это, а PowerBASIC предусмативает возможность генерации ASM-листинга ?

7.1 версия, на которйо я тестил, вроде не позволяет, но пройдясь дизассемблером и сравнив листинг с PureBasic могу смело заявить что у PowerBasic оптимизация намного лучше чем у PureBasic ^_^

Автор:  Chrono Syndrome [ 31-03, 11:25 ]
Заголовок сообщения: 

А привести здесь этот листинг можно) ?

Страница 1 из 1 Часовой пояс: UTC + 3 часа
Powered by phpBB® Forum Software © phpBB Group
http://www.phpbb.com/