2012-03-23 16 views
6

Entiendo lo que se entiende por encuadernación de tipo. Corrígeme si me equivoco -Encuadernación de tipo estático Vs Encuadernación de tipo dinámico

La vinculación de tipos es el proceso de 'asociar' una variable declarada a un tipo particular
(Hecho por el compilador).

tipo de enlace puede ser clasificado como -
tipo estático vinculante
Tipo de Enlace dinámico

se puede lograr mediante dos tipos de declaraciones de unión

tipo estático -

http://sankofa.loc.edu/CHU/WEB/Courses/Cosi350/Ch4/bound.2.gif

Su clara hasta aquí.
Pero ahora, ¿qué es el enlace de tipo dinámico? (No la definición) Sé que esto significa que una variable está asociada con un 'tipo' durante el tiempo de ejecución,

http://sankofa.loc.edu/CHU/WEB/Courses/Cosi350/Ch4/bound.3.gif

Cualquier más información sobre el mismo, al igual que -

  1. Por qué ¿Enlace de tipo dinámico?
  2. ¿En qué lenguajes de programación está disponible como característica?
  3. ¿Cuáles son sus ventajas y desventajas sobre el enlace de tipo estático?

especificado a través de una instrucción de asignación

¿Puede dar más información sobre el mismo. ¿Debería especificarse solo con una declaración de asignación?

+1

Estas diapositivas son terribles. Confunden la declaración implícita/explícita con tipos implícitos/explícitos. Puede tener declaraciones explícitas con tipos implícitos (estáticos), p. la mayoría de los lenguajes funcionales tipados presentan una inferencia de tipo completa.Además, la tipificación estática asigna tipos a las expresiones, no solo a las variables. (El término "tipo vinculante" tampoco es estándar.) –

+0

@AndreasRossberg Estas diapositivas son notas de apoyo para "Conceptos de lenguajes de programación" de Robert Sebesta. – jsp99

+0

Solo para agregar, encontré [esto] (https://cseweb.ucsd.edu/classes/sp05/cse130/lecture_notes/types_student.txt) que fue útil para mí. – Kulasangar

Respuesta

16

voy a tratar de responder a sus preguntas:

Primero los más fáciles En qué lenguajes de programación es que esté disponible como una característica?

PHP, Python, Ruby, Perl, JavaScript ...

"¿Qué son dinámicos Tipo de encuadernación?"

Los lenguajes de programación que utilizan este enfoque para vincular un tipo de variable, como PHP, Python, Ruby, etc., son en general idiomas interpretados. Entonces, ellos no tienen un compilador. En esos idiomas, no especifica el tipo de variable y no tiene reglas de implicidad para esto, por lo que es "imposible" descubrir un tipo de variable antes del tipo de ejecución.

¿Por qué utilizar el enlace de tipo dinámico?

Para responder a esta pregunta, tengo que hablar sobre algunas ventajas de este enfoque. Para elegir utilizar el enlace de tipo dinámico es una decisión sobre el diseño de su idioma. Por lo tanto, depende de lo que desee para su idioma y de la situación en que se utilizará.

Ventajas

  • Es más fácil escribir código genérico.

Ejemplo: piense en crear una estructura de datos genérica, por ejemplo, Pila. Desea usarlo para mantener todo tipo de variables utilizando diferentes pilas, por ejemplo, una pila para int, otra para cadena, etc. Para hacer esto en ** lenguajes de programación con enlace de tipo estático ** es más difícil.

En C, por ejemplo, tiene dos opciones:

  • Escribir una pila para cada tipo que desea utilizar mantener en la pila
  • Construir una pila que mantiene (void *), en otras palabras, una punto para cualquier cosa

Si intentas hacer esto en Python, solo escribes tu código de una vez. El lenguaje hace el trabajo duro para ti.

Puede discutir sobre Java y otros lenguajes, pero debe tener en cuenta que, el enlace de tipo dinámico es un concepto más antiguo que la Programación de objetos orientados, por lo que en ese momento, no existía el polimorfismo.

Desventajas

  • alto costo para comprobar el tipo y la interpretación

Ejecutar un programa utilizando un archivo binario generado por la compilación es mucho más rápido que el mismo programa que se ejecuta por encima de un intérprete. Lo segundo es que cuando usa vinculante de tipo estático, "básicamente, el proceso de enlace se realiza solo una vez antes de su ejecución. Por otro lado, en idiomas con Enlace de tipo dinámico, el proceso de enlace se realiza o cada asignación . funcionamiento de cada variable

Otras desventajas mínimas se trata de algunos erros que un compilador pudo encontrar, pero utilizando tipo dinámico vinculante el intérprete no puede

Por ejemplo:. Como se puede cambiar el tipo de las variables tanto tiempo como necesites durante el tiempo de ejecución, es realmente posible crear una confusión, como cambiar una variable de int a cadena, y algún punto después, intente llamar a una función que reciba un int y llame a esta función usando la variable que ahora es cadena.

Esto es un problema mínimo, porque un desarrollador de experiencia nunca lo hará, pero aún es posible y en los idiomas con no está el enlace de tipo estático.

Debe tener en cuenta que estamos hablando de conceptos, y las implementaciones de esos conceptos están evolucionando junto con la informática, por lo que probablemente algunas Ventajas/Desventajas se puedan minimizar en la actualidad.