Estoy estudiando la teoría del lenguaje de programación y no puedo encontrar una razón sólida para que los lenguajes perezosos no tengan mutación. Alguien sabe el motivo?¿Por qué los lenguajes perezosos no admiten la mutación?
Respuesta
La pereza significa que una función no se evalúa realmente hasta que se utiliza (o a menos que) su valor de retorno. Esto significa que las llamadas a funciones no necesariamente se evalúan en el orden en que aparecen en el código. También significa que no puede haber funciones vacías porque nunca se evaluarían (ya que no es posible usar un valor de retorno que no existe).
Sin embargo, para las funciones que realizan efectos secundarios (como la mutación, pero también solo para imprimir en la pantalla) sí importa en qué orden se ejecutan. Importa aún más que sean ejecutados en absoluto. Esto significa que los lenguajes perezosos necesitan una forma de emular los efectos secundarios en tipos especiales que garanticen que se ejecuten y ejecuten en el orden correcto.
Dado que los programas totalmente libres de efectos secundarios son inútiles (debe poder imprimir en la pantalla), los lenguajes perezosos en realidad soportan efectos secundarios. Simplemente los encapsulan con la mónada IO o los tipos de singularidad. Como ejemplo, haskell tiene matrices mutables, pero solo se pueden usar dentro de la mónada IO.
Para decirlo de otra manera: no es que los lenguajes perezosos * no pueden * tener una mutación, es que usted no quiere * * eso. –
gracias por la respuesta – forellana
Mientras que los programas interactivos requieren efectos secundarios, los programas no interactivos pueden ser útiles incluso si son completamente libres de efectos secundarios. Simplemente pueden devolver un resultado a la persona que llama. –
Mutación significa que no puede estar seguro del estado del programa en ningún momento y tendrá que preocuparse por los efectos secundarios de cualquier acción. De hecho, lo he pensado y no puedo pensar en ninguna forma de tener un lenguaje completamente perezoso que apoye la mutación. (No soy científico de la computación)
gracias por la respuesta – forellana
- 1. ¿Por qué la mayoría de los lenguajes orientados a objetos no admiten corutinas?
- 2. ¿Qué lenguajes de programación admiten métodos constantes?
- 3. ¿Qué lenguajes de programación pueden soportar las pruebas de mutación?
- 4. Lenguajes de script que admiten fibras/coroutines?
- 5. Otros lenguajes de programación que admiten implicits "a la Scala"
- 6. ¿Por qué algunos lenguajes de programación le impiden editar la matriz por la que está pasando?
- 7. ¿Por qué 'ref' y 'out' no admiten el polimorfismo?
- 8. ¿Por qué las matrices admiten IList?
- 9. Los argumentos perezosos de Scala: ¿Cómo funcionan?
- 10. ¿Cómo/por qué los lenguajes funcionales (específicamente Erlang) escalan bien?
- 11. ¿Por qué los lenguajes tipados dinámicamente son lentos?
- 12. ¿Por qué la mayoría de los lenguajes de scripting no tienen tipeo?
- 13. ¿Por qué hay tantos lenguajes de programación?
- 14. ¿Por qué no requerimos interfaces en lenguajes dinámicos?
- 15. ¿Por qué no puedo hacer ++ i ++ en lenguajes tipo C?
- 16. ¿Los observadores de mutación DOM son más lentos que los eventos de mutación DOM?
- 17. Qué navegadores admiten la inserción de fuente
- 18. ¿Qué lenguajes de programación admiten etiquetas con break y continue statments?
- 19. ¿Por qué los archivos de cabecera no aparecen en otros lenguajes de programación?
- 20. ¿Por qué la validación de beans Las restricciones mínimas/máximas no admiten el tipo doble?
- 21. ¿Qué elementos admiten los pseudo-elementos :: before y :: after?
- 22. Los lenguajes funcionales dirigidos a la LLVM
- 23. ¿Por qué la mayoría de los lenguajes de S-Expression se tipan dinámicamente?
- 24. ¿Por qué los lenguajes funcionales son una bendición para los entornos de múltiples hilos?
- 25. ¿Por qué la parte "Dinámica" de los lenguajes dinámicos es tan buena?
- 26. En Clojure, ¿los seces perezosos siempre se fragmentan?
- 27. clases de iteradores perezosos en Scala?
- 28. Notación de dólares en lenguajes de script: ¿por qué?
- 29. ¿Qué clases de iOS no admiten referencias débiles?
- 30. Código no seguro para cambiar la longitud (por mutación) de un objeto String
claramente no soy un hablante nativo de inglés, gracias por las correcciones – forellana