История изменений
Исправление quasimoto, (текущая версия) :
Ну сделали мы анроллинг в макросе, а теперь надо ещё block transform, а потом ещё чего нибудь - так мы весь компилятор в макрос запихнём.
Да нет, компилятор уже есть для IR0, он там может себе что угодно делать (как gcc — -fdump-tree-*, то же tagbody/go для циклов). Вообще, если сравнивать типичный язык без макросов с оптимизирующим компилятором, то сравнивать с IR0, то есть лиспом без макросов и его оптимизирующим компилятором. А назначение макросов по задумке именно в расширении компилятора и добавлении специальных форм, они должны писать IR0 — делать какие-то оптимизации или нет это их дело. Я про unrolling заговорил потому что вот SBCL не делает (ни слова на все сорцы, и вообще он мало что делает с циклами по сравнению с gcc), поэтому можно делать в макросе.
Исходная версия quasimoto, :
Ну сделали мы анроллинг в макросе, а теперь надо ещё block transform, а потом ещё чего нибудь - так мы весь компилятор в макрос запихнём.
Да нет, компилятор уже есть для IR0, он там может себе что угодно делать (как gcc — -fdump-tree-*, то же tagbody/go для циклов). Вообще, если сравнивать типичный язык без макросов с оптимизирующим компилятором, то сравнивать с IR0, то есть лиспом без макросов. А назначение макросов по задумке именно в расширении компилятора и добавлении специальных форм, они должны писать IR0 — делать какие-то оптимизации или нет это их дело. Я про unrolling заговорил потому что вот SBCL не делает (ни слова на все сорцы, и вообще он мало что делает с циклами по сравнению с gcc), поэтому можно делать в макросе.