Cos'è una pratica architettura non von Neumann?


16

Esistono applicazioni pratiche per i modelli di programmazione non von Neumann? Quali sono i linguaggi di programmazione non von Neumann più ampiamente adottati?


6
che cos'è un modello di programmazione "non von Neumann"?
Suresh Venkat,

Inoltre non capisco la domanda, forse puoi aggiungere un po 'di background alla domanda in modo che sia più facile capire cosa stai chiedendo.
Kaveh,

3
L'architettura di von Neumann ha una CPU. pertanto un'architettura di elaborazione parallela è probabilmente non-von Neumann (l'architettura neumann è stata inventata prima dell'elaborazione parallela). ma concordato che la domanda sembra ambigua o definita sfocata. von Neumann si riferisce ad un'architettura informatica, non proprio un modello di programmazione. il modello di programmazione e l'architettura cpu / computer esistono in una sorta di sinergia / simbiosi ma sono anche in qualche modo indipendenti l'uno dall'altro .... architetture diverse possono implementare diversi modelli di programmazione senza che il modello di programmazione sia "accoppiato" all'architettura ...
dal

1
Che cos'è un linguaggio di programmazione non von Neumann ? Del resto, che cos'è un linguaggio di programmazione von Neumann? (Non trovo la definizione di Backus --- essenzialmente "linguaggi imperativi" --- anche un po 'avvincente.)
Jeffε

1
@Ronny: la pagina di Wikipedia appoggia semplicemente l'articolo di Backus sui pappagalli.
Jeffε

Risposte:


12

Quando dico "architettura di von Neumann", intendo un po 'di hardware che è limitato dal "collo di bottiglia di von Neumann" - cioè, ha tutti i dati incanalati attraverso un bus dati stretto.

I linguaggi di programmazione non von Neumann in cui mi imbatto spesso sono VHDL e Verilog . In VHDL e Verilog, per impostazione predefinita, tutto accade contemporaneamente. Il programmatore deve fare uno sforzo extra per far accadere una serie di eventi in ordine sequenziale. Questo è molto diverso dalla maggior parte degli altri linguaggi di programmazione che implicano un "puntatore di istruzioni" che, per impostazione predefinita, esegue al massimo una riga di codice in un solo istante e il programmatore deve fare uno sforzo supplementare per far accadere più cose contemporaneamente tempo.

Alcune persone direbbero che è un default più naturale. Molti studenti che iniziano a programmare si aspettano un ciclo "while (x> 0) {...}" per uscire dall'istante in cui x diventa uguale a zero e sono sorpresi di apprendere che il computer non valuta continuamente tale condizione.

La maggior parte delle persone che scrivono codice VHDL e Verilog compilano i loro programmi su FPGA, creando piccoli blocchi di attività che funzionano sempre alla massima velocità. Spesso tali persone creano una "pipeline" che legge i dati dai pin di input, li elabora attraverso una serie di blocchi, i pin di output di un blocco direttamente collegati ai pin di input del blocco successivo e il blocco finale invia il risultato i pin di uscita. Ricorda la pipeline Unix , tranne per il fatto che un nuovo pezzo di dati entra e un nuovo pezzo di dati esce ad ogni ciclo di clock.

I pin di input, gli stadi intermedi e i pin di output sono tutti indipendenti l'uno dall'altro: non è necessario riutilizzare un singolo bus dati multiplexato tra i vari pezzi di dati.

Potresti anche essere interessato a: Esistono altre architetture di computer oltre alle architetture von neumann / turing?


11

Presumo che non Von Neumann, intendi le lingue che hanno aggirato il "Collo di bottiglia di Von Neumann" come nel documento di Backus "La programmazione può essere liberata dallo stile di Von Neumann?". Per coloro che sono interessati, puoi trovarne una copia qui: http://www.thocp.net/biographies/papers/backus_turingaward_lecture.pdf

La risposta alla tua domanda dovrà essere ambigua per alcuni motivi.

Innanzitutto, quali lingue soddisfano i criteri nel suo documento? Anche se ci sono quelli che tracciano la programmazione funzionale di questo documento, ora è considerato un malinteso in quanto intendeva qualcosa di simile a una programmazione senza punti. Quindi segui il malinteso originale o il vero intento del documento? Per un po 'di elaborazione su cosa intendesse, vedere quanto segue: http://it.wikipedia.org/wiki/Function-level_programming

In secondo luogo, se segui l'incomprensione, quanto funzionale è funzionale? Hai linguaggi funzionali puri, linguaggi funzionali impuri e linguaggi relativamente amichevoli con il paradigma funzionale. Considerando che menzioni popolarità e che esiste una relazione inversa tra quella e la purezza funzionale, quali lingue dovrebbero essere incluse? Vuoi il linguaggio funzionale puro più popolare (che non sarebbe affatto popolare) o uno più popolare che soddisfi alcuni criteri minimi di "funzionalità"? Se quest'ultimo, quali sono questi criteri?

Quindi, a seconda del tuo punto di vista:

  1. Haskell è il più popolare dei linguaggi funzionali completamente puri che conosco e ci sono applicazioni scritte in esso. Tuttavia, seppur pesante nella comunità di programmazione funzionale, non è popolare nella più ampia comunità di programmazione. Inoltre, dopo averlo usato, non pensavo fosse pratico per l'uso nel mondo reale, e sembra essere apprezzato per il lavoro teorico. Permette uno stile senza punti, quindi puoi avvicinarti ad alcuni degli obiettivi di Backus.

  2. Clojure, Scala e F # sono linguaggi funzionali meno puri, ma più pratici e popolari. F # è anche amico dello stile senza punti.

  3. Forth potrebbe essere l'esempio prototipo di un linguaggio privo di punti, ed era abbastanza diffuso ai suoi tempi, anche se ora ... Factor è un altro linguaggio privo di punti che ha attirato l'attenzione, ma dubito che corrispondesse alla popolarità di Forth ai suoi tempi d'oro .

  4. L'APL è stato citato da Backus ad un certo punto (forse non nel suo documento) come un passo avanti, ma non pienamente compatibile con i suoi obiettivi. Ai suoi tempi era grande nel settore finanziario. Assicurati di dare un'occhiata ai suoi discendenti, come J.

  5. JavaScript non è funzionale, ma è piuttosto amichevole verso uno stile di programmazione di ordine superiore, come dimostra il suo uso intenso di chiusure. Data la sua popolarità, potrebbe semplicemente soddisfare i criteri. Assicurati di dare un'occhiata ad alcune delle cose interessanti fatte con JavaScript, come il curry e l'implementazione del combinatore.

Come nota a piè di pagina, per darti maggiori prospettive sui suoi obiettivi, puoi controllare le due lingue che ha progettato per soddisfare i suoi criteri. Non sono affatto popolari AFAIK, quindi questo sarebbe puramente per il gusto della conoscenza:

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

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


1
Sembra ora che intendesse qualcosa di simile a una programmazione priva di punti piuttosto che a una programmazione funzionale - c'è qualche suggerimento per una discussione su questo? sembra interessante.
Suresh Venkat,

Il modello di programmazione di Backus si chiama "Programmazione a livello di funzione", e qui c'è un articolo: en.wikipedia.org/wiki/Function-level_programming . Non conosco alcun link davvero buono (mi piacerebbe sapere se ne trovi qualcuno!), Ma Google "Programmazione a livello di funzione" rivela alcuni link interessanti, incluso un video.
Ronny,

1
@SureshVenkat: le lingue FP e FL sono state create da Backus appositamente per supportare la sua idea di programmazione a livello di funzione. Vedi anche "programmazione tacita" e più specificamente il linguaggio J , che combina APL e FP / FL per creare quello che potrebbe essere il linguaggio più criptico e il più espressivo per scopi generali nell'uso reale. Ricordo anche un post su SO sull'uso della programmazione tacita in linguaggi funzionali.
CA McCann,

Per inciso, la cronologia in questo post sembra significativamente off. La programmazione funzionale (nelle tradizioni Lisp e ML) precede da tempo la lezione del Premio Turing di Backus, così come la maggior parte o tutti i paradigmi di programmazione esistenti - inclusa la stessa programmazione a livello di funzione, sotto forma di Logica Combinatoria , che precede sia il calcolo lambda della Chiesa sia quello di Turing lavorare sulla teoria del calcolo! (Oh, e preferirei di gran lunga usare Haskell per scopi pratici nel mondo reale piuttosto che un'atrocità come Javascript.)
CA McCann

@camccann Non ho mai impostato una cronologia nel post. Inoltre, Lisp è troppo ampio per supportare qualsiasi affermazione. Ad esempio, non tutti i Lisps sono funzionali in quanto non tutti sono ricorsivi di coda. Mi piace il tuo riferimento a Combinatory Logic, ma penso che il punto di Backus fosse avere un linguaggio con cui si possa programmare un computer che supporti il ​​paradigma. Pertanto, mentre la Combinatory Logic fa luce sul suo argomento, alla fine non influenza il suo punto.
Ronny,

2

Penso che Linda e la programmazione di tuplespace possano adattarsi al conto. Le operazioni di memoria associative / pattern corrispondenti alla concorrenza significano che (concettualmente) il collo di bottiglia di Von-Neuman viene eliminato.

Andando in quella direzione, anche i linguaggi modello attore modellano la comunicazione piuttosto che il sequenziamento delle istruzioni. E sebbene siano formalismi e non veri e propri linguaggi di programmazione, i calcoli di processo come Pi calculus, CSP e Petri Nets modellano la comunicazione in modi correlati.

Vedi Wikipedia per i collegamenti (sono un nuovo utente e sotto la protezione antispam), ma per un po 'di umorismo secondo il nome di Linda, leggi http://c2.com/cgi/wiki?LindaEtymology .

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.