Можем ли мы построить функциональный компьютер?

12

Как и FP, в конце концов, все наши программы структурированы. То есть не имеет значения, насколько чистыми или функциональными мы их создаем - они всегда переводятся в сборку, поэтому то, что на самом деле скрывается за капотами, это инструкции, состояния и циклы. Мы как бы подражаем ФП.

Как аппаратный нуб, мой вопрос: почему мы не используем компьютерные архитектуры, которые фактически вычисляют вещи в функциональном стиле? Например, компьютер может состоять из примитивных «функциональных микросхем», таких как «concat», «map» и «Reduce», и программа просто скажет компьютеру, как передавать данные между этими микросхемами, чтобы вычислить желаемый результат. Например, в конкатенационных языках.

бессмысленный набросок

Это не имеет смысла, но может проиллюстрировать, о чем я думаю.

MaiaVictor
источник
5
У меня нет связи, но был изготовлен чип на Haskell, в экспертных системах также было специальное оборудование LISP. Я думаю, что вы могли бы быть ближе к карте / уменьшить парадигму в оборудовании, чем что-либо еще, хотя. Единственное преимущество FP - это масштабируемость до параллелизма. Во всех других отношениях fp менее производительный, потому что он менее детализирован в инструкциях из-за более высокого уровня абстракции. На уровне металла производительность является королем, и, кроме того, даже на уровне абстракции по математике, в исполнении все является обязательным условием. Вычислить 2 * 3 + 5, не делая двух заказанных шагов. Это все обязательно
Джимми Хоффа
3
Ссылка на чип от Haskell @ JimmyHoffa: Редуцерон .
Дэн Д.
1
Также вас может заинтересовать Verity, которая является компилятором для лямбда-исчисления с именем по имени с высоким порядком и аффинной рекурсией, которая также имеет обязательные локальные эффекты для статического оборудования через VHDL.
Дэн Д.
5
@Dokkat: if we could make a specialized chip for Filter, for example, it would need just a single clock for a Filter operation. Не совсем, потому что Filter не является «операцией»; это функция высшего порядка, которая применяет произвольную внешнюю операцию к списку. Вы не можете уменьшить это до одного такта.
Мейсон Уилер
2
@Dokkat Это функция высшего порядка, так как она принимает на вход функцию. Смешная специфика - это то, что делает ваш пример чем-то, что можно сделать «за одну операцию». Конкретная функция предиката является константой, и поэтому она не является истинным фильтром. Создание фильтра, который принимает произвольную функцию предиката, не может быть сведено к одному такту, потому что вы не можете контролировать, сколько тактов занимает входная функция.
Chewy Gumball

Ответы:

11

Они делают компьютеры такими. Это называется ПЛИС . Конечно, ПЛИС поддерживают как последовательную, так и комбинационную логику, но ничто не мешает вам просто использовать комбинационную часть, как вы предлагаете.

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

Если вы заинтересованы в подобных вещах, то вам стоит проверить FPGA. Есть недорогая ардуино-подобная доска под названием papilio, которая отлично подходит для начинающих. Люди используют его для всего: от контроля роботов до майнинга биткойнов.

Карл Билефельдт
источник
Спасибо за ответ, я читаю на ней страницу Википедии - но не является ли FPGA универсальным программируемым оборудованием, а не оборудованием, специально предназначенным для функционального программирования, как на моем наброске?
MaiaVictor
1
Google "алгоритм сортировки fpga", если вы хотите увидеть, как это делается. То, что вы нарисовали, представляет собой программируемую комбинационную логическую схему, которая является именно тем, для чего предназначена ПЛИС.
Карл Билефельдт
Великолепно, я сделаю свое исследование!
MaiaVictor
если у вас нет последовательности, то вы действительно смотрите на аналоговую электронику
JK.
2
@jk Это не совсем так; Возьмем, к примеру, арифметико-логическую единицу в простом ЦП, который является цифровым и (чисто) комбинационным.
m3th0dman
8

В сущности, да, аналоговые компьютеры работали так: вы меняли параметры, и электрический ток изменялся соответствующим образом. Это то, что на некоторое время сделало их «более быстрыми» в 1950-х годах - вас не заботило медленное создание и изменение отдельных «состояний», как в старых цифровых бегемотах.

И, возможно, квантовые компьютеры тоже могут работать таким образом: если состояние некоторых квантовых явлений зависит от состояния других, то изменение некоторого «начального» состояния изменит одновременно следующие состояния - никаких промежуточных «состояний» между ними.

Эней
источник
3
+1 за упоминание квантовых компьютеров, я думаю, что способность делать такие вещи, как предлагает ОП, станет для них главным преимуществом, когда они действительно материализуются
Джимми Хоффа