Esistono applicazioni pratiche per i modelli di programmazione non von Neumann? Quali sono i linguaggi di programmazione non von Neumann più ampiamente adottati?
Esistono applicazioni pratiche per i modelli di programmazione non von Neumann? Quali sono i linguaggi di programmazione non von Neumann più ampiamente adottati?
Risposte:
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?
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:
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.
Clojure, Scala e F # sono linguaggi funzionali meno puri, ma più pratici e popolari. F # è anche amico dello stile senza punti.
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 .
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.
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:
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 .