Quindi attualmente sto lavorando su un nuovo linguaggio di programmazione. Ispirato da idee provenienti dalla programmazione concorrente e da Haskell, uno degli obiettivi principali della lingua è la gestione degli effetti collaterali. Più o meno, ad ogni modulo sarà richiesto di specificare quali effetti collaterali consenta. Quindi, se stessi facendo un gioco, il modulo grafico non avrebbe alcuna capacità di fare IO. Il modulo di input non avrebbe la capacità di disegnare sullo schermo. Il modulo AI dovrebbe essere totalmente puro. Script e plugin per il gioco avrebbero accesso a un sottoinsieme molto ristretto di IO per leggere i file di configurazione. Et cetera.Come devo gestire gli effetti collaterali in un nuovo design della lingua?
Tuttavia, ciò che costituisce un effetto collaterale non è chiaro. Sto cercando qualsiasi pensiero o suggerimento sull'argomento che potrei prendere in considerazione nella mia lingua. Ecco i miei pensieri correnti.
Alcuni effetti collaterali sono evidenti. Che si tratti di stampare sulla console dell'utente o di lanciare i missili, qualsiasi azione che legga o scriva in un file di proprietà dell'utente o che interagisca con l'hardware esterno è un effetto collaterale.
Gli altri sono più sottili e questi sono quelli a cui sono veramente interessato. Sarebbero cose come ottenere un numero casuale, ottenere il tempo di sistema, dormire un thread, implementare la memoria transazionale del software o anche qualcosa di molto fondamentale come allocare memoria.
A differenza di altri linguaggi creati per controllare gli effetti collaterali (guardando Haskell), voglio progettare il mio linguaggio in modo pragmatico e pratico. Le restrizioni sugli effetti collaterali dovrebbero servire a due scopi:
- Per aiutare nelle separazioni di preoccupazioni. (Nessun modulo può fare tutto).
- Per eseguire la sandbox di ciascun modulo nell'applicazione. (Qualsiasi modulo può essere utilizzato come plug-in)
Con questo in mente, come dovrei gestire gli effetti "pseudo" sul lato, come numeri casuali e dormendo, come ho detto sopra? Cos'altro potrei aver perso? In che modo posso gestire l'utilizzo della memoria e il tempo come risorse?
+1 Wow. In realtà stavo solo facendo una domanda simile. Sto progettando un linguaggio ibrido tipo FP/OOP. – Zifre