Existem aplicações práticas para modelos de programação que não sejam da von Neumann? Quais são as linguagens de programação não-von Neumann mais amplamente adotadas?
Existem aplicações práticas para modelos de programação que não sejam da von Neumann? Quais são as linguagens de programação não-von Neumann mais amplamente adotadas?
Respostas:
Quando digo "arquitetura de von Neumann", quero dizer algum hardware limitado pelo "gargalo de von Neumann" - ou seja, todos os dados são canalizados através de um barramento de dados estreito.
As linguagens de programação que não são da von Neumann nas quais me deparo com mais frequência são VHDL e Verilog . No VHDL e no Verilog, por padrão, tudo acontece ao mesmo tempo. O programador precisa fazer um esforço extra para que uma série de eventos ocorra em ordem seqüencial. Isso é muito diferente da maioria das outras linguagens de programação que implicam um "ponteiro de instrução" que, por padrão, executa no máximo uma linha de código a qualquer instante, e o programador precisa fazer um esforço extra para que várias coisas aconteçam ao mesmo tempo. Tempo.
Algumas pessoas diriam que esse é um padrão mais natural. Muitos estudantes de programação iniciantes esperam que um loop "while (x> 0) {...}" saia no instante em que x se torna igual a zero, e eles ficam surpresos ao saber que o computador não avalia continuamente essa condição.
A maioria das pessoas que escrevem códigos VHDL e Verilog compila seus programas em FPGAs, criando pequenos blocos de atividades que são executados em velocidade máxima o tempo todo. Frequentemente, essas pessoas criam um "pipeline" que lê dados dos pinos de entrada, processa-os através de uma série de blocos, os pinos de saída de um bloco diretamente conectados aos pinos de entrada do próximo bloco e o bloco final envia o resultado os pinos de saída. É uma reminiscência do pipeline do Unix , exceto que uma nova parte de dados entra e uma nova parte de dados sai a cada ciclo do relógio.
Os pinos de entrada, os estágios intermediários e os pinos de saída são todos independentes - você não precisa reutilizar um único barramento de dados multiplexado entre as várias partes de dados.
Você também pode estar interessado em: Existem outras arquiteturas de computadores além das arquiteturas von neumann / turing?
Suponho que por não Von Neumann, você quer dizer idiomas que contornaram o "Gargalo de Von Neumann", conforme o artigo de Backus "A programação pode ser libertada do estilo Von Neumann?". Para os interessados, você pode encontrar uma cópia aqui: http://www.thocp.net/biographies/papers/backus_turingaward_lecture.pdf
A resposta à sua pergunta terá que ser ambígua por alguns motivos.
Primeiro, quais idiomas atendiam aos critérios de seu artigo? Embora existam aqueles que rastreiam a programação funcional neste artigo, isso agora é considerado um mal-entendido, pois ele quis dizer algo como programação sem pontos. Então você segue o mal-entendido original ou a verdadeira intenção do artigo? Para um pouco de elaboração sobre o que ele quis dizer, consulte o seguinte: http://en.wikipedia.org/wiki/Function-level_programming
Segundo, se você entender o mal-entendido, quão funcional é funcional? Você possui linguagens funcionais puras, linguagens funcionais impuras e linguagens relativamente amigáveis ao paradigma funcional. Considerando que você menciona popularidade e há uma relação inversa entre isso e pureza funcional, apenas quais idiomas devem ser incluídos? Deseja a linguagem funcional pura mais popular (que não seria popular) ou uma linguagem mais popular que atenda a alguns critérios mínimos de "funcionalidade"? Neste último caso, quais são esses critérios?
Então, dependendo do seu ponto de vista:
Haskell é a mais popular das linguagens funcionais completamente puras que eu conheço e existem aplicativos escritos nela. No entanto, embora um peso pesado na comunidade de programação funcional, ele não seja popular na comunidade de programação maior. Além disso, depois de usá-lo, não achei que fosse prático para uso no mundo real e parece ser valorizado pelo trabalho teórico. Ele permite um estilo sem pontos, para que você possa abordar alguns dos objetivos de Backus com isso.
Clojure, Scala e F # são linguagens funcionais menos puras, mas mais práticas e populares. O F # também é amigável ao estilo sem pontos.
Quarto adiante, pode ser o exemplo prototípico de uma linguagem sem pontos, e era bastante difundida em seus dias, embora agora ... O fator é outra linguagem sem pontos que ganhou alguma atenção, mas duvido que tenha correspondido à popularidade de Forth em seu apogeu. .
Backus foi mencionado por Backus em um ponto (talvez não em seu artigo) como um passo em direção, mas não totalmente compatível com seus objetivos. Na sua época, era grande no setor financeiro. Não deixe de conferir seus descendentes, como J.
O JavaScript não é funcional, mas é bastante amigável para um estilo de programação de ordem superior, como evidenciado pelo uso intenso de fechamentos. Dada a sua popularidade, pode apenas atender aos critérios. Não deixe de conferir algumas das coisas interessantes feitas com JavaScript, como currying e implementação de combinadores.
Como nota de rodapé, para lhe dar mais perspectiva dos objetivos dele, você pode conferir os dois idiomas que ele projetou para atender a seus critérios. Eles não são populares de todo o AFAIK, portanto, isso seria puramente por uma questão de conhecimento:
Acho que a programação de Linda e tuplespace poderia se encaixar na conta. As operações de memória associativa / de correspondência de padrões com simultaneidade significam que (conceitualmente) o gargalo de Von-Neuman é eliminado.
Indo nessa direção, uma linguagem pura de modelo de ator também modela a comunicação, e não o seqüenciamento de instruções. E, embora sejam formalismos e não linguagens de programação reais, cálculos de processos como o cálculo Pi, CSP e redes de Petri modelam a comunicação de maneiras relacionadas.
Consulte a wikipedia para obter links (eu sou um novo usuário e com proteção contra spam), mas para obter algum humor sofisticado sobre o nome de Linda, leia http://c2.com/cgi/wiki?LindaEtymology .