Linguagens de programação de Von Neumann

Uma linguagem von Neumann em computação é uma linguagem de programação que é uma cópia isomórfica abstrata de alto nível de uma arquitetura von Neumann . [1] A partir de 2009 , a maioria das linguagens de programação atuais se enquadram nesta descrição [ carece de fontes ] , provavelmente como consequência do extenso domínio da arquitetura de computador von Neumann durante os últimos 50 anos.

As diferenças entre Fortran , C e até mesmo Java , embora consideráveis, são em última análise limitadas pelo fato de todos os três serem baseados no estilo de programação do computador de von Neumann. [ citação necessária ] Se, por exemplo, todos os objetos Java fossem executados em paralelo com passagem assíncrona de mensagens e endereçamento declarativo baseado em atributos, então Java não estaria no grupo.

O isomorfismo entre linguagens de programação e arquiteturas de von Neumann é da seguinte maneira:

  • variáveis ​​do programa ↔ células de armazenamento do computador
  • declarações de controle ↔ instruções de teste e salto do computador
  • instruções de atribuição ↔ instruções de busca e armazenamento
  • expressões ↔ referência de memória e instruções aritméticas.

Crítica

John Backus afirmou que as instruções de atribuição nas linguagens de von Neumann dividiam a programação em dois mundos. O primeiro mundo consiste em expressões , um espaço matemático ordenado com propriedades algébricas potencialmente úteis: a maior parte da computação ocorre aqui. O segundo mundo consiste em declarações , um espaço matemático desordenado com poucas propriedades matemáticas úteis ( embora a programação estruturada possa ser vista como uma heurística limitada que se aplica neste espaço).

Backus afirmou que em 1978 existia na ciência da computação um ciclo vicioso onde a ênfase de longa data nas linguagens von Neumann deu continuidade à primazia da arquitetura de computadores von Neumann, e a dependência dela tornou as linguagens não-von Neumann antieconômicas e, portanto, limitou sua maior desenvolvimento: a falta de linguagens não-von Neumann amplamente disponíveis e eficazes privou os projetistas de computadores da motivação e da base intelectual necessária para desenvolver novas arquiteturas de computadores. [2]

Presença em sistemas modernos

Muitos processadores modernos agora contêm vários núcleos de processamento, e a programação multithread é geralmente a maneira mais eficiente de usar mais poder computacional em um único programa. Alguns processadores modernos são altamente otimizados com técnicas que incluem execução fora de ordem , mas com lógica complexa para detectar quando isso pode ser feito sem violar a semântica de von Neumann do modelo de programação lógica. Caches separados de instruções e dados são amplamente utilizados, tornando o hardware uma arquitetura Harvard Modificada , mas novamente com lógica para detectar casos onde a otimização falha, para poder executar código automodificável .

Alguns processadores especializados (incluindo GPUs ) são dispositivos de múltiplas instruções e dados (MIMD) muito amplos. CPUs de uso geral geralmente têm vários núcleos, mas cada um é rápido o suficiente para que muitos programas sejam rápidos o suficiente sem paralelizar tarefas únicas. (Threads são comumente usados ​​para lidar com entradas ou saídas assíncronas, especialmente em uma GUI .) CPUs de uso geral são tecnicamente dispositivos MIMD, mas normalmente apenas hardware projetado desde o início para programação MIMD é chamado de MIMD.

Muitas linguagens de programação amplamente utilizadas como C , C++ e Java deixaram de ser estritamente von Neumann ao adicionar suporte ao processamento paralelo, na forma de threads . No entanto, a maioria das linguagens categoricamente não -von Neumann também são linguagens funcionais e não alcançaram uso generalizado.

Veja também

Referências

  1. ^ Backus, John (1º de agosto de 1978). “A programação pode ser libertada do estilo von Neumann? Um estilo funcional e sua álgebra de programas”. Comunicações da ACM . 21 (8). Associação para Máquinas de Computação: 613–641. doi :10.1145/359576.359579 . Recuperado em 15 de julho de 2023 .
  2. ^ Arquivos IBM: John Backus
Obtido em "https://en.wikipedia.org/w/index.php?title=Von_Neumann_programming_languages&oldid=1208395773"