"Introducción"C++ y su sistema de tipos: ¿cómo tratar los datos con varios tipos?
Soy relativamente nuevo en C++. Revisé todo lo básico y logré construir 2-3 intérpretes simples para mis lenguajes de programación.
Lo primero que dio y todavía me da un dolor de cabeza: Implementación del sistema de tipos de mi lenguaje en C++
Piense en lo siguiente: Ruby, Python, PHP y Co tienen un montón de built-in tipos que obviamente se implementan en C. Entonces, lo primero que intenté fue hacer posible dar un valor en mi idioma de tres posibles tipos: Int, String y Nil.
me ocurrió esto:
enum ValueType
{
Int, String, Nil
};
class Value
{
public:
ValueType type;
int intVal;
string stringVal;
};
Sí, wow, lo sé. Fue extremadamente lento pasar esta clase como el asignador de cadenas tuvo que ser llamado todo el tiempo.
La próxima vez que he intentado algo similar a esto:
enum ValueType
{
Int, String, Nil
};
extern string stringTable[255];
class Value
{
public:
ValueType type;
int index;
};
me habría almacenar todas las cadenas en stringTable
y escribir su posición para index
. Si el tipo de Value
fuera Int
, acabo de almacenar el número entero en index
, no tendría sentido usar un índice int para acceder a otra int, o?
De todos modos, el anterior me dio un dolor de cabeza también. Después de un tiempo, acceder a la cadena de la tabla aquí, hacer referencia allí y copiarla allí creció sobre mi cabeza, perdí el control. Tuve que poner el borrador del intérprete abajo.
Ahora: Bien, entonces C y C++ están escritos estáticamente.
¿Cómo las principales implementaciones de los idiomas mencionados anteriormente manejan los diferentes tipos en sus programas (fixnums, bignums, nums, cadenas, matrices, recursos, ...)?
¿Qué debo hacer para obtener la máxima velocidad con muchos tipos diferentes disponibles?
¿Cómo se comparan las soluciones con mis versiones simplificadas anteriores?
"int, String, no procede", ¿qué pasa con flotador ? – hhafez
¡Apoyo completamente la idea de un lenguaje de programación sin 'float'! De lo contrario, la primera pregunta sub_Language en SO será "Oye, ¿por qué no 0.1 + 0.2 == 0.3 en sub_Language? ¡Esta roto!". – bobince
@sub: si eres tú el que está bajando algunas de las respuestas, deberías reconsiderarlo. Hay respuestas válidas que han sido votadas negativamente sin ninguna razón, algunas de las cuales podrían ser que usted no entendió la respuesta en toda su extensión. Si no ha sido usted, a quien lo hizo: por favor, explique lo que considera incorrecto de las respuestas. Esa es la única forma de mejorar realmente el sistema. –