Comments 7
Кто-нибудь всерьёз писал под голое железо без стека
без рекурсии спокойнее, цикл с ручным фреймом.
Кто-нибудь всерьёз писал под голое железо без стека, не в учебном примере, а в работе?
На мейнфреймах IBM нет стека. На 6502 был такой стек, что его почти и не было. Ну и вообще аппаратный стек не во всех случаях пригоден. В частности, глубокая рекурсия на практике не очень хорошо ложится на вызов через стек.
У меня в конце статьи как раз вывод, что стек это не железо, а договорённость: sp оказался обычным x2, и держится всё на том, что её соблюдают. Ваши примеры это то же самое с другой стороны.
Про 6502 не думал совсем. 256 байт на фиксированной странице, и не подвинуть.
А правильно понимаю, что ответ про глубокую рекурсию уже в первом вашем примере? Цепочка областей сохранения это ведь кадры, которым не надо лежать одним куском, и тогда глубина упирается не в отведённый заранее размер.
Прочитал обе части. Ухватил не всё с первого раза.
Но одну вещь вроде понял. У меня в коде к этой самой статье есть хвостовой вызов: print_dec не зовёт print_str, а прыгает в неё, отдав свой кадр. Я это сделал просто чтобы не заводить лишний кадр. А у вас во второй части выходит, что если так поступить со всеми вызовами, то возвращаться станет некуда и стек возвратов не нужен вовсе. Не думал, что моя мелкая экономия это край чего-то другого.
Поправьте, если я не туда понял.
Моя рекурсия зависла навсегда, и это был правильный результат