Sto pensando di implementare un semplice tipo di macchina virtuale / interprete per un linguaggio semplice che sto facendo. Il compilatore del linguaggio emette principalmente istruzioni orientate allo stack che devono essere eseguite dalla VM.
La struttura del programma sarà simile a questa:
- La parte dell'esecuzione (per mancanza di un termine migliore): interpreta il opcodes e li esegue.
- Lo stack di chiamate: per tenere traccia delle chiamate alle funzioni e per i parametri valori di passaggio e restituzione.
- Lo stack di dati: per nessuna computazione correlata alla funzione, come ad esempio aritmetica.
- L'area di memorizzazione delle variabili, dove i nomi delle variabili sono abbinati ai valori.
L'area di "memorizzazione delle variabili" sarà implementata fondamentalmente con una cosa HashTable / dizionario. Quando il programmatore crea una variabile (assumendo per ora solo variabili numeriche), una nuova voce viene aggiunta alla tabella. Quando assegna un valore a una variabile, alla voce con il nome corrispondente nella tabella viene assegnato questo valore. Quando il programmatore accede a una variabile, di nuovo recuperiamo il valore dalla tabella.
Sono abbastanza sicuro che sia l'unica parte di archiviazione dei dati di cui ho bisogno nell'applicazione, a parte lo stack di dati e lo stack di chiamate. Non vedo perché mi servirebbe qualcos'altro.
Ora, ho visto cosa è un "mucchio" su Wikipedia e altre fonti online. Ho trovato per lo più termini tecnici che ho difficoltà a capire.
Ma in termini più semplici non tecnici, se ho capito bene, l'heap è dove vengono salvati i dati 'costanti', cose che non sono il calcolo locale come l'aritmetica.
Quindi, se la mia comprensione è corretta, la mia 'area di memorizzazione delle variabili' è fondamentalmente un 'ammasso'? Perché o perché no? Se la mia comprensione di cos'è un heap è errata, spiegacelo.