(no subject)

Aug 28, 2015 14:18

Реализовал "оптимизацию хвостовой рекурсии" в самом простом виде. Работает так: если функция "видит", что она вызывает самоё себя, то новый вложенный контекст не создаётся и пересчитанные значения аргументов перезаписываются на текущий уровень. Сэкономило заметное количество malloc/free. Чтобы механизм сработал как надо, "сам себе вызов" не должен быть вложен в какие-то другие вызовы. Но, разумеется, это не TR в чистом виде: вложенные вызовы сишных функций всё равно есть, от этого никак пока не избавиться, потому что это всё равно CALL, а не JUMP.

Думаю сейчас, что надо избавиться от указателя-"ссылки". Механизм сам по себе хороший, но неудобный в том плане что порождает лишние сущности: дальнейшее совершенствование упирается в запутанную сложность этой системы. Надо упрощать!

uncommon lisp

Previous post Next post
Up