В настоящее время я пишу компилятор и, похоже, у меня возникли проблемы с получением кода вывода, который выполняется в приличный таймфрейм.
Краткий обзор компилятора:
7Basic - это компилятор, который предназначен для компиляции кода 7Basic непосредственно в машинный код для целевой архитектуры/платформы. В настоящее время 7Basic генерирует сборку x86 с исходным файлом.
Проблема заключается в том, что код сборки, сгенерированный компилятором, медленный и неэффективный.
Например, этот код (который компилируется до this код сборки) занимает почти 80,47 раз дольше, чем эквивалентный код C.
Частично проблема заключается в том, что компилятор генерирует код следующим образом:
push eax
push 5000000
pop ebx
pop eax
Вместо более логичного:
mov ebx,5000000
... которое выполняет одно и то же.
Мой вопрос: какие методы избегают такого рода проблем? Парсер в основном использует рекурсию для анализа выражений, поэтому генерируемый код отражает это.