Существуют ли практические применения для моделей программирования не фон Неймана? Каковы наиболее распространенные языки программирования не фон Неймана?
Существуют ли практические применения для моделей программирования не фон Неймана? Каковы наиболее распространенные языки программирования не фон Неймана?
Ответы:
Когда я говорю «архитектура фон Неймана», я имею в виду какое-то оборудование, которое ограничено «узким местом фон Неймана», т. Е. Все данные передаются через некоторую узкую шину данных.
Языки программирования не фон Неймана, с которыми я сталкиваюсь чаще всего, это VHDL и Verilog . В VHDL и Verilog по умолчанию все происходит одновременно. Программист должен приложить дополнительные усилия, чтобы серия событий происходила в последовательном порядке. Это очень отличается от большинства других языков программирования, которые подразумевают «указатель инструкций», который по умолчанию выполняет не более одной строки кода в любой момент времени, и программист должен приложить дополнительные усилия для одновременного выполнения нескольких задач. время.
Некоторые люди скажут, что это более естественный дефолт. Многие начинающие студенты-программисты ожидают, что цикл while (x> 0) {...} выйдет в тот момент, когда x станет равным нулю, и они с удивлением узнают, что компьютер не может постоянно оценивать это условие.
Большинство людей, пишущих код VHDL и Verilog, компилируют свои программы на FPGA, создавая небольшие блоки активности, которые все время работают на полной скорости. Часто такие люди устанавливают «конвейер», который считывает данные с входных контактов, обрабатывает их через серию блоков, выходные контакты одного блока напрямую подключаются к входным контактам следующего блока, а последний блок отправляет результат выходные выводы. Это напоминает конвейер Unix , за исключением того, что вводится новый фрагмент данных и новый фрагмент данных выходит на каждом тактовом цикле.
Входные контакты, промежуточные каскады и выходные контакты не зависят друг от друга - вам не нужно повторно использовать одну шину данных, мультиплексированную между различными частями данных.
Вы также можете быть заинтересованы в: Существуют ли другие компьютерные архитектуры помимо архитектур Неймана и Тьюринга?
Я предполагаю, что под не фон Нейманом вы подразумеваете языки, которые обошли «узкое место фон Неймана» согласно статье Бэкуса «Можно ли освободить программирование от стиля фон Неймана?». Для тех, кто заинтересован, вы можете найти копию здесь: http://www.thocp.net/biographies/papers/backus_turingaward_lecture.pdf
Ответ на ваш вопрос должен быть неоднозначным по нескольким причинам.
Во-первых, какие языки удовлетворяли критериям в его статье? Хотя есть те, которые прослеживают функциональное программирование в этой статье, это теперь расценивается как недоразумение, поскольку он имел в виду нечто вроде бессмысленного программирования. Так вы идете с первоначальным недоразумением или истинным намерением газеты? Чтобы немного прояснить, что он имел в виду, пожалуйста, смотрите следующее: http://en.wikipedia.org/wiki/Function-level_programming
Во-вторых, если вы идете с недоразумением, насколько функционал функционален? У вас есть чисто функциональные языки, нечистые функциональные языки и языки, которые относительно дружественны к функциональной парадигме. Учитывая, что вы упоминаете популярность и существует обратная связь между этим и функциональной чистотой, какие языки должны быть включены? Хотите ли вы самый популярный чисто функциональный язык (который вообще не был бы популярен) или более популярный, который удовлетворяет некоторым минимальным критериям «функциональности»? Если последнее, каковы эти критерии?
Итак, в зависимости от вашей точки зрения:
Haskell - самый популярный из полностью известных мне функциональных языков, и на нем написаны приложения. Однако, несмотря на большой вес в сообществе функционального программирования, он не популярен в более широком сообществе программистов. Кроме того, используя его, я не чувствовал, что это практично для реального использования, и, кажется, его ценят за теоретическую работу. Он допускает стиль без очков, так что вы можете приблизиться к некоторым целям Backus с этим.
Clojure, Scala и F # - менее чистые, но более практичные и популярные функциональные языки. F # также дружелюбен к стилю без очков.
Forth может быть прототипом примера языка без точек, и это было довольно широко распространено в свое время, хотя сейчас ... Factor - еще один язык без точек, который привлек некоторое внимание, но я сомневаюсь, что он соответствовал популярности Forth в его расцвете ,
Бакус упомянул APL (возможно, не в своей статье) как шаг навстречу, но не полностью совместимый с его целями. В свое время он был большим в финансовом секторе. Обязательно ознакомьтесь с его потомками, вроде J.
JavaScript не является функциональным, но он довольно дружелюбен к стилю программирования более высокого порядка, о чем свидетельствует его интенсивное использование замыканий. Учитывая его популярность, он может просто соответствовать критериям. Обязательно ознакомьтесь с некоторыми интересными вещами, выполненными с помощью JavaScript, такими как реализация каррирования и комбинатора.
В качестве сноски, чтобы дать вам более полное представление о его целях, вы можете проверить два языка, которые он разработал, чтобы соответствовать его критериям. Они совсем не популярны на AFAIK, так что это будет чисто ради знания:
Я думаю, что Линда и программирование в кортежах могли бы соответствовать всем требованиям. Операции памяти с ассоциативным сопоставлением с шаблоном и параллелизмом означают, что (концептуально) узкое место фон Неймана устранено.
Двигаясь в этом направлении, языки с чистой актерской моделью также моделируют коммуникацию, а не последовательность команд. И хотя они являются формализмами, а не фактическими языками программирования, исчисления процессов, такие как исчисление Пи, CSP и сети Петри, моделируют взаимодействие связанными способами.
См. Википедию для ссылок (я новый пользователь и под защитой от спама), но для некоторого софомора юмора относительно имени Линды, прочитайте http://c2.com/cgi/wiki?LindaEtymology .