"Einführung"C++ und sein Typsystem: Wie behandelt man Daten mit mehreren Typen?
Ich bin relativ neu in C++. Ich habe alle grundlegenden Dinge durchgearbeitet und es geschafft, 2-3 einfache Interpreter für meine Programmiersprachen zu erstellen.
Das erste, was Kopfschmerzen gab und gibt mir noch: den Typ System meiner Sprache in C++ Implementierung
Denken Sie an diesem: Ruby, Python, PHP und Co. haben eine Menge eingebaute in Typen, die offensichtlich in C. implementiert werden. Also was ich zuerst versuchte, war es, zu ermöglichen, einen Wert in meiner Sprache drei mögliche Typen zu geben: Int, String und Nil.
kam ich mit auf den Punkt:
enum ValueType
{
Int, String, Nil
};
class Value
{
public:
ValueType type;
int intVal;
string stringVal;
};
Ja, wow, ich weiß. Es war extrem langsam, diese Klasse zu übergeben, da der String-Allokator die ganze Zeit aufgerufen werden musste.
Nächstes Mal, wenn ich etwas ähnliches wie dies versucht haben:
enum ValueType
{
Int, String, Nil
};
extern string stringTable[255];
class Value
{
public:
ValueType type;
int index;
};
Ich würde speichern alle Strings in stringTable
und schreiben ihre Position zu index
. Wenn der Typ Value
war Int
, ich habe gerade die ganze Zahl in index
gespeichert, würde es überhaupt keinen Sinn mit einem int-Index auf einen anderen Int zugreifen, oder?
Wie auch immer, das oben genannte gab mir Kopfschmerzen. Nach einiger Zeit wuchs mir der Zugriff auf die Zeichenfolge aus der Tabelle hier, indem ich sie dort referenzierte und sie dort kopierte - ich verlor die Kontrolle. Ich musste den Dolmetscher runterziehen.
Jetzt: Okay, also C und C++ sind statisch getippt.
Wie die wichtigsten Implementierungen der Sprachen oben genannten handhaben die verschiedenen Arten in ihren Programmen (fixnums, bignums, nums, Strings, Arrays, Ressourcen, ...)?
Was kann ich tun, um die maximale Geschwindigkeit mit vielen verschiedenen verfügbaren Typen zu erreichen?
Wie vergleichen sich die Lösungen mit meinen vereinfachten Versionen oben?
"Int, String, Nil", was Schwimmer ? – hhafez
Ich unterstütze die Idee einer Programmiersprache ohne 'float'! Sonst wird die erste sub_Language Frage auf SO lauten "Hey, warum nicht 0.1 + 0.2 == 0.3 in sub_Language? Es ist kaputt!". – bobince
@sub: Wenn du es bist, der einige Antworten ablehnt, solltest du es noch einmal überdenken. Es gibt gültige Antworten, die ohne Grund abgelehnt wurden, von denen einige möglicherweise die Antwort in ihrem vollen Umfang nicht verstanden haben. Wenn du es nicht warst, zu wem auch immer du es gemacht hast: Bitte erkläre, was du falsch findest aus Antworten. Nur so kann das System tatsächlich verbessert werden. –