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