1. EXPANSION INLINE
DEFINICION:
. En programación, inline expansion consiste en sustituir determinadas llamadas a métodos (a funciones)
por las instrucciones ejecutables de la implementación de estos métodos. La principal ventaja es que el
código puede ejecutarse mas rápido.
Es una optimización que puede emplear un compilador para intentar una mejora en la performance cuando
se ejecute el programa, pero con el costo de un posible incremento del tamaño final del programa. De todas
maneras, este método puede hacerse manualmente también,copiando y pegando el código fuente usado
en los lugares indicados. De todas maneras, esto último no es lo recomendado, por la tendencia a cometer
errores (entre otros problemas que pueden surgir del copiar y pegar).
In-line expansion elimina el costo de las instrucciones de llamadas y retornos de funciones, aunque estos son
pequeños "ahorros". El mayor "ahorro" generalmente proviene de optimizaciones adicionales que pueden ser
posibles en el cuerpo de las funciones "inlined" (las funciones a las que se le aplica la expansión in-line).
En el contexto de los lenguajes de programación funcional, la expansión inline es a veces referida como
"beta reduction" (reducción beta), un término usado en el cálculo lambda (el lenguaje formal que subyace a los
lenguajes funcionales).
.
En diferentes versiones del C y C + + lenguajes de programación , una función en línea es una función que
el compilador se ha solicitado para llevar a cabo la expansión en línea . En otras palabras, el programador ha
solicitado que el compilador inserte el cuerpo completo de la función en cada lugar que se llama la función, en
vez de generar código para llamar a la función en el único lugar que se define. (Sin embargo, los compiladores
no están obligados a respetar esta petición.
Las funciones inline han venido de alguna manera, a reemplazar las macros de preprocesador. No es
que esta fuera la finalidad al crearlas, pero la utilidad es básicamente la misma, aunque las
funciones inline tienen ventajas sobre las macros.
Cuando declaramos una función con el calificador inline, el compilador intentará llegado el
momento de colocar una copia del código de la función en el lugar de la llamada a dicha función en
línea). Esto reduce la sobrecarga que se genera cuando llamamos a funciones, pero a costa de
incrementar el tamaño del programa por el hecho de tener una copia de la función en cada lugar en
que la llamamos.
Es lo mismo que logramos cuando utilizamos las macros de preprocesamiento para expandir código
en línea.
2. Aunque el resultado funcional es el mismo, existen diferencias entre los dos métodos:
• Las funciones inline, al ser como cualquier otra función, conlleva una verificación de tipo, cosa que no sucede
con las macros, ya que se reemplazan "sin más".
• Las funciones inline no pueden utilizarse de forma sintácticamente incorrecta, ya que esto produciría un error
de compilación. Con las macros, es posible sufrir ciertos efectos colaterales por mal uso.
• Las macros no puede ser depuradas, ya que para el precompilador son solo porciones de texto que deben
reemplazarse donde se indique. El compilador puede informar un error, pero no podrá decir que se debe a una
macro, ni a cual. Por el contrario, las funciones inline se puede depurar como cualquier otra función.
• Las macros reemplazan los argumentos con los parámetros sin evaluar (ver imagen de arriba). En cambio, las
funciones evalúan los parámetros (si se tratá de una expresión matemática, por ejemplo, esta se resuelve y se
pasa).
En informática , la expansión en línea, o inline, es un manual o la optimización del compilador que sustituye
una función sitio de llamada con el cuerpo del destinatario de la llamada . Esta optimización puede mejorar el
tiempo y el uso del espacio en tiempo de ejecución, en el posible costo de aumentar el tamaño final del
programa (es decir, el archivo binario de tamaño).
Normalmente, cuando se invoca una función, el control se transfiere a su definición por una rama llamada
instrucción o. Con procesos en línea, el control a través de las gotas directamente en el código de la función,
sin una instrucción de rama o de llamada. Inlining mejora el rendimiento de varias maneras:
• Se elimina el coste de la llamada a la función y devolver las instrucciones, así como cualquier
otro prólogo y epílogo de código inyectado en cada función por el compilador.
• La eliminación de ramas y de mantenimiento de código que se ejecuta muy juntos en la memoria
mejora la caché de instrucciones de rendimiento mediante la mejora de localidad de referencia .
• Una vez que se ha realizado procesos en línea, optimizaciones adicionales intraprocedimiento ser
posible en el cuerpo de la función "inline". Por ejemplo, una constante pasa como un argumento, a
menudo se pueden propagar a todas las instancias del parámetro correspondiente, o parte de la
función puede ser "levantado" de un bucle .
Los costes iniciales de procesos en línea es que tiende a aumentar el tamaño del código, aunque no siempre
lo hacen. Procesos en línea también puede disminuir el rendimiento en algunos casos - por ejemplo, varias
3. copias de una función puede aumentar el tamaño del código suficiente para que el código ya no cabe en la
memoria caché, lo que resulta en más fallos de caché.
Algunas lenguas (por ejemplo, C y C + + ) admiten la palabra clave en línea en la definición de
funciones. Esta palabra clave sirve como un "toque" al compilador que debe tratar de la función en línea. Los
compiladores utilizan una variedad de mecanismos, incluyendo sugerencias de los programadores, para
decidir que las llamadas de función debe ser entre líneas.
En el contexto de los lenguajes de programación funcional , la expansión en línea es generalmente seguido
por el beta-reducción de la transformación.
Un programador puede en línea de forma manual a través de una función de programación de copia y pega ,
como un tiempo de operación de uno en el código fuente . Sin embargo, otros métodos de control de procesos
en línea (véase más adelante) son preferibles, ya que no precipitan los errores que surgen cuando el
programador da una versión (posiblemente modificado) duplicados del cuerpo de la función original, mientras
que la fijación de un error en la función "inline".