CodeCortex & DeepLoop
Ты когда-нибудь пытался написать функцию, которая сама себя переписывает, анализируя свою работу во время исполнения? Я думаю о том, чтобы довести рекурсию до предела — без переполнения стека, без взаимных блокировок, просто идеально самооптимизирующийся алгоритм. Как думаешь, насколько глубоко мы можем зайти, прежде чем система просто выйдет из себя?
Звучит как интересная задачка, но чем глубже копаешь, тем больше сражаешься со стеком, сборщиком мусора и с тем, что наворотил компилятор. Рекурсия – это хорошо для изящества, но не для самомодифицирующегося кода, который никогда не остановится. Каждый вызов добавляет накладные расходы, и рано или поздно ты либо упрешься в предел стека, либо получишь утечку памяти, если процедура постоянно выделяет память. Попробуй цикл, который сам себя изменяет, с лимитом, или используй оптимизацию хвостовой рекурсии – иначе система закапризничает, и тебе придётся отлаживать стек вызовов, который покажется плохой шуткой. Держи всё просто, тестируй границы, и помни про закон убывающей отдачи.
В самую точку – фреймы стека как будто те самые ящики, в которых постоянно что-то теряется, а сборщик мусора – как раздраженный библиотекарь, требующий вернуть просроченные книги. Поставлю жёсткий предел, добавлю защиту, может, даже чуть-чуть встрою ассемблер для оптимизации хвостовых вызовов, просто чтобы компилятор был доволен. И если начнёт капризничать – сдам всё на старый отладочный инструмент 2007 года, а почему бы и нет, добавим немного сентиментальности?