Un lenguaje von Neumann en informática es un lenguaje de programación que es una copia isomorfa abstracta de alto nivel de una arquitectura von Neumann . [ 1 ] A partir de 2009La mayoría de los lenguajes de programación actuales encajan en esta descripción , probablemente como consecuencia del extenso dominio de la arquitectura informática de von Neumann durante los últimos 50 años.
Las diferencias entre Fortran , C e incluso Java , aunque considerables, están limitadas en última instancia por el hecho de que los tres se basan en el estilo de programación de la computadora von Neumann. Si, por ejemplo, los objetos Java se ejecutaran en paralelo con paso de mensajes asíncrono y direccionamiento declarativo basado en atributos, entonces Java no pertenecería a este grupo.
El isomorfismo entre los lenguajes de programación y las arquitecturas de von Neumann se presenta de la siguiente manera:
- Variables de programa ↔ celdas de almacenamiento de la computadora
- sentencias de control ↔ instrucciones de prueba y salto de computadora
- Sentencias de asignación ↔ instrucciones de obtención y almacenamiento
- expresiones ↔ referencia de memoria e instrucciones aritméticas.
Crítica
John Backus afirmó que las sentencias de asignación en los lenguajes de von Neumann dividen la programación en dos mundos. El primer mundo consiste en expresiones , un espacio matemático ordenado con propiedades algebraicas potencialmente útiles: la mayor parte de la computación se realiza aquí. El segundo mundo consiste en sentencias , un espacio matemático desordenado con pocas propiedades matemáticas útiles ( aunque la programación estructurada puede considerarse una heurística limitada que sí se aplica en este espacio).
Backus afirmó que, en 1978, existía en la informática un círculo vicioso en el que el énfasis prolongado en los lenguajes de von Neumann había mantenido la primacía de la arquitectura informática de von Neumann, y la dependencia de esta había hecho que los lenguajes que no eran de von Neumann resultaran antieconómicos y, por lo tanto, habían limitado su desarrollo posterior: la falta de lenguajes que no eran de von Neumann, ampliamente disponibles y eficaces, había privado a los diseñadores de computadoras de la motivación y la base intelectual necesarias para desarrollar nuevas arquitecturas informáticas. [ 2 ]
Presencia en los sistemas modernos
Muchos procesadores modernos ahora contienen múltiples núcleos de procesamiento, y la programación multihilo suele ser la forma más eficiente de usar más potencia de cálculo en un solo programa. Algunos procesadores modernos están altamente optimizados con técnicas que incluyen la ejecución fuera de orden , pero con una lógica compleja para detectar cuándo se puede hacer sin violar la semántica de von Neumann del modelo de programación lógica. Se utilizan ampliamente cachés de instrucciones y datos separadas, lo que convierte al hardware en una arquitectura Harvard modificada , pero nuevamente con lógica para detectar casos donde la optimización falla, para poder ejecutar código automodificable .
Algunos procesadores especializados (incluidas las GPU ) son dispositivos MIMD ( Multiple Instruction, Multiple Data ) de gran amplitud. Las CPU de propósito general suelen tener varios núcleos, pero cada uno es lo suficientemente rápido como para que muchos programas se ejecuten con la suficiente rapidez sin necesidad de paralelizar tareas individuales. (Los hilos se utilizan habitualmente para gestionar entradas o salidas asíncronas, especialmente en una interfaz gráfica de usuario ). Técnicamente, las CPU de propósito general son dispositivos MIMD, pero normalmente solo se denomina MIMD al hardware diseñado desde cero para la programación MIMD.
Muchos lenguajes de programación de uso generalizado, como C , C++ y Java, han dejado de ser estrictamente von Neumann al incorporar soporte para el procesamiento paralelo mediante hilos . Sin embargo, la mayoría de los lenguajes que no son estrictamente von Neumann son también lenguajes funcionales y no han alcanzado una amplia difusión.
Véase también
Referencias
- ↑ Backus, John (1 de agosto de 1978). "¿Puede la programación liberarse del estilo von Neumann? Un estilo funcional y su álgebra de programas" . Communications of the ACM . 21 (8). Association for Computing Machinery: 613–641 . doi : 10.1145/359576.359579 . Recuperado el 15 de julio de 2023 .
- ↑ Archivos de IBM: John Backus
- Clasificación de lenguajes de programación
- Juan von Neumann