Qué propósito tienen los tipos en los lenguajes de programación - Los tipos proveen un contexto implícito para muchas operaciones, por lo que el programador se evita de especificar el contexto explícitamente. - Los tipos limitan un conjunto de operaciones que pueden ser manejadas en una semántica valida dentro del programa. Ello previene que el programador agregue un carácter y un record por dar un ejemplo. Cuál es la diferencia entre los tipos de equivalencia y los tipos de compatibilidad Los tipos equivalentes determinan las reglas cuando los tipos de dos valores son el mismo. Los tipos de compatibilidad determinan las reglas cuando un valor es dado y puede ser usado en el contexto dado. Qué es el tipo de inferencia Un tipo de inferencia es cuando se determinan o definen las reglas de un tipo de una expresión basada sobre los tipos sobre las partes que la constituyen en el contexto que la rodea. Qué es el tipo clash El tipo de chequeo es cuando el proceso se cerciora que los programas obedecen las reglas de compatibilidad de tipos, una violación de dichas reglas es lo que se conoce como tipo clash. Qué significa que un lenguaje sea fuertemente tipeado Si las reglas del lenguaje permiten verificar que toda posible aplicación de operación a objetos sea adecuada. Qué significa que un lenguaje sea estáticamente tipeado Es lo mismo que fuertemente tipeado solo que adicionalmente que todas las verificaciones pueden ser hechas antes de la ejecución de los programas. Si hay record variantes se consideran los mismos una forma de polimorfismo, por qué si o no Efectivamente los registros de tamaño variable son una forma de polimorfismo ya que constituyen el mismo ente semánticamente solo que varían sus elementos constituyentes cada vez. Algunas definiciones de lenguajes especifican una representación particular de los tipos de datos en la memoria, mientras que otros especifican solamente el comportamiento semántico de los tipos. Algunas implementaciones de lenguajes garantizan una representación en particular, mientras otros reservan la manera correcta de representar in diferentes circunstancias. Cuál prefieres y por qué? Argumentando a través de un caso, supongamos que se tiene predefinida la disposición por fila en memoria para un arreglo multidimensional y por otro lado puede escoger de acuerdo a las circunstancias el tipo de disposición que tendrá (por fila o columna) influyendo en flexibilidad y eficiencia. Por tanto pareciera ser más adecuado el uso de un modelo adaptado a la ocasión. Más lenguajes modernos de la familia Algol usa de alguna manera la equivalencia por nombres para tipos, es estructuralmente equivalente una mala idea? Por qué? La equivalencia estructural resulta un enfoque que se ha dejado de lado en los lenguajes modernos ya que en primer lugar requiere un esfuerzo adicional del compilador para realizar comparaciones componente a componente que requiere expansión de código in situ. Considera las siguientes declaraciones 1.- type cell 2.- type cell.ptr = pointer to cell 3.- x : cell 4.- type cell = record 5.val : integer 6 next : cell.ptr 7/- y : cell Podría ser la declaración de la línea cuatro, introducir un tipo alias? Bajo estricta equivalencia pueden tener “x” y “y” el mismo tipo Si es un alias ya que se está definiendo un tipo en términos de otro. “x” e “y” pueden tener el mismo tipo a pesar de la equivalencia estricta por nombre ya que cuando se le asigna el valor a “x” no estaba definido el tipo con solo declararlo, por tanto toma el valor de su posterior definición al igual que “y”. Ada provee dos operadores de tipo “remainder”, rem y mod para tipos enteros. Da valores para A y B en el que “A rem B” y “A mod B” dan diferentes, considere el operador % de C y el mod operador de Pascal. A = (A/B)*B + (A rem B) Despejando (A rem B) obtenemos: (A rem B) = A – (A/B)*B A = B*N + (A mod B) Despejando (A mod B) obtenemos: (A mod B) = A – B*N Suponiendo valores arbitrarios para A = 11, B = 4 y N=1 tenemos: A rem B = A – (A/B)*B = 11 – 2 * 4 = 3 A mod B = A – B*N = 11 – 4*1 = 7 Debido a la posibilidad de obtener resultados diferentes de acuerdo a la operación aplicado, no son redundantes. Por otro lado el porcentaje (%) de C y el mod de pascal tienen comportamiento similar al mod de Ada, que resulta más cercano a la noción de resto que se tiene habitualmente.