Potremmo costruire un computer funzionale?


12

Alla fine come FP ha fatto, alla fine, tutti i nostri programmi sono strutturati. Cioè, non importa quanto li facciamo puri o funzionali: sono sempre tradotti in assemblaggio, quindi ciò che scorre dietro le cappe sono istruzioni, stati e loop. Stiamo emulando FP.

Come noob dell'hardware, la mia domanda è: perché non stiamo usando architetture di computer che in realtà calcolano le cose in uno stile funzionale? Ad esempio, un computer potrebbe consistere in "chip funzionali" primitivi come "concat", "map" e "ridurre", e un programma direbbe semplicemente al computer come far fluire i dati tra quei chip per calcolare il risultato desiderato , come nelle lingue concatenative.

schizzo senza senso

Questo non ha davvero senso, ma potrebbe illustrare ciò che sto pensando.


5
Non ho il link fuori mano, ma è stato realizzato un chip Haskell, anche i sistemi esperti avevano hardware lisp specializzato. Penso che potresti essere più vicino alla mappa / ridurre il paradigma nell'hardware di ogni altra cosa però. L'unico vantaggio perfetto di FP è la scalabilità al parallelismo. In tutti gli altri modi, il fp è meno performante perché è meno fine nelle sue istruzioni a causa di un livello di astrazione più elevato. A livello di metallo le prestazioni sono il re, e oltre a livello di astrazione della matematica, nell'esecuzione tutto è indispensabile. Calcola 2 * 3 + 5 senza eseguire due passaggi ordinati. È tutto imperativo
Jimmy Hoffa

3
@ JimmyHoffa's chip link haskell fuori mano: Reduceron .
Dan D.

1
Inoltre potresti essere interessato a Verity, che è un compilatore per un calcolo Lambda chiamato per nome con ricorsione di ordine superiore e affine che ha anche effetti locali imperativi sull'hardware statico tramite 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. Non proprio, perché Filter non è "un'operazione"; è una funzione di ordine superiore che applica un'operazione esterna arbitraria a un elenco. Non si può ridurre il che per un singolo ciclo di clock.
Mason Wheeler,

2
@Dokkat È una funzione di ordine superiore, poiché richiede come input una funzione. La ridicola specificità è ciò che rende il tuo esempio qualcosa che può essere fatto "in una sola operazione". La specifica funzione predicato è costante e quindi non è proprio un vero filtro. La creazione di un filtro che accetta una funzione di predicato arbitraria non può essere ridotta a un singolo ciclo di clock perché non si ha il controllo su quanti cicli di clock accetta la funzione di input.
Chewy Gumball,

Risposte:


11

Fanno i computer così. Si chiama FPGA . Naturalmente, gli FPGA supportano sia la logica sequenziale che quella combinatoria, ma non c'è nulla che ti impedisca di usare semplicemente la parte combinatoria come stai suggerendo.

In pratica, tuttavia, la logica sequenziale (il tipo con stato) è estremamente utile anche a livello di chip. Per prima cosa, riduce significativamente il numero di porte logiche necessarie per risolvere un problema. Per un altro, risolve molti problemi di progettazione relativi a segnali con ritardi di propagazione diversi.

Se sei interessato a questo genere di cose, vale la pena dare un'occhiata agli FPGA. C'è una tavola economica simile all'arduino chiamata papilio che è ottima per i principianti. Le persone lo usano per tutto, dal controllo robotizzato al mining di bitcoin.


Grazie per la risposta, sto leggendo la pagina di Wikipedia su di essa - ma FPGA non è un hardware programmabile generico piuttosto che un hardware specializzato per la programmazione funzionale, come nel mio schizzo?
MaiaVictor

1
"Algoritmo di ordinamento fpga" di Google se vuoi vedere come è fatto. Quello che hai disegnato è un circuito logico combinatorio programmabile, che è esattamente quello per cui è progettato un FPGA.
Karl Bielefeldt

Splendido, farò le mie ricerche!
MaiaVictor

se non hai alcun sequenziamento, allora stai davvero guardando l'elettronica analogica
jk.

2
@jk Non è proprio vero; prendiamo ad esempio l'unità logico-matematica in una semplice CPU che è digitale e (pura) combinatoria.
m3th0dman

8

Essenzialmente, sì, i computer analogici funzionavano in questo modo: stavi cambiando i parametri e una corrente elettrica veniva modificata di conseguenza. Questo è ciò che li ha resi "più veloci", per un certo periodo, negli anni '50: non ti importava della lenta creazione e modifica di "stati" separati come nei vecchi colossi digitali.

E probabilmente anche i computer quantistici potrebbero funzionare in questo modo: se lo stato di alcuni fenomeni quantistici dipende dallo stato di altri, allora cambiando alcuni stati "iniziali" cambieranno simultaneamente i seguenti stati - senza "stati" tra di loro.


3
+1 per menzionare i computer quantistici, penso che la capacità di fare cose come l'OP sta suggerendo sarà il principale vantaggio per questi quando si materializzeranno davvero
Jimmy Hoffa,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.