2 вопроса в конце курса функционального программирования

Вот, кажется, две самые важные вещи, которые я могу извлечь из курса «Как разрабатывать программы (упрощенная ракетка), который я только что закончил, прямо из лекционных заметок курса:

] 1) Оптимизация хвостового вызова и ее отсутствие в нефункциональных языках:

К сожалению, большинство других языков не поддерживают TAIL CALL ОПТИМИЗАЦИЯ. Другими словами, они создают стек даже для хвостовых криков.

Оптимизация хвостового вызова была изобретена в середине 70-х годов, после того, как были разработаны основные элементы большинства языков. Поскольку у них нет оптимизации хвостового вызова, эти языки предоставляют фиксированный набор ЦЕЛЕВЫХ КОНСТРУКЦИЙ, которые позволяют просматривать данные произвольного размера.

а) Каковы эквиваленты этого типа оптимизации в процедурных языках, в которых он отсутствует? б) Означает ли использование этих эквивалентов, что мы избегаем создания стека в аналогичных ситуациях на языках, у которых его нет?

2) Мутации и многоядерные процессоры

Этот механизм является фундаментальным практически для любого другого языка, на котором вы его используете? в программе. Мы откладывали ее внедрение до сих пор для несколько причин:

  • несмотря на то, что он фундаментален, он на удивление сложен

  • , чрезмерное его использование приводит к программам, которые не поддаются исправлению. к распараллеливанию (запуск на нескольких процессорах).Поскольку многоядерные компьютеры стали обычным явлением, возможность использовать мутацию только тогда, когда это необходимо, становится все больше и более важно

  • чрезмерное использование мутации также может затруднить понимают программы, и их трудно хорошо протестировать

Но изменяемые переменные важны, и изучение этого механизма даст вам больше подготовки к работе с Java, Python и многими другими Другие языки. Даже в таких языках вы хотите использовать стиль называется «преимущественно функциональным программированием».

Я немного изучил Java, Python и C ++ перед тем, как пройти этот курс, поэтому стал воспринимать мутации как должное. Теперь все это было подброшено вышеупомянутым заявлением. Мои вопросы:

a) где я могу найти более подробную информацию о том, что предлагается во втором пункте, и что с этим делать, и б) какие шаблоны возникнут из стиля «преимущественно функционального программирования», в отличие от более небрежного стиля, который я, вероятно, имел бы, если бы продолжил изучение этих других языков вместо того, чтобы проходить этот курс?

7
задан Will Ness 30 June 2018 в 05:13
поделиться