"Introduzione"C++ e il suo sistema di tipi: come trattare i dati con più tipi?
Sono relativamente nuovo al C++. Ho esaminato tutte le informazioni di base e sono riuscito a creare 2-3 semplici interpreti per i miei linguaggi di programmazione.
La prima cosa che ha dato e ancora mi dà il mal di testa: Implementare il sistema di tipi del mio linguaggio in C++
Pensate che: Ruby, Python, PHP e Co. hanno un sacco di built-in tipi che ovviamente sono implementati in C. Quindi quello che ho provato prima era di dare un valore nella mia lingua a tre possibili tipi: Int, String e Nil.
sono arrivato fino a questo:
enum ValueType
{
Int, String, Nil
};
class Value
{
public:
ValueType type;
int intVal;
string stringVal;
};
Sì, wow, lo so. È stato estremamente lento passare questa lezione mentre l'allocatore di stringhe doveva essere chiamato sempre.
prossima volta ho provato qualcosa di simile a questo:
enum ValueType
{
Int, String, Nil
};
extern string stringTable[255];
class Value
{
public:
ValueType type;
int index;
};
vorrei memorizzare tutte le stringhe in stringTable
e scrivere la loro posizione a index
. Se il tipo di Value
era Int
, ho appena memorizzato il numero intero in index
, non avrebbe alcun senso utilizzare un indice int per accedere a un altro int, o?
Ad ogni modo, anche questo mi ha dato un mal di testa. Dopo un po 'di tempo, accedendo alla stringa dal tavolo qui, facendo riferimento a quello lì e copiandolo lì è cresciuto sopra la mia testa - ho perso il controllo. Ho dovuto mettere giù la bozza dell'interprete.
Ora: Ok, quindi C e C++ sono tipizzati staticamente.
Come le principali implementazioni delle lingue di cui sopra trattano i diversi tipi nei loro programmi (fixnums, bignum, nums, stringhe, array, risorse, ...)?
Cosa devo fare per ottenere la massima velocità con molti tipi diversi disponibili?
Come si confrontano le soluzioni con le versioni semplificate di cui sopra?
"Int, String, Nil", che dire di galleggiante ? – hhafez
Suppongo pienamente l'idea di un linguaggio di programmazione senza 'float'! Altrimenti la prima domanda sub_Language su SO sarà "Ehi, perché non 0.1 + 0.2 == 0.3 in sub_Language? È rotto!". – bobince
@sub: se sei quello che esegue il downvoting di alcune risposte, dovresti riconsiderarlo. Ci sono risposte valide che sono state downvoted senza motivo, alcune delle quali potrebbero essere che non hai capito la risposta in tutta la loro estensione. Se non sei stato tu, a chiunque l'abbia fatto: per favore, spiega quello che consideri sbagliato dalle risposte. Questo è l'unico modo per migliorare effettivamente il sistema. –