Sto progettando un linguaggio di programmazione abbastanza semplice basato su stack e implementandolo in Python. (nessun collegamento, perché non è ancora completamente implementato.)
Il linguaggio stesso è essenzialmente inteso per essere il lovechild effettivamente utilizzabile di Forth e Joy , ma JIT-compilato (principalmente così posso imparare a scrivere un compilatore).
Essendo Python, non esiste una "macchina virtuale" di cui parlare nel senso normale, ma il runtime è una comunicazione tra uno stack machine (il valore di un modulo di classi che implementa varie funzionalità) e il parser "senza lexer" che in realtà trasforma i byte in chiamate di funzione in fase di runtime.
Il vero codice nativo non ha idea di eccezioni (ovviamente, essendo istruzioni fisiche, a loro non importa in alcun modo), ma il kernel può dire quando le cose sfuggono di mano, e così sia lui che il memmapper sono in un modo il gestore per errori nel codice nativo della piattaforma.
Per natura del linguaggio, una grande parte del flusso di controllo di Python viene implementata attraverso le eccezioni e gestendole. Tuttavia, lo stack machine ha lo scopo di assomigliare a una vera Stack Machine in quanto dare istruzioni sbagliate ti farà schiaffeggiare la faccia. Nella mia opinione mentre il codice disseminato con try; except; else
potrebbe essere Pythonic, a volte diventa un po 'troppo, soprattutto se sono nidificati.
I gestori di eccezioni si avvicinano ai dati e alle funzioni grezzi, rendendoli forse più facili da eseguire il debug, oppure vanno insieme al (minimo) controllo dei tipi eseguito dal corridore, lasciando la macchina stack come una macchina stupida che restituisce None
a volte ?