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

Я читал об этих темах некоторое время и, возможно, что-то понял. Но меня смущают некоторые связи:

я. Машина Тьюринга (точнее модель RAM) и императивное программирование

Лямбда-исчисление и функциональное программирование

II. Von Nueman Системная архитектура и императивное программирование

Я почти получил соединение в (i), но ничего не получил для (ii). Тем не менее, из лекции Тьюринга Бэкуса, я думаю, есть некоторая связь между 2. Во многих местах я даже видел императивную парадигму, написанную как "Парадигма фон Нуэмана". Итак, помогла ли системная архитектура фон Неймана в развитии императивных языков и изменилась ли ситуация, если бы мы следовали какой-то другой системной архитектуре, скажем, Говардской архитектуре?

1 ответ

В статье Бэкуса, на которую вы ссылаетесь, этот вопрос рассматривается напрямую (подчеркивает мою):

... мы можем грубо охарактеризовать три класса моделей для вычислительных систем...

2.2.1. Простые операционные модели. Примеры: машины Тьюринга, различные автоматы....

2.2.2 Аппликативные модели. Примеры: лямбда-исчисление Черча [5], система комбинаторов Карри [6], чистый Лисп [17], системы функционального программирования, описанные в этой статье. Основы: краткие и полезные. Чувствительность к истории: нет хранения, не чувствительна к истории. Семантика: редукционная семантика, нет состояний. Четкость программы: программы могут быть понятными и концептуально полезными.

2.2.3 Модели фон Неймана. Примеры: компьютеры фон Неймана, обычные языки программирования. Основы: сложные, громоздкие, не полезные. Чувствительность к истории: есть память, чувствительна к истории. Семантика: переход состояний со сложными состояниями. Четкость программы: программы могут быть умеренно четкими, концептуально не очень полезными.

Приведенная выше классификация по общему признанию является грубой и дискуссионной.

Если бы я мог отогнать это еще дальше:

  • архитектура фон Неймана позволяет (написанным программистом) инструкциям обновлять память (то есть изменять состояние).
  • функциональное программирование не имеет понятия изменчивого состояния.

Языки FP, например, Haskell, в настоящее время компилируются в обязательный машинный код, который выполняется на компьютерах фон Неймана. Функциональные программисты, как правило, стараются не задумываться о мутировании памяти, предпочитая, чтобы компилятор выяснил это.

Один из способов взглянуть на это состоит в том, что языки FP обеспечивают полную абстракцию над физическим каналом архитектуры фон Неймана. Однако здесь возникает вопрос о том, может ли принципиально отличающаяся архитектура лучше соответствовать функциональным языкам.

Что приводит нас к: Редуцерону. Редукерон в его нынешней форме представляет собой программируемый в полевых условиях массив затворов (FPGA), который демонстрирует потенциальные преимущества, которые может иметь физическая машина, разработанная специально для оценки FP.

Короче говоря, Reduceron берет функциональную программу, которая представляет собой граф приложений функций без состояния, и разбивает ее на массив приложений с параллельными функциями. Затем эти параллельные приложения запускаются на входных данных.

Это может сойти с рук при распараллеливании всей вашей программы, потому что в FP обычно не имеет значения, когда выполняется приложение функции, так как нет изменяемого состояния и, следовательно, нет возможных условий гонки. Единственная возможная задержка связана с доступностью зависимостей - есть ли у вас вход или нет. Если вы это сделаете, всегда безопасно передать ввод функции.

Теперь, насколько я понимаю (и здесь я немного потороплюсь), FPGA - относительно дешевый способ для исследователей увидеть, как эти идеи держатся в физическом мире. Вместо того чтобы проектировать и печатать интегральную схему, а затем заказывать оптовые номера, например, у Intel или AMD, академики могут просто запрограммировать массив шлюзов на отдельной готовой ПЛИС (опять же, если я правильно понимаю - я не аппаратный парень)).

Первые результаты выглядят очень многообещающе! Но на практике мы не видим, чтобы производители оборудования стремились к выпуску целых новых линий микросхем для языков FP. Существующие знания, инфраструктура и спрос на что-то вроде процессора Intel огромны. Императивное программирование остается гораздо более распространенным, чем функциональным, и это вряд ли изменится в ближайшем будущем.


Примечание: я предполагаю, что ваш вопрос об архитектуре "Говард" является ошибкой в ​​написании "Гарварда". Архитектура Гарварда очень похожа на архитектуру фон Неймана для целей этой темы.

Другие вопросы по тегам