Что такое практическая архитектура не фон Неймана?

16

Существуют ли практические применения для моделей программирования не фон Неймана? Каковы наиболее распространенные языки программирования не фон Неймана?

Лен Яблоко
источник
6
Что такое модель программирования "не фон Неймана"?
Суреш Венкат
Я также не понимаю вопрос, может быть, вы можете добавить некоторые вопросы к этому вопросу, чтобы стало легче понять, что вы спрашиваете.
Каве
3
Архитектура фон Неймана имеет процессор. следовательно, архитектура параллельной обработки, возможно, не принадлежит Нейману (архитектура Неймана была изобретена до параллельной обработки). но согласился, что вопрос кажется двусмысленным или неопределенным. Фон Нейман относится к компьютерной архитектуре, а не к модели программирования. модель программирования и архитектура процессора / компьютера существуют в своего рода синергии / симбиозе, но также в некоторой степени независимы друг от друга ... разные архитектуры могут реализовывать разные модели программирования без "привязки" модели программирования к архитектуре ...
2015 года
1
Что такое не-фон Неймана программирования языка ? В этом отношении, что такое язык программирования фон Неймана? (Я не нахожу определение Бэкуса - по сути, «императивные языки» - даже немного убедительным.)
Джефф
1
@Ronny: страница в Википедии просто попугайует статью Бэкуса.
Джеффс

Ответы:

12

Когда я говорю «архитектура фон Неймана», я имею в виду какое-то оборудование, которое ограничено «узким местом фон Неймана», т. Е. Все данные передаются через некоторую узкую шину данных.

Языки программирования не фон Неймана, с которыми я сталкиваюсь чаще всего, это VHDL и Verilog . В VHDL и Verilog по умолчанию все происходит одновременно. Программист должен приложить дополнительные усилия, чтобы серия событий происходила в последовательном порядке. Это очень отличается от большинства других языков программирования, которые подразумевают «указатель инструкций», который по умолчанию выполняет не более одной строки кода в любой момент времени, и программист должен приложить дополнительные усилия для одновременного выполнения нескольких задач. время.

Некоторые люди скажут, что это более естественный дефолт. Многие начинающие студенты-программисты ожидают, что цикл while (x> 0) {...} выйдет в тот момент, когда x станет равным нулю, и они с удивлением узнают, что компьютер не может постоянно оценивать это условие.

Большинство людей, пишущих код VHDL и Verilog, компилируют свои программы на FPGA, создавая небольшие блоки активности, которые все время работают на полной скорости. Часто такие люди устанавливают «конвейер», который считывает данные с входных контактов, обрабатывает их через серию блоков, выходные контакты одного блока напрямую подключаются к входным контактам следующего блока, а последний блок отправляет результат выходные выводы. Это напоминает конвейер Unix , за исключением того, что вводится новый фрагмент данных и новый фрагмент данных выходит на каждом тактовом цикле.

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

Вы также можете быть заинтересованы в: Существуют ли другие компьютерные архитектуры помимо архитектур Неймана и Тьюринга?

Дэвид Кэри
источник
11

Я предполагаю, что под не фон Нейманом вы подразумеваете языки, которые обошли «узкое место фон Неймана» согласно статье Бэкуса «Можно ли освободить программирование от стиля фон Неймана?». Для тех, кто заинтересован, вы можете найти копию здесь: http://www.thocp.net/biographies/papers/backus_turingaward_lecture.pdf

Ответ на ваш вопрос должен быть неоднозначным по нескольким причинам.

Во-первых, какие языки удовлетворяли критериям в его статье? Хотя есть те, которые прослеживают функциональное программирование в этой статье, это теперь расценивается как недоразумение, поскольку он имел в виду нечто вроде бессмысленного программирования. Так вы идете с первоначальным недоразумением или истинным намерением газеты? Чтобы немного прояснить, что он имел в виду, пожалуйста, смотрите следующее: http://en.wikipedia.org/wiki/Function-level_programming

Во-вторых, если вы идете с недоразумением, насколько функционал функционален? У вас есть чисто функциональные языки, нечистые функциональные языки и языки, которые относительно дружественны к функциональной парадигме. Учитывая, что вы упоминаете популярность и существует обратная связь между этим и функциональной чистотой, какие языки должны быть включены? Хотите ли вы самый популярный чисто функциональный язык (который вообще не был бы популярен) или более популярный, который удовлетворяет некоторым минимальным критериям «функциональности»? Если последнее, каковы эти критерии?

Итак, в зависимости от вашей точки зрения:

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

  2. Clojure, Scala и F # - менее чистые, но более практичные и популярные функциональные языки. F # также дружелюбен к стилю без очков.

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

  4. Бакус упомянул APL (возможно, не в своей статье) как шаг навстречу, но не полностью совместимый с его целями. В свое время он был большим в финансовом секторе. Обязательно ознакомьтесь с его потомками, вроде J.

  5. JavaScript не является функциональным, но он довольно дружелюбен к стилю программирования более высокого порядка, о чем свидетельствует его интенсивное использование замыканий. Учитывая его популярность, он может просто соответствовать критериям. Обязательно ознакомьтесь с некоторыми интересными вещами, выполненными с помощью JavaScript, такими как реализация каррирования и комбинатора.

В качестве сноски, чтобы дать вам более полное представление о его целях, вы можете проверить два языка, которые он разработал, чтобы соответствовать его критериям. Они совсем не популярны на AFAIK, так что это будет чисто ради знания:

http://en.wikipedia.org/wiki/FP_(programming_language )

http://en.wikipedia.org/wiki/FL_(programming_language )

Ronny
источник
1
Теперь кажется, что он имел в виду нечто вроде бессмысленного программирования, а не функционального программирования - есть ли какой-то указатель на обсуждение этого вопроса? звучит интересно.
Суреш Венкат
Модель программирования Backus называется «Программирование на уровне функций», и здесь есть статья: en.wikipedia.org/wiki/Function-level_programming . Я не знаю каких-либо действительно хороших ссылок (я хотел бы знать, если вы их найдете!), Но Google «Программирование на уровне функций» приводит к некоторым интересным ссылкам, включая видео.
Ронни
1
@SureshVenkat: языки FP и FL были созданы Backus специально для поддержки его идеи программирования на функциональном уровне. См. Также «молчаливое программирование» и, в частности, язык J , который сочетает в себе APL и FP / FL для создания того, что может быть как наиболее загадочным, так и наиболее выразительным языком общего назначения в реальном использовании. Я также вспоминаю пост на SO об использовании неявного программирования на функциональных языках.
CA McCann
Между прочим, хронология в этом посте, кажется, значительно отличается. Функциональное программирование (как в традициях Lisp, так и в ML) задолго до начала лекции Бьюса о премии Тьюринга, как и большинство или все существующие парадигмы программирования, включая само программирование на уровне функций, в форме комбинаторной логики , предшествующей как лямбда-исчислению Черча, так и Тьюрингу. работа по теории вычислений! (Да, и я бы гораздо лучше использовать Haskell для практических целей в реальном мире , чем зверство , как JavaScript.)
CA McCann
@camccann Я никогда не устанавливал хронологию в посте. Кроме того, Lisp слишком широк, чтобы поддерживать какие-либо утверждения. Например, не все Лиспы являются функциональными, поскольку не все являются хвостовыми рекурсивными. Мне нравится ваша ссылка на Combinatory Logic, но я думаю, что смысл Бэкуса заключался в том, чтобы иметь язык, на котором можно запрограммировать компьютер, поддерживающий эту парадигму. Поэтому, хотя «Комбинаторная логика» проливает свет на его аргументы, в конечном итоге это не влияет на его точку зрения.
Ронни
2

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

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

См. Википедию для ссылок (я новый пользователь и под защитой от спама), но для некоторого софомора юмора относительно имени Линды, прочитайте http://c2.com/cgi/wiki?LindaEtymology .

Джим Мейер
источник