PureBasic переходит на бэкэнд C

Следующая крупная версия PureBasic будет иметь новый бэкэнд C, который позволит поддерживать практически любой процессор, текущий и будущий. Сгенерированный файл представляет собой большой плоский файл без директивы include, обеспечивающей максимальную скорость компиляции. Тем временем мы решили создать вывод на C как можно более чистым, чтобы его можно было легко модифицировать или даже напрямую использовать повторно в проекте C. Давайте посмотрим на это, сравнив фрагмент PureBasic и его сгенерированный аналог кода C:

 Процедура Test () Counter = Counter + 5 If Counter = 5 MessageRequester ("Hello world" , "Hello") EndIf ProcedureReturn 6 EndProcedure Test () 

И сгенерированный код C (без всех шаблонов):

 статический беззнаковый короткий _S1 знак равно 108, 108, 111, 32, 119, 111, 114, 108, 100, 0} ;  статический беззнаковый короткий _S2 знак равно 108, 108, 111, 0};  статическое целое число f_test () {целое число r = 0;  целое число v_counter = 0;  v_counter = (v_counter + 5);  if (v_counter == 5) {целое число rr0 = PB_MessageRequester (_S1, _S2);  } r = 6;  goto end;  конец: return r;  } int __stdcall WinMain (void instance, void prevInstance, void cmdLine, int cmdShow) {PB_Instance = GetModuleHandleW (0);  PB_MemoryBase = HeapCreate (0, 4096, 0);  SYS_InitString ();  PB_InitDesktop ();  PB_InitRequester ();  целое число rr1 = f_test ();  SYS_Quit ();  } 

Как мы видим, код довольно близок к PureBasic и легко читается. Будет поддерживаться встроенный C, и все объекты, такие как переменные, массивы, списки и т. Д., Могут быть доступны, следуя сгенерированному шаблону имени токена (пример: префикс ‘v_’ для переменных, за которым следует имя PureBasic в нижнем регистре).

А как насчет скорости компиляции? Мы используем GCC 8.1.0 без оптимизации (-O0) в Windows 13 x 64 на Core i7 первого поколения для проведения тестов. Мы компилируем 13. 000 строки программы, DocMaker, с включенным отладчиком:

  • GCC backend : около 3 секунд для создания исполняемого файла
  • Серверная часть FASM: около 1 секунды для создания исполняемого файла

Это примерно в 3 раза медленнее, но все же хорошее время для разработки. Следующий тест – большая программа PureBasic IDE с примерно 125. 000 строки кодов с включенным отладчиком. Мы также включаем Microsoft VisualC ++ 2015 в тесты:

  • Бэкэнд GCC: около 24 секунд на создание исполняемого файла
  • Серверная часть VC ++: около 9 секунд для создания исполняемого файла
  • Серверная часть FASM: около 4 секунд для создания исполняемого файла

GCC намного медленнее, примерно в 6 раз, чем текущий бэкэнд FASM. Бэкэнд VC ++ примерно в 2 раза медленнее, что намного лучше, но не так уж и хорошо. В общем, бэкэнд FASM по-прежнему будет лучше использовать для быстрого цикла разработки. Имейте в виду, что это очень ранние тесты, и, как мы только что видели, простое переключение компилятора C может значительно увеличить время компиляции. На этом пока что, в следующий раз мы сосредоточимся на производительности во время выполнения между серверными модулями C и FASM!

Leave a comment

Your email address will not be published. Required fields are marked *

1 × two =