Вот, кажется, две самые важные вещи, которые я могу извлечь из курса «Как проектировать программы (упрощенная ракетка)», который я только что закончил, прямо из примечаний к лекциям курса:
1) Оптимизация вызова на хвосте,и его отсутствие в нефункциональных языках:
К сожалению, большинство других языков не поддерживают ОПТИМИЗАЦИЮ TAIL CALL.Другими словами, они создают стек даже для хвостовых вызовов.
Оптимизация вызовов на хвост была изобретена в середине 70-х годов, задолго до того, как были разработаны основные элементы большинства языков.Поскольку они не имеют оптимизации хвостового вызова, эти языки предоставляют фиксированный набор КОНСТРУКЦИЙ ПЕТЛИ, которые позволяют проходить данные произвольного размера.
a) Каковы эквиваленты этому типу оптимизации в процедурномязыки, которые не показывают это?б) Использование этих эквивалентов означает, что мы избегаем создания стека в подобных ситуациях в языках, в которых его нет?
2) Мутация и многоядерные процессоры
Этот механизм является фундаментальнымпрактически на любом другом языке, на котором вы программируете. Мы отложили его введение по нескольким причинам:
, несмотря на то, что он фундаментальный, он удивительно сложен
его чрезмерное использование приводит к тому, что программы не поддаются распараллеливанию (работают на нескольких процессорах).Поскольку многоядерные компьютеры в настоящее время широко распространены, возможность использовать мутацию только тогда, когда это необходимо, становится все более и более важной
чрезмерное использование мутации также может затруднить понимание программ и затруднить понимание.хорошо их протестируйте
Но изменяемые переменные важны, и изучение этого механизма даст вам больше подготовки к работе с Java, Python и многими другими языками.Даже в таких языках вы хотите использовать стиль, который называется «в основном функциональное программирование».
Я изучил некоторые Java, Python и C ++, прежде чем пройти этот курс, поэтому пришел к выводу, что мутация является само собой разумеющимся.Теперь, когда все вышесказанное было подтверждено вышеприведенным заявлением.Мои вопросы:
а) где я могу найти более подробную информацию о том, что предлагается во 2-м пункте, и что с этим делать, и б) какие шаблоны появятся из "в основном функционального программирования""стиль, в отличие от более небрежного стиля, который я, вероятно, имел бы, если бы продолжил изучать другие языки вместо того, чтобы пройти этот курс?