Многие системы разработки включают в себя пошаговый отладчик. Пошаговый отладчик был полезен, когда только я начинал изучать программирование на Turbo Pascal 7.0, так и сейчас на работе в Visual Studio приходится применять отладчик. Думаю, что многим программистам пошаговый отладчик необходим. Если же делать оптимизирующий компилятор, который, допустим, может удалять мертвый код, переставлять какие-то инструкции, выделять общие подвыражения, то просто так пошагово отлаживать оптимизированный код не получится, так как порядок инструкций может быть другим, какие-то инструкции могут быть удалены и так далее.
И здесь возникает несколько вариантов:
1) Не реализовывать пошаговый отладчик. Нет отладчика, нет проблем.
2) Реализовывать 2 режима, один release с оптимизациями, а второй debug без оптимизаций, как это сделано во многих системах.
3) Вводить несколько уровней оптимизации, как описано вhttps://www.ibm.com/developerworks/ru/l ... index.htmlТо есть, если надо допустим просто пройти по коду и смотреть какие-то значения переменных, то можно использовать более высокий уровень оптимизации, а если надо, допустим, иметь возможность изменять значения переменных в run-time или переходить к другим инструкциям, то использовать другой уровень оптимизации.
4) Пошагово отлаживать оптимизированный код, допустим, сначала пошаговый отладчик будет на строчке 1, затем на строчке 3, затем на строчке 2 (так как инструкции из 2 и 3 были переставлены местами), затем перепрыгнет на 10 строчку (так как инструкции с 4 строки до 9 - это мертвый код). Думаю, будет очень необычно, зато близко к реальности.
5) Для отладки запускать не код, а интерпретатор кода, который позволяет делать что угодно.
6) Ваш вариант.
Кто как думает, какой вариант лучше?