¿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?
¿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?
Respuestas:
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?
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:
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.
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.
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. .
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.
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:
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 .