¿Qué es una arquitectura práctica no von Neumann?

16

¿Existen aplicaciones prácticas para los modelos de programación que no sean de von Neumann? ¿Cuáles son los lenguajes de programación no von von Neumann más ampliamente adoptados?

Len Yabloko
fuente
66
¿Qué es un modelo de programación "no von Neumann"?
Suresh Venkat
Tampoco entiendo la pregunta, tal vez pueda agregar algunos antecedentes a la pregunta para que sea más fácil entender lo que está preguntando.
Kaveh
3
La arquitectura von Neumann tiene una CPU. por lo tanto, una arquitectura de procesamiento en paralelo es posiblemente no von Neumann (la arquitectura de Neumann fue inventada antes del procesamiento en paralelo). pero estuvo de acuerdo en que la pregunta parece ambigua o nebulosa. von neumann se refiere a una arquitectura de computadora, no exactamente un modelo de programación. el modelo de programación y la arquitectura de la CPU / computadora existen en una especie de sinergia / simbiosis, pero también son algo independientes entre sí ... diferentes arquitecturas pueden implementar diferentes modelos de programación sin que el modelo de programación esté "acoplado" a la arquitectura ...
vzn
1
¿Qué es un lenguaje de programación que no sea de von Neumann ? Para el caso, ¿qué es un lenguaje de programación von Neumann? (No encuentro la definición de Backus --- esencialmente "lenguajes imperativos" --- incluso un poco convincente.)
Jeffε
1
@Ronny: La página de Wikipedia simplemente repite el artículo de Backus.
Jeffε

Respuestas:

12

Cuando digo "arquitectura von Neumann", me refiero a algún hardware que está limitado por el "cuello de botella von Neumann", es decir, todos los datos se canalizan a través de un bus de datos estrecho.

Los lenguajes de programación que no son de von Neumann con los que me encuentro con mayor frecuencia son VHDL y Verilog . En VHDL y Verilog, por defecto, todo sucede al mismo tiempo. El programador debe hacer un esfuerzo adicional para hacer que una serie de eventos ocurran en orden secuencial. Eso es muy diferente de la mayoría de los otros lenguajes de programación que implican un "puntero de instrucción" que, por defecto, ejecuta como máximo una línea de código en cualquier instante, y el programador tiene que hacer un esfuerzo adicional para que sucedan varias cosas al mismo tiempo. hora.

Algunas personas dirían que es un defecto más natural. Muchos estudiantes principiantes de programación esperan que el ciclo "while (x> 0) {...}" salga en el instante en que x se vuelve igual a cero, y se sorprenden al saber que la computadora no evalúa continuamente esa condición.

La mayoría de las personas que escriben código VHDL y Verilog compilan sus programas en FPGA, creando pequeños bloques de actividad que se ejecutan a toda velocidad todo el tiempo. A menudo, estas personas configuran una "tubería" que lee los datos de los pines de entrada, los procesa a través de una serie de bloques, los pines de salida de un bloque directamente conectados a los pines de entrada del siguiente bloque, y el bloque final envía el resultado Los pines de salida. Es una reminiscencia de la canalización de Unix , excepto que entra un nuevo dato y sale un nuevo dato en cada ciclo de reloj.

Los pines de entrada, las etapas intermedias y los pines de salida son independientes entre sí: no es necesario volver a utilizar un solo bus de datos multiplexado entre los distintos datos.

También le puede interesar: ¿Existen otras arquitecturas de computadora aparte de las arquitecturas von neumann / turing?

David Cary
fuente
11

Supongo que por no Von Neumann, te refieres a idiomas que pasaron por alto el "cuello de botella de Von Neumann" según el artículo de Backus "¿Se puede liberar la programación del estilo de Von Neumann?". Para aquellos interesados, puede encontrar una copia aquí: http://www.thocp.net/biographies/papers/backus_turingaward_lecture.pdf

La respuesta a su pregunta tendrá que ser ambigua por algunas razones.

Primero, ¿qué idiomas satisfacen los criterios en su artículo? Aunque hay quienes rastrean la programación funcional en este documento, ahora se considera un malentendido, ya que se refería a algo así como la programación sin puntos. Entonces, ¿vas con el malentendido original o la verdadera intención del artículo? Para un poco de explicación sobre lo que quiso decir, consulte lo siguiente: http://en.wikipedia.org/wiki/Function-level_programming

En segundo lugar, si va con el malentendido, ¿qué tan funcional es funcional? Tiene lenguajes funcionales puros, lenguajes funcionales impuros y lenguajes que son relativamente amigables con el paradigma funcional. Teniendo en cuenta que mencionas la popularidad y hay una relación inversa entre eso y la pureza funcional, ¿qué idiomas deberían incluirse? ¿Desea el lenguaje funcional puro más popular (que no sería popular en absoluto), o uno más popular que cumpla con algunos criterios mínimos de "funcionalidad"? Si es esto último, ¿cuáles son esos criterios?

Entonces, dependiendo de su punto de vista:

  1. Haskell es el más popular de los lenguajes funcionales completamente puros que conozco y hay aplicaciones escritas en él. Sin embargo, aunque es un gran peso en la comunidad de programación funcional, no es popular en la comunidad de programación más grande. Además, después de usarlo, no sentí que fuera práctico para el uso en el mundo real, y parece ser valorado por el trabajo teórico. Sí permite un estilo sin puntos, por lo que puede abordar algunos de los objetivos de Backus con eso.

  2. Clojure, Scala y F # son lenguajes funcionales menos puros, pero más prácticos y populares. F # también es amigable con el estilo sin puntos.

  3. Forth puede ser el ejemplo prototípico de un lenguaje sin puntos, y estaba bastante extendido en su día, aunque ahora ... Factor es otro lenguaje sin puntos que ha llamado la atención, pero dudo que coincida con la popularidad de Forth en su apogeo. .

  4. APL fue mencionado por Backus en un momento (tal vez no en su artículo) como un paso hacia, pero no totalmente compatible con sus objetivos. En su día fue grande en el sector financiero. Asegúrate de ver a sus descendientes, como J.

  5. JavaScript no es funcional, pero es bastante amigable con un estilo de programación de orden superior, como lo demuestra su uso intensivo de cierres. Dada su popularidad, podría cumplir con los criterios. Asegúrese de revisar algunas de las cosas interesantes hechas con JavaScript, como el currículum y la implementación del combinador.

Como nota al pie, para darle más perspectiva sobre sus objetivos, puede consultar los dos idiomas que diseñó para cumplir con sus criterios. No son populares en absoluto AFAIK, por lo que esto sería solo por el bien del conocimiento:

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

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

Ronny
fuente
1
Ahora parece que se refería a algo como programación libre de puntos en lugar de programación funcional . ¿Hay algún indicio para una discusión sobre esto? suena interesante.
Suresh Venkat
El modelo de programación de Backus se llama "Programación de nivel de función", y hay un artículo aquí: en.wikipedia.org/wiki/Function-level_programming . No conozco ningún enlace realmente bueno (¡me encantaría saber si encuentras alguno!), Pero Google "Programación a nivel de función" muestra algunos enlaces interesantes, incluido un video.
Ronny
1
@SureshVenkat: Backus creó los lenguajes FP y FL específicamente para respaldar su idea de programación de nivel funcional. Vea también "programación tácita" y más específicamente el lenguaje J , que combina APL y FP / FL para crear lo que puede ser el lenguaje de propósito general más críptico y más expresivo en uso real. También recuerdo una publicación en SO sobre el uso de la programación tácita en lenguajes funcionales.
CA McCann
Por cierto, la cronología en esta publicación parece significativamente diferente. La programación funcional (tanto en las tradiciones de Lisp como de ML) es anterior a la conferencia del Premio Turing de Backus, al igual que la mayoría o todos los paradigmas de programación existentes, incluida la programación de nivel de función en forma de lógica combinatoria , que es anterior tanto al cálculo lambda de la Iglesia como al de Turing ¡trabaje en la teoría de la computación! (Ah, y me gustaría mucho más utilizo Haskell para fines prácticos del mundo real que una atrocidad como Javascript.)
CA McCann
@camccann Nunca puse una cronología en la publicación. Además, Lisp es demasiado amplio para respaldar cualquier reclamo. Por ejemplo, no todos los Lisps son funcionales, ya que no todos son recursivos de cola. Me gusta su referencia a la lógica combinatoria, pero creo que el punto de Backus era tener un lenguaje con el que se pudiera programar una computadora que soporte el paradigma. Por lo tanto, si bien la lógica combinatoria arroja luz sobre su argumento, en última instancia no afecta su punto.
Ronny
2

Creo que la programación de Linda y tuplespace podría encajar perfectamente. Las operaciones de memoria asociativa / coincidencia de patrones con concurrencia significan que (conceptualmente) se elimina el cuello de botella de Von-Neuman.

Yendo en esa dirección, un lenguaje puro de modelo de actor también modela la comunicación en lugar de la secuencia de instrucciones. Y aunque son formalismos y no lenguajes de programación reales, procesan cálculos como el cálculo de Pi, CSP y las redes de modelos de Petri Nets de formas relacionadas.

Consulte wikipedia para obtener enlaces (soy un usuario nuevo y estoy protegido contra el correo no deseado), pero para conocer el humor de los estudiantes de segundo año con respecto al nombre de Linda, lea http://c2.com/cgi/wiki?LindaEtymology .

Jim Meier
fuente