Czy możemy zbudować funkcjonalny komputer?

12

Tak jak papka, jak FP, w końcu wszystkie nasze programy mają strukturę. Oznacza to, że nie ma znaczenia, jak czyste lub funkcjonalne je wykonujemy - zawsze są tłumaczone na asembler, więc to, co faktycznie działa za maskami, to instrukcje, stany i pętle. Naśladujemy FP.

Jako noob sprzętowy moje pytanie brzmi: dlaczego nie używamy architektur komputerowych, które faktycznie obliczały rzeczy w funkcjonalnym stylu? Na przykład komputer może składać się z prymitywnych „funkcjonalnych układów”, takich jak „konkat”, „mapa” i „redukcja”, a program po prostu mówi komputerowi, jak przepływać dane między tymi układami, aby obliczyć pożądany wynik , na przykład w językach konkatenatywnych.

szkic bzdury

To naprawdę nie ma sensu, ale może zilustrować to, co myślę.

MaiaVictor
źródło
5
Nie mam pod ręką linku, ale powstał układ Haskell, systemy eksperckie miały również specjalistyczny sprzęt lisp. Myślę, że możesz być bliżej mapy / zmniejszyć paradygmat sprzętowy niż cokolwiek innego. Jedyną korzyścią płynącą z FP jest skalowalność do równoległości. Pod wszystkimi innymi względami fp jest mniej wydajny, ponieważ jest mniej precyzyjny w instrukcjach ze względu na wyższy poziom abstrakcji. Na poziomie metalu króluje wydajność, a poza tym nawet na poziomie abstrakcji matematyki, w wykonaniu wszystko jest konieczne. Oblicz 2 * 3 + 5 bez wykonywania dwóch zamówionych kroków. To wszystko jest konieczne
Jimmy Hoffa
3
@ Off-line JimmyHoffa link do chipa: Reduceron .
Dan D.
1
Może Cię również zainteresować Verity, która jest kompilatorem rachunku Lambda o nazwie Call-by-name z rekurencją wyższego rzędu i afiniczną, która ma również bezwzględnie lokalne skutki dla statycznego sprzętu za pośrednictwem VHDL.
Dan D.
5
@Dokkat: if we could make a specialized chip for Filter, for example, it would need just a single clock for a Filter operation. Nie bardzo, ponieważ Filtr nie jest „operacją”; jest to funkcja wyższego rzędu, która stosuje dowolną zewnętrzną operację do listy. Nie można ograniczyć , że do jednego cyklu zegara.
Mason Wheeler
2
@Dokkat Jest to funkcja wyższego rzędu, ponieważ przyjmuje jako dane wejściowe funkcję. Ta absurdalna specyfika sprawia, że ​​twój przykład jest czymś, co można zrobić „za jednym razem”. Konkretna funkcja predykatu jest stała, a zatem nie jest tak naprawdę prawdziwym filtrem. Utworzenia filtra, który przyjmuje dowolną funkcję predykatu, nie można sprowadzić do pojedynczego cyklu zegara, ponieważ nie masz kontroli nad liczbą cykli zegara wymaganych przez funkcję wejściową.
Chewy Gumball

Odpowiedzi:

11

Robią takie komputery. Nazywa się to FPGA . Oczywiście układy FPGA obsługują zarówno logikę sekwencyjną, jak i kombinacyjną, ale nic nie stoi na przeszkodzie, abyś korzystał z kombinacji, jak sugerujesz.

W praktyce jednak logika sekwencyjna (taka ze stanem) jest niezwykle użyteczna nawet na poziomie układu. Po pierwsze, znacznie zmniejsza liczbę bramek logicznych wymaganych do rozwiązania problemu. Po drugie, rozwiązuje wiele problemów projektowych związanych z sygnałami mającymi różne opóźnienia propagacji.

Jeśli jesteś zainteresowany tego typu rzeczami, warto sprawdzić układy FPGA. Istnieje niedroga, przypominająca arduino deska o nazwie papilio, która jest idealna dla początkujących. Ludzie używają go do wszystkiego, od kontroli robota po wydobycie bitcoinów.

Karl Bielefeldt
źródło
Dzięki za odpowiedź, czytam na stronie Wikipedii - ale czy FPGA nie jest generycznym programowalnym sprzętem, a nie sprzętem specjalizowanym do programowania funkcjonalnego, jak na moim szkicu?
MaiaVictor
1
„Algorytm sortowania FPGA” Google, jeśli chcesz zobaczyć, jak to się robi. To, co narysowałeś, to programowalny kombinacyjny obwód logiczny, który jest dokładnie tym, do czego przeznaczona jest FPGA.
Karl Bielefeldt
Wspaniale, przeprowadzę moje badania!
MaiaVictor
jeśli w ogóle nie masz sekwencjonowania, to naprawdę patrzysz na elektronikę analogową
jk.
2
@jk To nie do końca prawda; weźmy na przykład jednostkę arytmetyczno-logiczną w prostym procesorze, który jest cyfrowy i (czysty) kombinacyjny.
m3th0dman
8

Essentiall, tak, komputery analogowe działały w ten sposób: zmieniałeś parametry i odpowiednio modyfikowano prąd elektryczny. To sprawiło, że w latach 50. stały się „szybsze” - nie przejmowałeś się powolnym tworzeniem i modyfikacją oddzielnych „stanów” jak w starych cyfrowych potworach.

I zapewne komputery kwantowe również mogą działać w ten sposób: jeśli stan niektórych zjawisk kwantowych zależy od stanu innych, wówczas zmiana stanu „początkowego” spowoduje jednoczesną zmianę następujących stanów - brak „stanów” pomiędzy nimi.

Eneasz
źródło
3
+1 za wzmiankę o komputerach kwantowych, myślę, że umiejętność robienia rzeczy takich, jak sugeruje OP, będzie główną korzyścią dla nich, kiedy faktycznie się zmaterializują
Jimmy Hoffa