Un ejemplo de lenguaje no determinista es Occam, basado en la teoría CSP. La combinación de las construcciones PAR
y ALT
puede dar lugar a un comportamiento no determinista en los sistemas multiprocesador, implementando los programas fine grain parallel.
Al usar canales blandos, es decir, canales entre procesos en el mismo procesador, la implementación de ALT
hará que el comportamiento se acerque al determinista & dagger;, pero tan pronto como comienzas a usar canales duros (enlaces de comunicación físicos sin procesador), cualquier ilusión de determinismo desaparece. No se espera que diferentes procesadores remotos se sincronicen de ninguna manera y es posible que ni siquiera tengan la misma velocidad de reloj o núcleo.
& dagger; El constructo ALT
a menudo se implementa con un PRI ALT
, por lo que debe codificar explícitamente la equidad si necesita que sea justo.
no determinismo es visto como una desventaja cuando se trata de razonar acerca de los programas y que demuestran correcta, pero en muchos aspectos una vez que haya aceptado, quedas libre de muchas de las limitaciones que las fuerzas de determinismo tu razonamiento
Mientras la secuenciación de la comunicación no conduce a deadlock, lo cual puede hacerse mediante la aplicación de técnicas de CSP, entonces el orden preciso en que se hacen las cosas debería importar mucho menos que el hecho de que obtenga los resultados que se querer a tiempo.
Podría decirse que fue esta falta de determinismo que era un factor importante en la prevención de la adopción de Occam y Transputer sistemas en proyectos militares, dominado por Ada en el momento, en que saber exactamente lo que una CPU estaba haciendo en cada ciclo de reloj se consideró esencial para demostrando un sistema correcto. Sin esta restricción, los sistemas Occam y Transputer en los que se ejecutó (las únicas CPU en ese momento con una implementación de coma flotante IEEE probada formalmente) habrían sido una opción perfecta para sistemas militares duros en tiempo real que necesitan altos niveles de funcionalidad de procesamiento en un pequeño espacio.
Y sí, esto es muy similar a mi última pregunta: http://stackoverflow.com/questions/2174535/multithreading-in-functional-languages-prolog Estoy haciendo una nueva pregunta porque aparentemente redacté la última muy mal; todos comenzaron a discutir sobre los detalles de Prolog, pero realmente no sobre Prolog. –
Google, ayuda, principalmente. E.g: http://en.wikipedia.org/wiki/Ndeterministic_programming es lo que encontré. ¿Eso ayuda? – dirkgently
Eso da unos pocos (3) ejemplos, pero realmente no explica por qué el no determinismo no se usa, por ejemplo, en la mayoría de los lenguajes funcionales –