Я делаю все возможное, чтобы не быть расплывчатым, и все это можно решить с помощью цикла while, но в качестве упражнения я пошел против лучшей практики использования цикла while в надежде узнать что-то новое.
Я заново изучаю некоторые основы архитектуры ЦП и подумал, что было бы забавно реализовать эмуляцию ЦП с «реальной» логикой JMP
или как можно ближе к ней в программном обеспечении.
Однако я застреваю в процессе рендеринга указанной логики.
Код (согласно моему лучшему суждению) не имеет отношения к проблеме, но чтобы избежать спины и четвертого, логика выглядит следующим образом:
.LDA 0220
.ASL
.BCC FA
Все это проверяет регистр, выполняет битовый сдвиг влево и переходит на адрес памяти FA
, если флаг состояния установлен правильно, если нет, он возвращается к .LDA
и снова проверяет регистры.
Реализация в python делает то же самое с рекурсивной функцией каждого шага в коде. Излишне говорить, что это за пределами лучших практик, но я подумал, что это будет забавный эксперимент по рекурсии и порядку вызовов.
Если моя математика подтвердится, я получу 16 280 рекурсивных вызовов, прежде чем python просто остановится и через 3 секунды или около того просто вернется в командную строку.
Я сделал sys.setrecursionlimit(self.dotcount*self.linecount)
в грязной попытке увеличить предел рекурсии, и цель здесь состояла в том, чтобы иметь возможность выполнить 81 600 рекурсий (340x240 пикселей, один рекурсивный вызов на пиксель округлым) .
в соответствии с Какова максимальная глубина рекурсии в Python и как ее увеличить? Это плохая идея, так как фреймы довольно большие, поэтому моя попытка исправить это была:
for tb in inspect.stack():
tb.frame.clear()
Я также пытался (без преобладания) использовать traceback.clear_frames(tb)
.
Тупик поражает меня RuntimeError: cannot clear an executing frame
.
Мое последнее средство / вопрос: возможно ли уменьшить время выполнения, чтобы учесть более рекурсивные вызовы, которые, как я знаю, имеют счастливый конец? Я не вижу, что у меня даже почти не хватает оперативной памяти, а приложение не работает даже близко к заметно медленному (в какой-то момент я ожидал замедления) .
Если это так, как освободить трассировку стека или увеличить глубину рекурсии?