| 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/ |
|