"Introduction"C++ et son système de types: Comment traiter des données avec plusieurs types?
Je suis relativement nouveau en C++. Je suis allé à travers toutes les choses de base et a réussi à construire 2-3 interprètes simples pour mes langages de programmation.
La première chose qui a donné et me donne encore un mal de tête: La mise en œuvre du système de type de ma langue en C++
Pensez que: Ruby, Python, PHP et Co. ont beaucoup de haut- types qui sont évidemment mis en œuvre en C. Donc, ce que j'ai d'abord essayé était de permettre de donner une valeur dans ma langue trois types possibles: Int, String et Nil.
je suis venu avec ceci:
enum ValueType
{
Int, String, Nil
};
class Value
{
public:
ValueType type;
int intVal;
string stringVal;
};
Ouais, wow, je sais. Il était extrêmement lent de passer cette classe car l'allocateur de chaîne devait être appelé tout le temps.
prochaine fois que je l'ai essayé quelque chose de similaire à ceci:
enum ValueType
{
Int, String, Nil
};
extern string stringTable[255];
class Value
{
public:
ValueType type;
int index;
};
Je stockerait toutes les chaînes stringTable
et écrire leur position à index
. Si le type de Value
était Int
, je viens de stocker l'entier dans index
, cela n'aurait aucun sens d'utiliser un index int pour accéder à un autre int, ou?
De toute façon, ce qui précède m'a aussi donné mal à la tête. Après un certain temps, en accédant à la chaîne de la table ici, le référencer là et la copier là-bas a grandi au-dessus de ma tête - j'ai perdu le contrôle. Je devais mettre le projet d'interprète vers le bas.
Maintenant: D'accord, donc C et C++ sont typés statiquement.
Comment les principales implémentations des langues mentionnées ci-dessus traitent les différents types dans leurs programmes (Fixnum, bignums, Nums, chaînes, de tableaux, ressources, ...)?
Que dois-je faire pour obtenir la vitesse maximale avec de nombreux types disponibles?
Comment les solutions se comparent-elles à mes versions simplifiées ci-dessus?
"Int, String, Nil", qu'en est-float ? – hhafez
Je soutiens entièrement l'idée d'un langage de programmation sans 'float'! Sinon, la première question sub_Language sur SO sera "Hey, pourquoi ne pas 0.1 + 0.2 = 0.3 dans sub_Language? C'est cassé!". – bobince
@sub: Si c'est vous qui downvote certaines réponses, vous devriez le reconsidérer. Il y a des réponses valides qui ont été downvoted sans raison, dont certaines pourraient être que vous n'avez pas compris la réponse dans toute leur étendue. Si ce n'est pas vous, à quiconque l'a fait: s'il vous plaît, expliquez ce que vous considérez comme erroné à partir des réponses. C'est la seule façon d'améliorer réellement le système. –