15

Estaba tratando de entender la diferencia entre la vinculación temprana y tardía, y en el proceso me di cuenta de que el concepto de enlace es nebuloso para mí. I think Entiendo que se relaciona con la forma en que data-as-a-word-of-memory está vinculado a type-as-a-set-of-language-features, pero no estoy seguro de que esos sean los conceptos correctos. Además, ¿de qué manera la comprensión de esto puede ayudar a las personas a convertirse en mejores programadores?Pregunta para principiantes: ¿Qué es vinculante?

Tenga en cuenta: Esta pregunta no es "lo que es tarde v. Unión temprana" o "cuáles son las compensaciones entre los 2". Aquellos ya existen aquí.

Gracias,

JDelage

+0

También tendría sentido observar qué es vinculante en comparación con lo que está vinculando. P.ej. Ada usa pasos separados para esos, mientras que C los fusiona/confunde. – ndim

Respuesta

1

Enlazar en general es asociar un nombre con algún valor. El valor no necesita ser datos, pero puede ser cualquier cosa que tenga un nombre, p. una función o una clase.

En cuanto a la disyuntiva:

  • Enlace temprano hace que el valor disponible anteriormente. Entonces, por ejemplo, los compiladores pueden aplicar la optimización basada en el valor conocido, como la evaluación de expresiones constantes. Esto puede dar como resultado un mejor rendimiento y no requiere soporte en tiempo de ejecución para recuperar el valor.

  • Encuadernación tardía requiere el valor más tarde, por lo que proporciona una mayor flexibilidad. Se vuelve más fácil cambiar partes del código o reconfigurar un sistema.

La tendencia general es hacia adelante vinculante, ya que con procesadores más rápidos y mejores técnicas de compilación JIT (por ejemplo) se hace factible con más frecuencia.

4

En su forma más simple, la unión es la asociación de un símbolo dentro de un programa con una dirección en la memoria.

Por ejemplo: una llamada a función en C. Cuando declara una función, el compilador registra el nombre de la función y la ubicación de su código dentro del archivo de objeto. Cuando llama al una función de un archivo compilado por separado, el compilador registra una referencia a ese nombre en el lugar donde se produce la llamada. El enlazador es responsable de vinculando estas dos referencias, de modo que la llamada hará referencia a la ubicación correcta de la memoria.

2

"Encuadernación" es básicamente decir "este nombre de función/propiedad corresponde a este bit de código".

1

Si usted está hablando más sobre el enlace de datos, entonces yo diría que la definición utilizada por Microsoft en sus Data Binding Overview funciona bastante bien:

"El enlace de datos es el proceso que establece una conexión entre la aplicación interfaz de usuario y la lógica de negocio. Si la unión tiene la configuración correcta y los datos proporciona las adecuadas notificaciones, entonces, cuando los datos cambia su valor, los elementos que están unidos a los datos reflejan cambios automática aliado. El enlace de datos también puede significa que si una representación externa de los datos en un elemento cambia, , entonces los datos subyacentes pueden ser actualizados automáticamente para reflejar el cambio . Por ejemplo, si el usuario edita el valor de un elemento de cuadro de texto, el subyacente valor de datos es automáticamente actualizarse para reflejar ese cambio."

En otras palabras, es una forma de obtener datos de un Data- fuente (como una base de datos o un archivo XML) y aplicar esos datos a una interfaz o elemento de visualización. Por ejemplo, un formulario puede tener una lista desplegable de valores que se almacenan en una tabla dentro de una base de datos. proceso de "vincular" los valores de la base de datos a la lista. La vinculación de datos unidireccional suele ser de "solo lectura" pero la vinculación de datos bidireccional permite al usuario actualizar los valores de regreso a la fuente de datos subyacente

2

En el contexto de los compiladores, el enlace es la fase donde las referencias de direcciones se cambian en direcciones absolutas reales.

Cuando el programa es compilado, la dirección de cada símbolo (variable, función) se almacena en la tabla de símbolos, por ejemplo, como un desplazamiento relativo desde el principio del módulo objeto, junto con el nombre del símbolo. El nombre del símbolo es necesario ya que los símbolos pueden ser llamados desde otro módulo de objeto.

Cuando el programa es vinculado, los módulos de objetos se combinan en un solo archivo de programa y los nombres de los símbolos ya no son necesarios. Si el programa está vinculado a una dirección absoluta conocida, todas las referencias de dirección pueden ser enlazadas a en direcciones absolutas que ya estén en esta fase.

Sin embargo, en las estaciones de trabajo como PC: s, el programa se puede cargar en cualquier dirección, por lo que la dirección no se conoce en el momento del enlace. Por lo tanto, la información de reubicación adicional se almacena en el archivo de programa para que el cargador pueda vincular las direcciones en el momento de la carga.

Encuadernación se realiza en el tiempo de carga utilizando la información de reubicación. Cuando se conoce la dirección donde se ejecutará el programa, el cargador reemplaza las direcciones relativas con las direcciones absolutas utilizando la información de reubicación que indica dónde deben hacerse los cambios en el código.

Para objetos/variables dinámicos, la vinculación se puede realizar en runtime. (Creo que esto es lo que generalmente se llama vinculación tardía.)

Por lo general, no es necesario que se preocupe demasiado por el enlace, al menos no cuando se utiliza el enlace anticipado. (Sin embargo, el enlace en tiempo de ejecución puede tener un impacto negativo en el rendimiento y la seguridad).

Cuestiones relacionadas