Por lo tanto, actualmente estoy trabajando en un nuevo lenguaje de programación. Inspirado por las ideas de la programación concurrente y Haskell, uno de los principales objetivos del lenguaje es la gestión de los efectos secundarios. Más o menos, se requerirá que cada módulo especifique los efectos secundarios que permite. Entonces, si estuviera haciendo un juego, el módulo de gráficos no tendría la capacidad de hacer IO. El módulo de entrada no podría dibujar en la pantalla. El módulo de IA debería ser totalmente puro. Los scripts y complementos para el juego tendrían acceso a un subconjunto muy restringido de IO para leer los archivos de configuración. Etcétera.¿Cómo debo manejar los efectos secundarios en un nuevo diseño de lenguaje?
Sin embargo, lo que constituye un efecto secundario no es claro. Estoy buscando ideas o sugerencias sobre el tema que pueda considerar en mi idioma. Aquí están mis pensamientos actuales.
Algunos efectos secundarios son evidentes. Ya sea que imprima en la consola del usuario o ejecute sus misiles, cualquier acción que lea o escriba en un archivo propiedad del usuario o que interactúe con hardware externo es un efecto secundario.
Otros son más sutiles y estos son los que realmente me interesan. Estos serían cosas como obtener un número aleatorio, obtener la hora del sistema, dormir un hilo, implementar memoria transaccional de software o incluso algo muy fundamental como como asignación de memoria.
A diferencia de otros lenguajes creados para controlar los efectos secundarios (mirándote Haskell), quiero diseñar mi lenguaje para que sea práctico y pragmático. Las restricciones de los efectos secundarios deben cumplir dos propósitos:
- Para ayudar en la separación de preocupaciones. (Ningún módulo puede hacer todo).
- Para guardar en la arena cada módulo de la aplicación. (Cualquier módulo se puede usar como un complemento)
Teniendo esto en cuenta, ¿cómo debo manejar los efectos "pseudo" -side, como números aleatorios y dormir, como menciono arriba? ¿Qué más podría haberme perdido? ¿De qué manera podría administrar el uso de memoria y el tiempo como recursos?
+1 Wow. De hecho, solo iba a hacer una pregunta similar. Estoy diseñando un lenguaje híbrido FP/OOP. – Zifre