una para imagenes imagen emplea atributos atributo agregar smalltalk late-binding early-binding

smalltalk - imagenes - Enlace temprano versus enlace tardío: ¿cuáles son los beneficios y desventajas comparativas?



en html, el atributo alt se emplea para (6)

Creo que hay mejores formas / patrones para evitar el acoplamiento inapropiado, como inversión de control, inyección de dependencia, fábricas, ...

Pero, me gusta la independencia de la versión "fácil de usar" de los últimos encuadernaciones
Solo usa

var excel = CreateObject("Excel.Application");

y el enlace tardío se dará cuenta de qué tipo de Excel.Application, y dónde obtenerlo desde ...

Al hablar sobre la evolución de los lenguajes de programación, Alan Kay dice que el atributo más importante de Smalltalk es el enlace tardío; le da al lenguaje su maleabilidad y extensibilidad, y permite que el acoplamiento inapropiado sea refactorizado a lo largo del tiempo. ¿Estás de acuerdo? ¿Hay ventajas compensatorias para la vinculación temprana que expliquen por qué parece ser el dominante de los dos paradigmas para dominios en los que cualquiera de ellos podría usarse?

Mi experiencia personal (que no es lo suficientemente amplia o profunda como para ser autoritaria), basada en implementar aplicaciones web con javascript, jQuery, jsext, actionscript, php, java, RoR y asp.net, parece sugerir una correlación positiva entre el atascamiento tardío y la hinchazón reducción. El enlace anticipado estoy seguro ayuda a detectar y prevenir algunos errores de tipo de seguridad, pero también lo hacen la autocompletación y un buen IDE, y buenas prácticas de programación en general. Por lo tanto, tiendo a atraparme en busca del lado vinculante tardío, antes de que mi lado de evitar el riesgo restaure mi perspectiva racional.

Pero realmente no tengo un buen sentido de cómo equilibrar las compensaciones.


Tradicionalmente, la gran ventaja del enlace anticipado es el rendimiento: un lenguaje de enlace tardío debe llevar información de tipo sobre todos sus datos en tiempo de ejecución, y pierde la oportunidad de realizar algunas optimizaciones en tiempo de compilación. Sin embargo, esta diferencia se ha vuelto mucho menos significativa a medida que las computadoras se vuelven más rápidas y las máquinas virtuales se vuelven más inteligentes sobre la optimización sobre la marcha.


La vinculación temprana frente a la vinculación tardía es realmente una función de la arquitectura del lenguaje. La vinculación anticipada significa que el código se puede construir donde una instrucción de la máquina simplemente salta a una dirección y comienza a ejecutarse desde allí (posiblemente a través de una tabla de búsqueda). La vinculación tardía requiere un símbolo y una referencia de tipo para buscar (por lo general, una búsqueda de tablas hash) para cada acceso, lo que ralentiza el idioma.

Mientras que algunos lenguajes basados ​​en VM como Java son código de máquina nativo temprano enlazado, solo pueden hacer un enlace temprano directamente. Para hacer el enlace tarde, tiene que hacer el mismo tipo de búsqueda hash que un intérprete de lenguaje dinámico. La vinculación tardía requiere la ejecución de un fragmento de código para obtener la dirección (así es como funciona la automatización OLE). La CPU no puede hacerlo directamente; el código debe ser ejecutado.

Tenga en cuenta que el código que hace la vinculación tardía en realidad tendrá sus propios destinos de bifurcación enlazados en la función de búsqueda de hash, y así sucesivamente. Entonces, desde esta perspectiva, el enlace temprano es necesario para cualquier código que sea ejecutado directamente por la CPU. La vinculación tardía debe hacerse en el software.

La vinculación anticipada también es necesaria para una amplia variedad de optimizaciones de código.

Arquitecturas como C tienen un punto dulce al escribir código cerca del metal, por así decirlo. Donde quiera hacer esto, el aspecto de vinculación temprana es bastante inherente a la arquitectura del lenguaje. En un lenguaje vinculado tardío como Python, la vinculación tardía también es inherente. Algunos idiomas ofrecen ambos, pero el tipo particular utilizado estará vinculado a la construcción particular que se está ejecutando.


En mi experiencia tanto de software de alto rendimiento (por ejemplo, juegos, cálculo de números) como de rendimiento neutral (sitios web, casi todo lo demás), ha habido una gran ventaja de la vinculación tardía: la maleabilidad / facilidad de mantenimiento / extensibilidad que ha mencionado.

Ha habido dos beneficios principales de la unión temprana. El primero:

  • Rendimiento en tiempo de ejecución

es comúnmente aceptado, pero generalmente irrelevante porque en la mayoría de los casos es factible tirar hardware al problema, que es más barato. Hay, por supuesto, excepciones (por ejemplo, si no posee el hardware en el que se está ejecutando).

El segundo beneficio de la unión temprana:

  • Facilidad de desarrollo

parece estar subestimado En proyectos grandes donde los desarrolladores trabajan con componentes de otras personas, los IDE pueden leer los enlaces iniciales y usarlos para informar al desarrollador (con autocompletado, documentos, etc.). Esto es menos práctico con el enlace tardío porque los enlaces se crean en tiempo de ejecución. Todavía es posible con los lenguajes de enlace tardío si el IDE puede inferir definiciones de estructura del código, pero dado que la estructura siempre se puede cambiar en el tiempo de ejecución, no es tan confiable.

La facilidad de desarrollo es un gran problema. Minimiza el costoso tiempo del programador, y cuanto más grande sea su equipo de desarrollo, más significativo se vuelve. Debería equilibrar eso con la flexibilidad que obtiene con los lenguajes de enlace tardío.


El enlace de tiempo de compilación en el que se realiza el enlace durante el tiempo de compilación se conoce como enlace anticipado

vinculación dinámica en la que el enlace de la función realizada durante la ejecución cuando se llama a la función se conoce como vinculación tardía


Late-binging permite que el sistema en ejecución se extienda. Por ejemplo, el sistema comienza a conocer lobos. A medida que pasa el tiempo, un método evolveDomesticate (), en Wolf (?), Hace girar una nueva clase llamada Dog y crea eso y tenemos Dogs ahora. Smalltalk salvaría toda la imagen del sistema, por lo que si la cerraba y reiniciaba, Dogs seguiría existiendo después del reinicio. Una vez que evolucionas a objetos que se ejecutan en un hardware particular y conectados en una red en malla, no hay un cierre real de todo el ecosistema (no hasta que Sun explote). Creo que esto es lo que Alan Kay estaba hablando de la ventaja de la vinculación tardía, convertirse en un Dios.