Está en la página 1de 16

Software de programacin

Es el conjunto de herramientas que permiten al programador desarrollar programas informticos, usando diferentes alternativas y lenguajes de programacin, de una manera prctica. Incluyen bsicamente: Editores de texto Compiladores Intrpretes Enlazadores Depuradores Entornos de Desarrollo Integrados (IDE): Agrupan las anteriores herramientas, usualmente en un entorno visual, de forma tal que el programador no necesite introducir mltiples comandos para compilar, interpretar, depurar, etc. Habitualmente cuentan con una avanzada interfaz grfica de usuario (GUI).

1. Editores de texto
Un editor de texto es un programa que permite crear y modificar archivos digitales compuestos nicamente por texto sin formato, conocidos comnmente como archivos de texto o texto plano. El programa lee el archivo e interpreta los bytes ledos segn el cdigo de caracteres que usa el editor. Hoy en da es comnmente de 7- o 8-bits en ASCII o UTF-8, rara vez EBCDIC. Por ejemplo, un editor ASCII de 8 bits que lee el nmero binario 0110 0001 (decimal 97 o hexadecimal 61) en el archivo lo representar en la pantalla por la figura a, que el usuario reconoce como la letra "a" y ofrecer al usuario las funciones necesarias para cambiar el nmero binario en el archivo. Los editores de texto son incluidos en el sistema operativo o en algn paquete de software instalado y se usan cuando se deben crear o modificar archivos de texto como archivos de configuracin, scripts o el cdigo fuente de algn programa. El archivo creado por un editor de texto incluye por convencin en DOS y Microsoft Windows la extensin ".txt", aunque pueda ser cambiada a cualquier otra con posterioridad. Tanto Unix como Linux dan al usuario total libertad en la denominacin de sus archivos. Al trasladar archivos de texto de un sistema operativo a otro se debe considerar que existen al menos dos convenciones diferentes para sealar el trmino de una lnea: Unix y Linux usan slo retorno de carro en cambio Microsoft Windows usa al trmino de cada lnea retorno de carro y salto de lnea.

Tipos de editores de texto


Hay una gran variedad de editores de texto. Algunos son de uso general, mientras que otros estn diseados para escribir o programar en un lenguaje. Algunos son muy sencillos, mientras que otros tienen implementadas gran cantidad de funciones. El editor de texto debe ser considerado como una herramienta de trabajo del programador o administrador de la mquina. Como herramienta permite realizar ciertos trabajos, pero tambin requiere de aprendizaje para que el usuario conozca y obtenga destreza en su uso. La llamada curva de aprendizaje es una representacin de la destreza adquirida a lo largo del tiempo de aprendizaje. Un editor puede ofrecer muchas funciones, pero si su curva de aprendizaje es muy larga, puede desanimar el aprendizaje y terminar siendo dejado de lado. Puede que un editor tenga una curva de aprendizaje muy empinada y corta, pero si no ofrece muchas funciones el usuario le reemplazar por otro ms productivo. Es decir la eleccin del editor ms apropiado depende de varios factores, alguno de ellos muy subjetivos. Esta coyuntura de intereses ha dado lugar a largas discusiones sobre la respuesta a la pregunta "cul es el mejor editor de texto?". Hoy en da muchos editores originalmente salidos de Unix o Linux han sido portados a otros sistemas operativos, lo que permite trabajar en otros sistemas sin tener que aprender el uso de otro editor. Algunos editores son sencillos mientras que otros ofrecen una amplia gama de funciones. Editores para profesionales deben ser capaces de leer archivos de gran extensin, mayor que la capacidad e la memoria RAM de la mquina y tambin arrancar rpidamente, ya que el tiempo de espera disminuye la concentracin y disminuye de por si la productividad. Los editores de texto sirven para muchas cosas pues facilitan el trabajo. Algunos editores de texto incluyen el uso de lenguajes de programacin para automatizar engorrosos o repetidos procedimientos a realizar en el texto. Por ejemplo, Emacs puede ser adaptado a las necesidades del usuario, incluso las combinaciones de teclas para ejecutar funciones pueden ser adaptadas y es programable en Lisp. Muchos editores de texto incluyen coloreado de sintaxis y funciones que ofrecen al usuario completar una palabra iniciada usando para ello la configuracin. Algunas funciones especiales son:

Marcar regin: es la funcin que marca, visualmente o no, una parte del texto para ser elaborada con otras funciones. La regin puede contener varias lneas del texto (regin horizontal) o bien varias columnas adyacentes del texto (regin vertical).

Bsqueda y reemplazo: el proceso de bsqueda de una palabra o una cadena de caracteres, en un texto plano y su reemplazo por otra. Existen diferentes mtodos: global, por regin, reemplazo automtico, reemplazo con confirmacin, bsqueda de texto o bsqueda de una Expresin regular.

Formatear: los editores de texto permiten automatizar las nicas funciones de formateo que utilizan: quebrar la lnea, indentar, formatear comentarios o formatear listas. Deshacer y rehacer: consiste en que el programa editor va almacenando cada una de las operaciones hechas por el usuario hasta un nmero configurable. Si el usuario se arrepiente de algn cambio, por muy anterior que sea, el editor le permite revertir todos los cambios hechos hasta el nmero configurado. Rehacer es por consiguiente, revertir algo revertido. Importar: agregar o insertar el contenido de un archivo en el archivo que se est editando. Algunos editores permiten insertar la salida o respuesta a un programa cualquiera ejecutado en la Lnea de comandos al archivo que se est editando. Filtros: algunos editores de texto permiten hacer pasar las lneas del texto o de una regin por algn programa para modificarlas u ordenarlas. Por ejemplo, para ordenar alfabticamente una lista de nombres o sacar un promedio de una lista de nmeros. Acceso remoto: un editor para trabajar en la administracin de una red de computadoras debe ofrecer la funcionalidad de editar archivos en mquinas remotas, ya sea por medio de ftp, ssh o algn otro Protocolo de red. Emacs lo puede hacer mediante Copiar, cortar y pegar: sirve para copiar, trasladar o borrar una regin marcada.

el Plugin tramp (ampliamente configurable con ssh, ftp, scp, sftp, etc), Ultraedit, del ambiente Windows, lo hace mediante ftp.

2. Compiladores
Un compilador es un programa informtico que traduce un programa escrito en un lenguaje de programacin a otro lenguaje de programacin, generando un programa equivalente que la mquina ser capaz de interpretar. Usualmente el segundo lenguaje es lenguaje de mquina, pero tambin puede ser un cdigo intermedio (bytecode), o simplemente texto. Este proceso de traduccin se conoce como compilacin. Un compilador es un programa que permite traducir el cdigo fuente de un programa en lenguaje de alto nivel, a otro lenguaje de nivel inferior (tpicamente lenguaje de mquina). De esta manera un programador puede disear un programa en un lenguaje mucho ms cercano a cmo piensa un ser humano, para luego compilarlo a un programa ms manejable por una computadora. Como parte importante de este proceso de traduccin, el compilador informa a su usuario de la presencia de errores en el programa fuente.

Partes de un compilador
La construccin de un compilador involucra la divisin del proceso en una serie de fases que variar con su complejidad. Generalmente estas fases se agrupan en dos tareas: el anlisis del programa fuente y la sntesis del programa objeto. Anlisis: Se trata de la comprobacin de la correccin del programa fuente, e incluye las fases correspondientes al Anlisis lxico (que consiste en la descomposicin del programa fuente en componentes lxicos), Anlisis sintctico (agrupacin de los componentes lxicos en frases gramaticales ) y Anlisis semntico (comprobacin de la validez semntica de las sentencias aceptadas en la fase de Anlisis Sintctico). Sntesis: Su objetivo es la generacin de la salida expresada en el lenguaje objeto y suele estar formado por una o varias combinaciones de fases de Generacin de Cdigo (normalmente se trata de cdigo intermedio o de cdigo objeto) y de Optimizacin de Cdigo (en las que se busca obtener un cdigo lo ms eficiente posible).

Alternativamente, las fases descritas para las tareas de anlisis y sntesis se pueden agrupar en Front-end y Back-end: Front-end: es la parte que analiza el cdigo fuente, comprueba su validez, genera el rbol de derivacin y rellena los valores de la tabla de smbolos. Esta parte suele ser independiente de la plataforma o sistema para el cual se vaya a compilar, y est compuesta por las fases comprendidas entre el Anlisis Lxico y la Generacin de Cdigo Intermedio. Back-end: es la parte que genera el cdigo mquina, especfico de una plataforma, a partir de los resultados de la fase de anlisis, realizada por el Front End. Esta divisin permite que el mismo Back End se utilice para generar el cdigo mquina de varios lenguajes de programacin distintos y que el mismo Front End que sirve para analizar el cdigo fuente de un lenguaje de programacin concreto sirva para generar cdigo mquina en varias plataformas distintas. Suele incluir la generacin y optimizacin del cdigo dependiente de la mquina. El cdigo que genera el Back End normalmente no se puede ejecutar directamente, sino que necesita ser enlazado por un programa enlazador (linker)

Tipos de compiladores
Esta taxonoma de los tipos de compiladores no es excluyente, por lo que puede haber compiladores que se adscriban a varias categoras: Compiladores cruzados: generan cdigo para un sistema distinto del que estn funcionando. Compiladores optimizadores: realizan cambios en el cdigo para mejorar su eficiencia, pero manteniendo la funcionalidad del programa original. Compiladores de una sola pasada: generan el cdigo mquina a partir de una nica lectura del cdigo fuente. Compiladores de varias pasadas: necesitan leer el cdigo fuente varias veces antes de poder producir el cdigo mquina. Compiladores JIT (Just In Time): forman parte de un intrprete y compilan partes del cdigo segn se necesitan.

Pauta de creacin de un compilador: En las primeras pocas de la informtica, el software de los compiladores era considerado como uno de los ms complejos existentes. Los primeros compiladores se realizaron programndolos directamente en lenguaje mquina o en ensamblador. Una vez que se dispone de un compilador, se pueden escribir nuevas versiones del compilador (u otros compiladores distintos) en el lenguaje que compila ese compilador. Actualmente existen herramientas que facilitan la tarea de escribir compiladores o intrpretes informticos. Estas herramientas permiten generar el esqueleto del analizador sintctico a partir de una definicin formal del lenguaje de partida, especificada normalmente mediante una gramtica formal y barata, dejando nicamente al programador del compilador la tarea de programar las acciones semnticas asociadas.

Proceso de compilacin
Es el proceso por el cual se traducen las instrucciones escritas en un determinado lenguaje de programacin a lenguaje mquina. Adems de un traductor, se pueden necesitar otros programas para crear un programa objeto ejecutable. Un programa fuente se puede dividir en mdulos almacenados en archivos distintos. La tarea de reunir el programa fuente a menudo se confa a un programa distinto, llamado preprocesador. El preprocesador tambin puede expandir abreviaturas, llamadas a macros, a proposiciones del lenguaje fuente. Normalmente la creacin de un programa ejecutable (un tpico.exe para Microsoft Windows o DOS) conlleva dos pasos. El primer paso se llama compilacin (propiamente dicho) y traduce el cdigo fuente escrito en un lenguaje de programacin almacenado en un archivo a cdigo en bajo nivel (normalmente en cdigo objeto, no directamente a lenguaje mquina). El segundo paso se llama enlazado en el cual se enlaza el cdigo de bajo nivel generado de todos los ficheros y subprogramas que se han mandado compilar y se aade el cdigo de las funciones que hay en las bibliotecas del compilador para que el ejecutable pueda comunicarse directamente con el sistema operativo, traduciendo as finalmente el cdigo objeto a cdigo mquina, y generando un mdulo ejecutable. Estos dos pasos se pueden hacer por separado, almacenando el resultado de la fase de compilacin en archivos objetos (un tpico.obj para Microsoft Windows, DOS o para Unix); para enlazarlos en fases posteriores, o crear directamente el ejecutable; con lo que la fase de compilacin se almacena slo temporalmente. Un programa podra tener partes escritas en varios lenguajes (por ejemplo C, C++ y Asm), que se podran compilar de forma independiente y luego enlazar juntas para formar un nico mdulo ejecutable.

Etapas del proceso de compilacin


El proceso de traduccin se compone internamente de varias etapas o fases, que realizan distintas operaciones lgicas. Es til pensar en estas fases como en piezas separadas dentro del traductor, y pueden en realidad escribirse como operaciones codificadas separadamente aunque en la prctica a menudo se integren juntas. Las fases de anlisis son:

Anlisis lxico: el anlisis lxico constituye la primera fase, aqu se lee el programa fuente de izquierda a derecha y se agrupa en componentes lxicos (tokens), que son secuencias de caracteres que tienen un significado. Adems, todos los espacios en blanco, lneas en blanco, comentarios y dems informacin innecesaria se elimina del programa fuente. Tambin se comprueba que los smbolos del lenguaje (palabras clave, operadores, etc.) se han escrito correctamente. Como la tarea que realiza el analizador lxico es un caso especial de coincidencia de patrones, se necesitan los mtodos de especificacin y reconocimiento de patrones, se usan principalmente los autmatas finitos que acepten expresiones regulares. Sin embargo, un analizador lxico tambin es la parte del traductor que maneja la entrada del cdigo fuente, y puesto que esta entrada a menudo involucra un importante gasto de tiempo, el analizador lxico debe funcionar de manera tan eficiente como sea posible. Anlisis sintctico: en esta fase los caracteres o componentes lxicos se agrupan jerrquicamente en frases gramaticales que el compilador utiliza para sintetizar la salida. Se comprueba si lo obtenido de la fase anterior es sintcticamente correcto (obedece a la gramtica del lenguaje). Por lo general, las frases gramaticales del programa fuente se representan mediante un rbol de anlisis sintctico. La estructura jerrquica de un programa normalmente se expresa utilizando reglas recursivas. Por ejemplo, se pueden dar las siguientes reglas como parte de la definicin de expresiones: 1. Cualquier identificador es una expresin. 2. Cualquier nmero es una expresin. 3. Si expresin1 y expresin2 son expresiones, entonces tambin lo son: expresin1 + expresin2 expresin1 * expresin2 ( expresin1 )

Las reglas 1 y 2 son reglas bsicas (no recursivas), en tanto que la regla 3 define expresiones en funcin de operadores aplicados a otras expresiones. La divisin entre anlisis lxico y anlisis sintctico es algo arbitraria. Un factor para determinar la divisin es si una construccin del lenguaje fuente es inherentemente recursiva o no. Las construcciones lxicas no requieren recursin, mientras que las construcciones sintcticas suelen requerirla.

No se requiere recursin para reconocer los identificadores, que suelen ser cadenas de letras y dgitos que comienzan con una letra. Normalmente, se reconocen los identificadores por el simple examen del flujo de entrada, esperando hasta encontrar un carcter que no sea ni letra ni dgito, y agrupando despus todas las letras y dgitos encontrados hasta ese punto en un componente lxico llamado identificador. Por otra parte, esta clase de anlisis no es suficientemente poderoso para analizar expresiones o proposiciones. Por ejemplo, no podemos emparejar de manera apropiada los parntesis de las expresiones, o las palabras begin y end en proposiciones sin imponer alguna clase de estructura jerrquica o de anidamiento a la entrada. Anlisis semntico: la fase de anlisis semntico revisa el programa fuente para tratar de encontrar errores semnticos y rene la informacin sobre los tipos para la fase posterior de generacin de cdigo. En ella se utiliza la estructura jerrquica determinada por la fase de anlisis sintctico para identificar los operadores y operandos de expresiones y proposiciones. Un componente importante del anlisis semntico es la verificacin de tipos. Aqu, el compilador verifica si cada operador tiene operandos permitidos por la especificacin del lenguaje fuente. Por ejemplo, las definiciones de muchos lenguajes de programacin requieren que el compilador indique un error cada vez que se use un nmero real como ndice de una matriz. Sin embargo, la especificacin del lenguaje puede imponer restricciones a los operandos, por ejemplo, cuando un operador aritmtico binario se aplica a un nmero entero y a un nmero real.2 Revisa que los arreglos tengan definido el tamao correcto.

Estructura de datos principales


La interaccin entre los algoritmos utilizados por las fases del compilador y las estructuras de datos que soportan estas fases es, naturalmente, muy fuerte. El escritor del compilador se esfuerza por implementar estos algoritmos de una manera tan eficaz como sea posible, sin aumentar demasiado la complejidad. De manera ideal, un compilador debera poder compilar un programa en un tiempo proporcional al tamao del mismo.

Componentes lxicos o tokens


Cuando un analizador lxico rene los caracteres en un token, generalmente representa el token de manera simblica, es decir, como un valor de un tipo de datos enumerado que representa el conjunto de tokens del lenguaje fuente. En ocasiones tambin es necesario mantener la cadena de caracteres misma u otra informacin derivada de ella, tal como el nombre asociado con un token identificador o el valor de un token de nmero. En la mayora de los lenguajes el analizador lxico slo necesita generar un token a la vez. En este caso se puede utilizar una variable global simple para mantener la informacin del token. En otros casos (cuyo ejemplo ms notable es FORTRAN), puede ser necesario un arreglo (o vector) de tokens.

rbol sintctico
Si el analizador sintctico genera un rbol sintctico, por lo regular se construye como una estructura estndar basada en un puntero que se asigna de manera dinmica a medida que se efecta el anlisis sintctico. El rbol entero puede entonces conservarse como una variable simple que apunta al nodo raz. Cada nodo en la estructura es un registro cuyos campos representan la informacin recolectada tanto por el analizador sintctico como, posteriormente, por el analizador semntico. Por ejemplo, el tipo de datos de una expresin puede conservarse como un campo en el nodo del rbol sintctico para la expresin. En ocasiones, para ahorrar espacio, estos campos se asignan de manera dinmica, o se almacenan en otras estructuras de datos, tales como la tabla de smbolos, que permiten una asignacin y desasignacin selectivas. En realidad, cada nodo del rbol sintctico por s mismo puede requerir de atributos diferentes para ser almacenado, de acuerdo con la clase de estructura del lenguaje que represente. En este caso, cada nodo en el rbol sintctico puede estar representado por un registro variable, con cada clase de nodo conteniendo solamente la informacin necesaria para ese caso.

Tabla de smbolos
Esta estructura de datos mantiene la informacin asociada con los identificadores: funciones, variables, constantes y tipos de datos. La tabla de smbolos interacta con casi todas las fases del compilador: el analizador lxico, el analizador sintctico o el analizador semntico pueden introducir identificadores dentro de la tabla; el analizador semntico agregar tipos de datos y otra informacin; y las fases de optimizacin y generacin de cdigo utilizarn la informacin proporcionada por la tabla de smbolos para efectuar selecciones apropiadas de cdigo objeto. Puesto que la tabla de smbolos tendr solicitudes de acceso con tanta frecuencia, las operaciones de insercin, eliminacin y acceso necesitan ser eficientes, preferiblemente operaciones de tiempo constante. Una estructura de datos estndar para este propsito es la tabla de dispersin o de clculo de direccin, aunque tambin se pueden utilizar diversas estructuras de rbol. En ocasiones se utilizan varias tablas y se mantienen en una lista o pila.

Tabla de literales
La bsqueda y la insercin rpida son esenciales tambin para la tabla de literales, la cual almacena constantes y cadenas utilizadas en el programa. Sin embargo, una tabla de literales necesita impedir las eliminaciones porque sus datos se aplican globalmente al programa y una constante o cadena aparecer slo una vez en esta tabla. La tabla de literales es importante en la reduccin del tamao de un programa en la memoria al permitir la reutilizacin de constantes y cadenas. Tambin es necesaria para que el generador de cdigo construya direcciones simblicas para las literales y para introducir definiciones de datos en el archivo de cdigo objeto.

Cdigo intermedio
De acuerdo con la clase de cdigo intermedio (por ejemplo, cdigo de tres direcciones o cdigo P) y de las clases de optimizaciones realizadas, este cdigo puede conservarse como un arreglo de cadenas de texto, un archivo de texto temporal o bien una lista de estructuras ligadas. En los compiladores que realizan optimizaciones complejas debe ponerse particular atencin a la seleccin de representaciones que permitan una fcil reorganizacin. Despus de los anlisis sintctico y semntico, algunos compiladores generan una representacin intermedia explcita del programa fuente. Se puede considerar esta representacin intermedia como un programa para una mquina abstracta. Esta representacin intermedia debe tener dos propiedades importantes; debe ser fcil de producir y fcil de traducir al programa objeto. La representacin intermedia puede tener diversas formas. Existe una forma intermedia llamada cdigo de tres direcciones, que es como el lenguaje ensamblador para una mquina en la que cada posicin de memoria puede actuar como un registro. El cdigo de tres direcciones consiste en una secuencia de instrucciones, cada una de las cuales tiene como mximo tres operandos. El programa fuente de (1) puede aparecer en cdigo de tres direcciones como

temp1 := entarea1(60) temp2 := id3 * temp1 (2) temp3 := id2 + temp2 id1 := temp3

Esta representacin intermedia tiene varias propiedades. Primera, cada instruccin de tres direcciones tiene a lo sumo un operador, adems de la asignacin. Por tanto, cuando se generan esas instrucciones el compilador tiene que decidir el orden en que deben efectuarse, las operaciones; la multiplicacin precede a la adicin al programa fuente de. Segunda, el compilador debe generar un nombre temporal para guardar los valores calculados por cada instruccin. Tercera, algunas instrucciones de tres direcciones tienen menos de tres operadores, por ejemplo la primera y la ltima instrucciones de.

La fase de optimizacin de cdigo trata de mejorar el cdigo intermedio de modo que resulte un cdigo de mquina ms rpido de ejecutar. Algunas optimizaciones son triviales. Por ejemplo, un algoritmo natural genera el cdigo intermedio (2) utilizando una instruccin para cada operador de la representacin del rbol despus del anlisis semntico, aunque hay una forma mejor de realizar los mismos clculos usando las dos instrucciones

temp1 := id3 * 60.0 (3) id1 := id2 + temp1

Este sencillo algoritmo no tiene nada de malo, puesto que el problema se puede solucionar en la fase de optimizacin de cdigo. Esto es, el compilador puede deducir que la conversin de 60 de entero a real se puede hacer de una vez por todas en el momento de la compilacin, de modo que la operacin entreal se puede eliminar. Adems, temp3 se usa slo una vez, para transmitir su valor a id1. Entonces resulta seguro sustituir a id1 por temp3, a partir de lo cual la ltima proposicin de (2) no se necesita y se obtiene el cdigo de (3). Hay muchas variaciones en la cantidad de optimizacin de cdigo que ejecutan los distintos compiladores. En lo que hacen mucha optimizacin llamados compiladores optimizadores, una parte significativa del tiempo del compilador se ocupa en esta fase. Sin embargo, hay optimizaciones sencillas que mejoran sensiblemente el tiempo de ejecucin del programa objeto sin retardar demasiado la compilacin.

Archivos temporales
Al principio las computadoras no tenan la suficiente memoria para guardar un programa completo durante la compilacin. Este problema se resolvi mediante el uso de archivos temporales para mantener los productos de los pasos intermedios durante la traduccin o bien al compilar al vuelo, es decir, manteniendo slo la informacin suficiente de las partes anteriores del programa fuente que permita proceder a la traduccin. Las limitaciones de memoria son ahora un problema mucho menor, y es posible requerir que una unidad de compilacin entera se mantenga en memoria, en especial si se dispone de la compilacin por separado en el lenguaje. Con todo, los compiladores ocasionalmente encuentran til generar archivos intermedios durante alguna de las etapas del procesamiento. Algo tpico de stos es la necesidad de direcciones de correccin hacia atrs durante la generacin de cdigo.

3. Entorno de desarrollo integrado (IDE)


Un entorno de desarrollo integrado, llamado tambin IDE (sigla en ingls de integrated development environment), es un programa informtico compuesto por un conjunto de herramientas deprogramacin. Puede dedicarse en exclusiva a un solo lenguaje de programacin o bien puede utilizarse para varios. Un IDE es un entorno de programacin que ha sido empaquetado como un programa de aplicacin; es decir, consiste en un editor de cdigo, un compilador, un depurador y un constructor de interfaz grfica (GUI). Los IDEs pueden ser aplicaciones por s solas o pueden ser parte de aplicaciones existentes. El lenguaje Visual Basic, por ejemplo, puede ser usado dentro de las aplicaciones de Microsoft Office, lo que hace posible escribir sentencias Visual Basic en forma de macros para Microsoft Word. Los IDE proveen un marco de trabajo amigable para la mayora de los lenguajes de programacin tales como C++, PHP, Python, Java,C#, Delphi, Visual Basic, etc. En algunos lenguajes, un IDE puede funcionar como un sistema en tiempo de ejecucin, en donde se permite utilizar el lenguaje de programacin en forma interactiva, sin necesidad de trabajo orientado a archivos de texto, como es el caso de Smalltalk u Objective-C.

4. Enlazador
Un enlazador (en ingls, linker) es un programa que toma los objetos generados en los primeros pasos del proceso de compilacin, la informacin de todos los recursos necesarios (biblioteca), quita aquellos recursos que no necesita, y enlaza el cdigo objeto con su(s) biblioteca(s) con lo que finalmente produce un fichero ejecutable o una biblioteca. En el caso de los programas enlazados dinmicamente, el enlace entre el programa ejecutable y las bibliotecas se realiza en tiempo de carga o ejecucin del programa.

5. Depurador o debugger
Un depurador (en ingls, debugger), es un programa usado para probar y depurar (eliminar los errores) de otros programas (el programa "objetivo"). El cdigo a ser examinado puede alternativamente estar corriendo en un simulador de conjunto de instrucciones(ISS), una tcnica que permite gran potencia en su capacidad de detenerse cuando son encontradas condiciones especficas pero ser tpicamente algo ms lento que ejecutando el cdigo directamente en el apropiado (o el mismo) procesador. Algunos depuradores ofrecen dos modos de operacin - la simulacin parcial o completa, para limitar este impacto. Si es un depurador de nivel de fuente o depurador simblico, comnmente ahora visto en entornos de desarrollo integrados, cuando el programa "se estrella" o alcanza una condicin predefinida, la depuracin tpicamente muestra la posicin en el cdigo original. Si es un depurador de bajo nivel o un depurador de lenguaje de mquina, muestra la lnea en el fuente desensamblado (a menos que tambin tenga acceso en lnea al cdigo fuente original y pueda exhibir la seccin apropiada del cdigo del ensamblador o del compilador).

Un "estrellamiento" sucede cuando el programa no puede continuar normalmente debido a un error de programacin. Por ejemplo, el programa pudo haber intentado usar una instruccin no disponible en la versin actual del CPU o haber intentado tener acceso a memoria protegida o no disponible. Tpicamente, los depuradores tambin ofrecen funciones ms sofisticadas tales como correr un programa paso a paso (un paso o animacin del programa), parar el programa (breaking), es decir, pausar el programa para examinar el estado actual en cierto evento o instruccin especificada por medio de un breakpoint, y el seguimiento de valores de algunas variables. Algunos depuradores tienen la capacidad de modificar el estado del programa mientras que est corriendo, en vez de simplemente observarlo. Tambin es posible continuar la ejecucin en una posicin diferente en el programa bypaseando un estrellamiento o error lgico. La importancia de un buen depurador no puede ser exagerada. De hecho, la existencia y la calidad de tal herramienta para un lenguaje y una plataforma dadas a menudo puede ser el factor de decisin en su uso, incluso si otro lenguaje/plataforma es ms adecuado para la tarea.[cita requerida] La ausencia de un depurador, una vez estando acostumbrado a usar uno, se ha dicho que "hace que usted se sienta como un hombre ciego en un cuarto oscuro buscando un gato negro que no est all".1 Sin embargo, el software puede (y a menudo) se comporta diferentemente corriendo bajo un depurador que normalmente, debido a los cambios inevitables que la presencia de un depurador har a la temporizacin interna de un programa de software. Como resultado, incluso con una buena herramienta de depuracin, es a menudo muy difcil rastrear problemas de tiempo de corrida en complejos sistemas distribuidos con mltiples hilos. La misma funcionalidad que hace a un depurador til para eliminar errores permite ser usado como herramienta de craqueo de software para evadir la proteccin anti copia, la gestin digital de derechos, y otras caractersticas de proteccin de software. A menudo tambin lo hace til como herramienta general de verificacin de pruebas, cobertura de fallas, o analizador de desempeo, especialmente si son mostradas las longitudes de trayectoria de instruccin. La mayora de los motores de depuracin actuales, tales como gdb y dbx proporcionan interfaces basadas en lnea de comandos. Los frontales de depuracin son extensiones populares a los motores de depuracin, que proporcionan integracin al IDE, animacin del programa, y caractersticas de visualizacin. Algunos depuradores de los primeros mainframes tales como el Oliver y el SIMON proporcionaron esta misma funcionalidad para el IBM System/360 y posteriores sistemas operativos, hasta los aos 1970.

6. Intrprete (informtica)
En ciencias de la computacin, intrprete o interpretador es un programa informtico capaz de analizar y ejecutar otros programas, escritos en un lenguaje de alto nivel. Los intrpretes se diferencian de los compiladores en que mientras estos traducen un programa desde su descripcin en un lenguaje de programacin al cdigo de mquina del sistema, los intrpretes slo realizan la traduccin a medida que sea necesaria, tpicamente, instruccin por instruccin, y normalmente no guardan el resultado de dicha traduccin. Usando un intrprete, un solo archivo fuente puede producir resultados iguales incluso en sistemas sumamente diferentes (ej. una PC y un PlayStation 3). Usando un compilador, un solo archivo fuente puede producir resultados iguales solo si es compilado a distintos ejecutables especficos a cada sistema. Los programas interpretados suelen ser ms lentos que los compilados debido a la necesidad de traducir el programa mientras se ejecuta, pero a cambio son ms flexibles como entornos de programacin y depuracin (lo que se traduce, por ejemplo, en una mayor facilidad para reemplazar partes enteras del programa o aadir mdulos completamente nuevos), y permiten ofrecer al programa interpretado un entorno no dependiente de la mquina donde se ejecuta el intrprete, sino del propio intrprete (lo que se conoce comnmente como mquina virtual). Para mejorar el desempeo, algunas implementaciones de programacin de lenguajes de programacin pueden interpretar o compilar el cdigo fuente original en una ms compacta forma intermedia y despus traducir eso al cdigo de mquina (ej. Perl, Python, MATLAB, y Ruby). Algunos aceptan los archivos fuente guardados en esta representacin intermedia (ej. Python, UCSD Pascal y Java). Comparando su actuacin con la de un ser humano, un compilador equivale a un traductor profesional que, a partir de un texto, prepara otro independiente traducido a otra lengua, mientras que un intrprete corresponde al intrprete humano, que traduce de viva voz las palabras que oye, sin dejar constancia por escrito. En la actualidad, uno de los entornos ms comunes de uso de los intrpretes informticos es Internet, debido a la posibilidad que estos tienen de ejecutarse independientemente de la plataforma.

Interpretadores de bytecode
Hay un espectro de posibilidades entre la interpretacin y la compilacin, dependiendo de la cantidad de anlisis realizados antes de que el programa sea ejecutado. Por ejemplo, el Emacs Lispes compilado a bytecode, que es una representacin altamente comprimida y optimizada del cdigo fuente del Lisp, pero no es cdigo de mquina (y por lo tanto no est atado a cualquier hardware particular). Este cdigo "compilado" es entonces interpretado por un interpretador de bytecode (que est escrito en C).

En este caso, el cdigo compilado es el cdigo de mquina para una mquina virtual, que no est implementada en el hardware, sino en el interpretador de bytecode. El mismo acercamiento es utilizado con el cdigo Forth usado en sistemas Open Firmware: el lenguaje fuente es compilado en "cdigo F" (un bytecode), que entonces es interpretado por una mquina virtual.

Eficiencia
La desventaja principal de los interpretadores es que cuando se interpreta un programa, tpicamente corre ms lentamente que si hubiera sido compilado. La diferencia en velocidades puede ser minscula o grande; a menudo un orden de magnitud y a veces ms. Generalmente toma ms tiempo correr un programa bajo un interpretador que correr el cdigo compilado, pero puede tomar menos tiempo para interpretarlo que el tiempo total requerido para compilarlo y ejecutarlo. Esto es especialmente importante si se est haciendo y probando un cdigo prototipo cuando un ciclo de editar, interpretar y depurar del interpretador, a menudo puede ser mucho ms corto que el ciclo de editar, compilar, ejecutar y depurar del compilador. La interpretacin de cdigo es ms lenta que la ejecucin de cdigo compilado porque el interpretador debe analizar cada sentencia en el programa cada vez que es ejecutada y entonces realizar la accin deseada, mientras que el cdigo compilado solo realiza la accin dentro de un determinado contexto fijo por la compilacin. Este anlisis en tiempo de ejecucin se conoce como "sobrecarga interpretativa". En un interpretador, el acceso a las variables es tambin ms lento porque el mapeo de identificadores hacia las localizaciones de almacenamiento debe hacerse repetidamente en tiempo de ejecucin en vez de en el tiempo de compilacin. Hay varios compromisos entre la velocidad de desarrollo al usar un interpretador y la velocidad de ejecucin al usar un compilador. Algunos sistemas (ej., algunos LISPs) permiten al cdigo interpretado y al compilado llamarse el uno al otro y compartir variables. Esto significa que una vez que una rutina ha sido probada y depurada bajo el interpretador puede ser compilada y por lo tanto beneficiarse de una ejecucin ms rpida mientras que otras rutinas estn siendo desarrolladas. Muchos interpretadores no ejecutan el cdigo fuente tal y como est sino que lo convierten en una forma interna ms compacta. Por ejemplo, algunos interpretadores BASIC reemplazan palabras clave(keywords) con tokens de un simple byte que pueden ser usados para encontrar la instruccin en una tabla de saltos. Un interpretador puede bien usar el mismo analizador lexicogrfico y el analizador sintctico (parser) que el compilador y entonces interpretar el rbol de sintaxis abstracta resultante.

Interpretadores de rbol de sintaxis abstracta


En el espectro entre la interpretacin y la compilacin, otro acercamiento est transformando el cdigo fuente en un rbol de sintaxis abstracta optimizado (AST), y despus procediendo a ejecutar el programa siguiendo esta estructura arborescente.[1] En este acercamiento cada sentencia necesita ser analizada (parsed) solo una vez. Como una ventaja sobre el bytecode, el AST mantiene la estructura y las relaciones globales del programa entre las sentencias (que se pierden en una representacin de bytecode), y proporciona una representacin ms compacta.

As, el AST se ha propuesto como un mejor formato intermedio para los compiladores justo a tiempo que el bytecode. Tambin, permite realizar un mejor anlisis durante tiempo de ejecucin. Un interpretador Java basado en AST ha demostrado ser ms rpido que un interpretador similar basado en bytecode,[3] gracias a las ms poderosas optimizaciones permitidas al tener la estructura completa del programa, as como tipos de datos de alto nivel, disponibles durante la ejecucin.

Compilacin justo a tiempo


Para desdibujar ms la distincin entre los interpretadores, los interpretadores de bytecode y la compilacin, est la compilacin justo a tiempo (o JIT), una tcnica en la cual la representacin intermedia es compilada a cdigo de mquina nativo en tiempo de ejecucin. Esto confiere la eficiencia de ejecutar el cdigo nativo, al costo de tiempo de inicio y de un uso creciente de la memoria cuando el bytecode o el AST es compilado por primera vez. La optimizacin adaptativa es una tcnica complementaria en la cual el interpretador hace un anlisis de desempeo del programa que est corriendo (profiling) y compila sus partes ms frecuentemente ejecutadas a cdigo nativo. Ambas tcnicas tienen algunas dcadas, apareciendo en lenguajes tales como Smalltalk en los aos 1980. En aos recientes, la compilacin justo a tiempo ha ganado la atencin de la mayora de los implementadores de lenguajes de programacin, con Java, Python, y el Microsoft .NET Framework todos ahora incluyendo JITs.

Ejemplos
Algunos ejemplos de lenguajes que son normalmente interpretados en vez de compilados son: Perl PHP Javascript Logo ASP (hasta la versin 3) Python Tcl Ruby J# ASP