Tipo Igualdad
El significado de las operaciones básicas tales como asignación (denotado por = en C) se especifica en una definición de lenguaje. Así, por ejemplo, el significado de expresiones como
x = y;
aquí el valor del objeto y
se copia en las posiciones de memoria para la variable x
.
Sin embargo, antes de que el traductor acepte una operación como una asignación, generalmente los tipos de los dos operandos deben ser iguales (o quizás compatibles de alguna otra forma especificada).
Por lo tanto, un traductor de idiomas debe decidir si dos tipos son iguales en algunos casos. Ahora consideramos lo que significa decir que dos tipos son "iguales" (o equivalentes).
Hay dos formas estándar para determinar si dos tipos se consideran el mismo nombre: equivalencia y equivalencia estructural.
La equivalencia de nombre es la más directa: dos tipos son iguales si, y solo si, tienen el mismo nombre. Así, por ejemplo, en el código (usando sintaxis C)
typedef struct {
int data[100];
int count;
} Stack;
typedef struct {
int data[100];
int count;
} Set;
Stack x, y;
Set r, s;
si nombre equivalencia se utiliza en el lenguaje de entonces x
y y
sería del mismo tipo y r
y s
sería de la misma tipo, pero el tipo de x
o y
no sería equivalente al tipo de r
o s
. Esto significa que las declaraciones tales como
x = y;
r = s;
sería válido, pero declaraciones como
x = r;
no sería válido (es decir, no sería aceptada por un traductor).
Usando equivalencia estructural:, dos tipos son iguales si, y sólo si, tienen la misma "estructura", que puede interpretarse de diferentes maneras.
Una interpretación estricta sería que los nombres y tipos de cada componente de los dos tipos deben ser los mismos y deben enumerarse en el mismo orden en la definición de tipo.
Un requisito menos estricto sería que los tipos de componentes deben ser los mismos y en el mismo orden en los dos tipos, pero los nombres de los componentes podrían ser diferentes.
Una vez más mirando el ejemplo anterior, utilizando equivalencia estructural los dos tipos Stack
y Set
se consideraría equivalente, lo que significa que un traductor aceptaría declaraciones como
x = r;
(Tenga en cuenta que C
doesn' t admite equivalencia estructural y dará error para la asignación anterior.)
Información muy útil, pero el enlace está roto, ¿puede por favor corregirlo? Gracias. – LearningMath
Lo sentimos, ese enlace ya no es válido. – JerryGoyal