Intro Not As

32
Agenda Clase 1 Clase 1 Evolución históric a Evolución de los lenguajes de programación Clasificación de los lenguajes de programación Compilación e interpretación Presentación

description

Notas JAVA

Transcript of Intro Not As

Page 1: Intro Not As

Agenda Clase 1Clase 1

Evoluciónhistórica

Evoluciónde los lenguajesde programación

Clasificación de los lenguajesde programación

Compilación e interpretación

Presentación

Page 2: Intro Not As

Web Servicies

SOA – Arquitectura Orientada a Servicios

PHP

J SP

J avascript

Eclipse (plugins C++, C, PHP,..)

Temas ExposicionesTemas Exposiciones

Page 3: Intro Not As

[Presentación 15min]

Contenido

● Qué es?

● Areas de aplicación

● Ejemplos Básicos

● Relacionescon otras herramientas(versiones, plungins, interfaces)

Page 4: Intro Not As

EvoluciEvoluciónón HistóricaHistórica

Page 5: Intro Not As
Page 6: Intro Not As

En los cuarenta las computadoras ocupaban cuartos enteros,

consumían gran cantidad de electricidad y tenían una capacidad de

cómputo similar a la de una calculadora de la actualidad.

En un principio eran programadas en lenguaje de máquina o

secuencia de bits controlados directamente por un procesador que

permiten añadir, comparar y mover datos de un lugar a otro en el

momento apropiado.

Posteriormente, dado el aumento en el tamaño de los programas y lo

engorroso de la programación en lenguaje de máquina, se ideó el

lenguaje ensamblador que son abreviaciones mnemónicas que

corresponden 1 a 1 a las instrucciones de la máquina y que son

traducidas a través de un assembler.

El lenguaje ensamblador evolucionó con macro expansiones

permitiéndole a los programadores definir una secuencia de

instrucciones a través de una abreviación.

Es de notar que la programación dependía de la máquina, ya que

cada una poseía su propio lenguaje ensamblador, y por tanto, los

programadores debían pensar en términos de las instrucciones que

una máquina en específico podía ejecutar.

Page 7: Intro Not As

gran

escasa capacidad de cómputo yalmacenamiento

tamaño

Page 8: Intro Not As

Programados en lenguaje de máquina

Posteriormente surgen Posteriormente surgen

los lenguajes los lenguajes

ensambladoresensambladores

Tras el desarrollo de las primeras computadoras surgió la necesidad de programarlas para que realizaran las tareasdeseadas.

Los lenguajes más primitivos fueron los denominados lenguajesmáquina. Como el hardware se desarrollaba antes que el software, estos lenguajes se basaban en el hardware, con lo quecada máquina tenía su propio lenguaje y por ello la programación era un trabajo costoso, válido sólo para esamáquina en concreto.

Posteriormente, dado el aumento en el tamaño de los programas

y lo engorroso de la programación en lenguaje de máquina, se

ideó el lenguaje ensamblador que son abreviaciones

mnemónicas que corresponden 1 a 1 a las instrucciones de la

máquina y que son traducidas a través de un assembler.

Page 9: Intro Not As
Page 10: Intro Not As

POsteriormente se desarrollaron las primeras herramientasautomáticas generadoras de código fuente. Pero con el permanente desarrollo de las computadoras, y el aumento de complejidad de las tareas, surgieron a partir de los años 50 los primeros lenguajes de programación de alto nivel.

lenguaje de programación es un conjunto de símbolos y reglassintácticas y semánticas que definen su estructura y el significadode sus elementos y expresiones, y utilizado para controlar el comportamiento físico y lógico de una máquina.

Un lenguaje de programación permite a uno o más programadoresespecificar de manera precisa: sobre qué datos una computadoradebe operar, cómo deben ser estos almacenados, transmitidos y qué acciones debe tomar bajo una variada gama de circunstancias. Todo esto, a través de un lenguaje que intenta estar relativamentepróximo al lenguaje humano o natural, tal como sucede con el lenguaje Léxico. Una característica relevante de los lenguajes de programación es precisamente que más de un programadorpuedan tener un conjunto común de instrucciones que puedan ser comprendidas entre ellos para realizar la construcción del programa de forma colaborativa.

Page 11: Intro Not As

Con la aparición de los distintos lenguajes, solían aparecer diferentesversiones de un mismo lenguaje, por lo que surgió la necesidad de estandarizarlos para que fueran más universales. Las organizacionesque se encargan de regularizar los lenguajes son ANSI (Instituto de las Normas Americanas) y ISO (Organización de NormasInternacionales).

Con el nacimiento de los primeros lenguajes de alto nivel, se hizo

necesario un mecanismo para la traducción de las instrucciones de

estos lenguajes a las que pueden ser entendidas por la máquina, es

por ello que surge el compilador que no es más que un programa del

sistema que lleva a cabo las mencionadas labores de traducción.

Este compilador es más complejo que el lenguaje ensamblador ya

que no hay una correspondencia 1 a 1 entre el código fuente y las

instrucciones de la máquina, además sus programas son más lentos

que los elaborados en lenguaje ensamblador.

Sin embargo, el incremento en la complejidad del hardware y las

mejoras en las tecnologías de los compiladores provocaron que éstos

desarrollaran mejor código que los humanos, con un ahorro

sustancial de esfuerzo, no sólo en las labores de programación sino

también en las de mantenimiento y optimización.

Page 12: Intro Not As

Evolución: el pasar de los años ha propiciado el surgimiento de los

lenguajes y la evolución de los paradigmas de programación,

teniendo por ejemplo en los 60�s y 70�s el paso de la programación

estructurada basada en �go to� (Fortran, Cobol, Basic, etc.) a �loops

while�, instrucciones �case� y otras construcciones similares de alto

nivel; y en los 80�s la evolución de la estructura de bloques anidados

(Algol, Pascal, Ada) a la orientación a objetos (Smalltalk, C++,

Eiffel)

Propósitos Especiales: los lenguajes fueron desarrollados para un

dominio específico, por lo que a pesar de poder realizar varias tareas,

se enfatiza en la especialización. Por ejemplo LISP está orientado al

manejo de datos simbolicos y estructuras de datos complejos, Snobol

y Icon al manejo de Strings, C a la programación de bajo nivel y

Prolog a las relaciones lógicas entre datos.

Preferencia Personal: vinculada a los gustos del programador y su

inclinación a programar con un lenguaje más que con otro.

Page 13: Intro Not As

Poder Expresivo: en esencia todos los lenguajes son equivalentes (pueden hacer las misma tareas), sin embargo las facilidades queofrezca el lenguaje incidirán en la habilidad del programador para escribir código claro, conciso y mantenible.

Facilidad de Uso para Novatos: mientras más baja sea la curva de aprendizaje del lenguaje, mayor será su popularidad.

Facilidad de Implementación: se refiere a la facilidad que brinda el lenguaje para trabajar en máquinas pequeñas con recursos limitados. Un ejemplo resaltante es Pascal cuyo diseñador Nicklaus Wirth desarrolló una implementación simple y portátil del lenguaje quedistribuyó gratuitamente en universidades alrededor del mundo.

Excelentes Compiladores: esta excelencia puede considerarse por una parte a la generación rápida de código de los compiladores cuya evolución histórica les ha facilitado la tarea, o a las facilidades que ofrecen ciertos compiladores para aligerar la carga del programador en proyectos extensos.

Economía, Patronato e Inercia: Se refiere por un lado al respaldo de un patrocinante poderoso (Cobol y PL/I de IBM y sobre todo Ada que por cuya complejidad habría muerto de no ser por el respaldo del Departamento de Defensa de los EE.UU.) y por el otro a una amplia base de software instalado y experticia de programación cuyo reemplazo sería sumamente costoso aunque existan mejores opciones.

Aparte de estas características también constituyen razones de éxito la claridad conceptual y la eficiencia de implementación, ya que con ello se cubren las expectativas tanto de implementadores de lenguajes como de los programadores que harán uso de los mismos.

Page 14: Intro Not As

Clasificación de losde los

lenguajes

Nivel de abstracción

Forma de ejecución

Paradigma de programación

Page 15: Intro Not As

Lenguajes MaquinaEstan escritos en lenguajes directamente inteligibles por la maquina (computadora), ya que sus intrucciones son cadenasbinarias (0 y 1). Da la posibilidad de cargar (transferir un programa a la memoria) sin necesidad de traducción posterior lo que supone una velocidad de ejecución superior, solo quecon poca fiabilidad y dificuldad de verificar y poner a puntolos programas.

Lenguajes de bajo nivelLos lenguajes de bajo nivel son lenguajes de programaciónque se acercan al funcionamiento de una computadora. El lenguaje de más bajo nivel es, por excelencia, el códigomáquina. A éste le sigue el lenguaje ensamblador, ya que al programar en ensamblador se trabajan con los registros de memoria de la computadora de forma directa.

Lenguajes de medio nivelHay lenguajes de programación que son considerados poralgunos expertos como lenguajes de medio nivel (como es el caso del lenguaje C) al tener ciertas características que los acercan a los lenguajes de bajo nivel pero teniendo, al mismotiempo, ciertas cualidades que lo hacen un lenguaje máscercano al humano y, por tanto, de alto nivel.

Lenguajes de alto nivelLos lenguajes de programación de alto nivel se caracterizanpor expresar los algoritmos de una manera adecuada a la capacidad cognitiva humana, en lugar de a la capacidadejecutora de las máquinas. En los primeros lenguajes de alto nivel la limitación era que se orientaban a un área específicay sus instrucciones requerían de una sintaxis predefinida. Se clasifican como lenguajes procedimentales. Otra limitaciónde los lenguajes de alto nivel es que se requiere de ciertosconocimientos de programación para realizar las secuenciasde instrucciones lógicas. Los lenguajes de muy alto nivel se crearon para que el usuario común pudiese solucionar talproblema de procesamiento de datos de una manera más fácily rápida.

Page 16: Intro Not As

Lenguajes compiladosNaturalmente, un programa que se escribe en un lenguaje de alto niveltambién tiene que traducirse a un código que pueda utilizar la máquina. Los programas traductores que pueden realizar estaoperación se llaman compiladores. Éstos, como los programasensambladores avanzados, pueden generar muchas líneas de código de máquina por cada proposición del programa fuente. Se requiere unacorrida de compilación antes de procesar los datos de un problema.Los compiladores son aquellos cuya función es traducir un programaescrito en un determinado lenguaje a un idioma que la computadoraentienda (lenguaje máquina con código binario).Al usar un lenguaje compilado, el programa desarrollado nunca se ejecuta mientras haya errores, sino hasta que luego de habercompilado el programa, ya no aparecen errores en el código

Lenguajes interpretadosSe puede también utilizar una alternativa diferente de los compiladorespara traducir lenguajes de alto nivel. En vez de traducir el programafuente y grabar en forma permanente el código objeto que se produce durante la corrida de compilación para utilizarlo en una corrida de producción futura, el programador sólo carga el programa fuente en lacomputadora junto con los datos que se van a procesar. A continuación, un programa intérprete, almacenado en el sistemaoperativo del disco, o incluido de manera permanente dentro de la máquina, convierte cada proposición del programa fuente en lenguajede máquina conforme vaya siendo necesario durante el proceso de los datos. No se graba el código objeto para utilizarlo posteriormente.

La siguiente vez que se utilice una instrucción, se le debe interpretarotra vez y traducir a lenguaje máquina. Por ejemplo, durante el procesamiento repetitivo de los pasos de un ciclo, cada instrucción del ciclo tendrá que volver a ser interpretado cada vez que se ejecute el ciclo, lo cual hace que el programa sea más lento en tiempo de ejecución (porque se va revisando el código en tiempo de ejecución) pero más rápido en tiempo de diseño (porque no se tiene que estarcompilando a cada momento el código completo). El intérpreteelimina la necesidad de realizar una corrida de compilación después de cada modificación del programa cuando se quiere agregar funciones ocorregir errores; pero es obvio que un programa objeto compilado con antelación deberá ejecutarse con mucha mayor rapidez que uno que se debe interpretar a cada paso durante una corrida de producción

Page 17: Intro Not As

Imperativo describe la programación en términos del estado del programa y sentencias que cambian dichoestado. Los programas imperativos son un conjunto de instrucciones que le indican al computador cómorealizar una tarea.

La implementación de hardware de la mayoría de computadores es imperativa; prácticamente todo el hardware de los computadores está diseñado para ejecutar código de máquina, que es nativo al computador, escrito en una forma imperativa. Esto se debe a que el hardware de los computadores implementa elparadigma de las Máquinas de Turing. Desde esta perspectiva de bajo nivel, el estilo del programa estádefinido por los contenidos de la memoria, y las sentencias son instrucciones en el lenguaje de máquinanativo del computador (por ejemplo el lenguaje ensamblador).Los lenguajes imperativos de alto nivel usan variables y sentencias más complejas, pero aún siguen el mismoparadigma. Las recetas y las listas de revisión de procesos, a pesar de no ser programas de computadora, son también conceptos familiares similares en estilo a la programación imperativa; cada paso es una instrucción, y el mundo físico guarda el estado

Funcional Los programas escritos en un lenguaje funcional están constituidos únicamente por definicionesde funciones, entendiendo éstas no como subprogramas clásicos de un lenguaje imperativo, sino comofunciones puramente matemáticas, en las que se verifican ciertas propiedades como la transparenciareferencial (el significado de una expresión depende únicamente del significado de sus subexpresiones), y por tanto, la carencia total de efectos laterales.Otras características propias de estos lenguajes son la no existencia de asignaciones de variables y la falta de construcciones estructuradas como la secuencia o la iteración (lo que obliga en la práctica a que todas lasrepeticiones de instrucciones se lleven a cabo por medio de funciones recursivas).Existen dos grandes categorías de lenguajes funcionales: los funcionales puros y los híbridos. La diferenciaentre ambos estriba en que los lenguajes funcionales híbridos son menos dogmáticos que los puros, al admitirconceptos tomados de los lenguajes imperativos, como las secuencias de instrucciones o la asignación de variables. En contraste, los lenguajes funcionales puros tienen una mayor potencia expresiva, conservando a la vez su transparencia referencial, algo que no se cumple siempre con un lenguaje funcional híbrido.

Lógica La programación lógica consiste en la aplicación del corpus de conocimiento sobre lógica para eldiseño de lenguajes de programaciónOrientado a Objetos usa objetos y sus interacciones para diseñar aplicaciones y programas de computadora. Está basado en varias técnicas, incluyendo herencia, modularidad, polimorfismo, y encapsulamiento. Su usose popularizó a principios de la década de 1990. Actualmente son muchos los lenguajes de programación quesoportan la orientación a objetos. La programación orientada a objetos expresa un programa como un conjunto de estos objetos, que colaboranentre ellos para realizar tareas. Esto permite hacer los programas y módulos más fáciles de escribir, mantenery reutilizar.De esta forma, un objeto contiene toda la información que permite definirlo e identificarlo frente a otrosobjetos pertenecientes a otras clases e incluso frente a objetos de una misma clase, al poder tener valores biendiferenciados en sus atributos. A su vez, los objetos disponen de mecanismos de interacción llamadosmétodos que favorecen la comunicación entre ellos. Esta comunicación favorece a su vez el cambio de estado en los propios objetos. Esta característica lleva a tratarlos como unidades indivisibles, en las que no se separan ni deben separarse el estado y el comportamiento.Los métodos (comportamiento) y atributos (estado) están estrechamente relacionados por la propiedad de conjunto. Esta propiedad destaca que una clase requiere de métodos para poder tratar los atributos con los que cuenta. El programador debe pensar indistintamente en ambos conceptos, sin separar ni darle mayor importancia a ninguno de ellos, hacerlo podría producir el hábito erróneo de crear clases contenedoras de información por un lado y clases con métodos que manejen a las primeras por el otro. De esta manera se estaría realizando una programación estructurada camuflada en un lenguaje de programación orientado a objetos.

Page 18: Intro Not As

Un lenguaje imperativo es un tipo de lenguaje de programación. Es este tipo de lenguajes, las instrucciones se ejecutan unas tras otras, de manera secuencial, salvo cuandose encuentran estructuras de control condicionales o bucles. Hay declaración de variables, tipos y procedimientos, aunqueesto varía notablemente en función del lenguaje utilizado, pues los hay que exigen las declaraciones mientras que otrospermiten que esos elementos no sean declarados.

Ejemplo de programa en un lenguaje imperativo: Estesería el código de un programa que determina el factorial de un número en un lenguaje imperativo inventado: procedimiento factorial(entero n){

entero resultado = 1; mientras (n > 0) {

resultado = resultado * n; n = n - 1; }

devuelve resultado; }

Este procedimiento (o función) recibe un número entero n. Declara una variable resultado que será el resultado final a devolver. Inicialmente, tiene como valor el 1. Después llegauna estructura de control denominada bucle, que se ejecutamientras la condición expresada entre los paréntesis (n > 0) sea cierta. Dentro del bucle se multiplica la variable resultadopor n y el valor se deja de nuevo en resultado. La siguientesentencia (n = n - 1) es necesaria para ir haciendo el factorial, así como para salir en algún momento del bucle. Por último, tras salir del bucle ya podemos devolver el valor final, queestará en la variable resultado. Nótese que, si en un principio, la variable n es 0, no se entrará en el bucle al no ser cierta la condición, por lo quepasaría directamente a devolver la variable resultado, quetiene valor inicial 1 (0! = 1).

Page 19: Intro Not As

El objetivo es conseguir lenguajes expresivos y matemáticamente elegantes, en los que no sea necesario bajar al nivel de la máquina para describir el proceso llevado a cabo por el programa, y evitando el concepto de estado del cómputo. La secuencia de computacionesllevadas a cabo por el programa se regiría única y exclusivamente por la reescritura de definiciones más amplias a otras cada vez más concretas y definidas, usando lo que se denominan "definiciones dirigidas".

CaracterísticasLos programas escritos en un lenguaje funcional están constituidos únicamente pordefiniciones de funciones, entendiendo éstas no como subprogramas clásicos de un lenguajeimperativo, sino como funciones puramente matemáticas, en las que se verifican ciertaspropiedades como la transparencia referencial (el significado de una expresión dependeúnicamente del significado de sus subexpresiones), y por tanto, la carencia total de efectoslaterales.Otras características propias de estos lenguajes son la no existencia de asignaciones de variables y la falta de construcciones estructuradas como la secuencia o la iteración (lo queobliga en la práctica a que todas las repeticiones de instrucciones se lleven a cabo por mediode funciones recursivas).Existen dos grandes categorías de lenguajes funcionales: los funcionales puros y los híbridos. La diferencia entre ambos estriba en que los lenguajes funcionales híbridos son menosdogmáticos que los puros, al admitir conceptos tomados de los lenguajes imperativos, comolas secuencias de instrucciones o la asignación de variables. En contraste, los lenguajesfuncionales puros tienen una mayor potencia expresiva, conservando a la vez su transparenciareferencial, algo que no se cumple siempre con un lenguaje funcional híbrido.

Lenguajes funcionalesEntre los lenguajes funcionales puros, cabe destacar a Haskell y Miranda. Los lenguajesfuncionales híbridos más conocidos son Scala, Lisp, Scheme, Ocaml, SAP y Standard ML(estos dos últimos, descendientes del lenguaje ML). Erlang es otro lenguaje funcional de programación concurrente. R también es un lenguaje funcional dedicado a la estadística.[1]Recientemente Microsoft Research está trabajando en el lenguaje F# (Functional#).Entre otros lenguajes que se podrían utilizar para programación funcional se podrían incluir a Perl, pues, aunque es un lenguaje de propósito muy general, se pueden realizar programasusando exclusivamente funciones definidas por el usuario. Así como Python, como lenguageque incorpora el paradigma funcional.

La característica principal de la programación funcional es que los cálculos se ven como unafunción matemática que hacen corresponder entradas y salidas.� No hay noción de posición de memoria y por tanto, necesidad de una instrucción de asignación.� Los bucles se modelan a través de la recursividad ya que no hay manera de incrementar odisminuir el valor de unavariable.

Page 20: Intro Not As

Todos los procedimientos son funciones y distinguen claramente los valores de entrada (parámetros) de los de salida (resultados).

● No existen variables ni asignaciones � las variables han sidoreemplazadas por los parámetros.

● No existen ciclos � éstos han sido reemplazados por las llamadasrecursivas.

El valor de una función depende sólo del valor de sus parámetros y no del orden de evaluación o de la trayectoria de ejecución que llevó a la llamada.

● Las funciones son valores de primera clase.

Page 21: Intro Not As
Page 22: Intro Not As

LenguajeLenguaje Lógico

Programas escritos en un subconjunto de lógica de primer orden

Una base de datosde relacioneslógicasy detallesque se cumplenpara la aplicación

Lenguaje de programaci´on basado en este esquema que fue introducidoa fines de 1971 (cf. �The Birth of Prolog�,

I Los programas se escriben en un subconjunto de la l´ogica de primerorden

I El mecanismo te´orico en el que se basa es el m´etodo de resoluci´on

I Para motivar y comprender este mecanismo primero lo vamos a estudiaren el ´ambito de la l´ogica proposicional

Un programa en Prolog consiste de una base de datos de relacioneslógicas y detalles que se cumplen para la aplicación. Dicha base de datosno tiene una estructura impuesta, ni un procedimiento o clase principal. Los datos y relaciones de un programa en Prolog se escriben en un únicoarchivo, el cual es consultado por el programa cuando se le hace unapregunta.

Page 23: Intro Not As

padrede('juan', 'maria'). % juan es padre de maria

padrede('pablo', 'juan'). % pablo es padre de juan

padrede('pablo', 'marcela'). % pablo es padre de marcela

padrede('carlos', 'debora'). % carlos es el padre de debora

hijode(A,B) :- padrede(B,A). % A es hijo de B si B es padre de A.

abuelode(A,B) :- padrede(A,C), padrede(C,B). % A es abuelo de B si A es

padre de C y C es padre B.

hermanode(A,B) :- padrede(C,A) , padrede(C,B), A \== B. % A y B son

hermanos si el padre de A es también el padre de B y si A y B no son lo

mismo.

familiarde(A,B) :- padrede(A,B).

familiarde(A,B) :- hijode(A,B).

familiarde(A,B) :- hermanode(A,B).

?- hermanode('juan', 'marcela'). % juan es hermano de marcela?

yes

?- hermanode('carlos', 'juan'). % carlos es hermano de juan?

no

Page 24: Intro Not As

LenguajeLenguaje Orientado a Objetos

Usa objetos y sus interacciones paradiseñar aplicaciones

Un objeto incluye toda lainformación que permite definirlo eidentificarlo.

Orientado a Objetos usa objetos y sus interacciones para diseñar aplicaciones y programas de computadora. Está basado en varias técnicas, incluyendo herencia, modularidad, polimorfismo, y encapsulamiento. Su uso se popularizó a principios de la década de 1990. Actualmente son muchos los lenguajes de programación que soportan la orientación a objetos.

La programación orientada a objetos expresa un programa como un conjunto de estos objetos, quecolaboran entre ellos para realizar tareas. Esto permite hacer los programas y módulos más fácilesde escribir, mantener y reutilizar.

De esta forma, un objeto contiene toda la información que permite definirlo e identificarlo frentea otros objetos pertenecientes a otras clases e incluso frente a objetos de una misma clase, al poder tener valores bien diferenciados en sus atributos. A su vez, los objetos disponen de mecanismos de interacción llamados métodos que favorecen la comunicación entre ellos. Estacomunicación favorece a su vez el cambio de estado en los propios objetos. Esta característicalleva a tratarlos como unidades indivisibles, en las que no se separan ni deben separarse el estadoy el comportamiento.

Los métodos (comportamiento) y atributos (estado) están estrechamente relacionados por la propiedad de conjunto. Esta propiedad destaca que una clase requiere de métodos para podertratar los atributos con los que cuenta. El programador debe pensar indistintamente en ambos conceptos, sin separar ni darle mayor importancia a ninguno de ellos, hacerlo podría producir el hábito erróneo de crear clases contenedoras de información por un lado y clases con métodos quemanejen a las primeras por el otro. De esta manera se estaría realizando una programaciónestructurada camuflada en un lenguaje de programación orientado a objetos.

Page 25: Intro Not As

Por qué estudiamos lenguajeslenguajes de de

programaciónprogramación??

Facilita el aprendizaje del lenguaje

Permite entender característicasdel lenguaje

Ayuda a la escogencia entre alternativas

Contribuye a hacer buen uso de lasherramientas relacionadas.

Page 26: Intro Not As

Compilación

Interpretación

Page 27: Intro Not As

Viendo el compilador en alto nivel, éste se encarga de traducir el

código fuente a un programa objeto (típicamente en lenguaje de

máquina).

A su vez el compilador suele ser un programa escrito en lenguaje de

máquina.

Cuando un programa objeto es escrito a un archivo en un formato

que puede ser entendido por el sistema operativo se conoce como

código objeto.

Una de las ventajas de la compilación es que ofrece mejor

desempeño, ya que el proceso de compilación debe llevarse a cabo

una sola vez y el programa puede ser ejecutado en muchas

oportunidades.

Otra de las características de la compilación es que durante ella no se

consideran las decisiones que deben ser realizadas a tiempo de

ejecución.

En las arquitecturas de los microprocesadores modernos (superscalar

RISC) los compiladores pueden generar mejor código que los

programadores en assembler.

Page 28: Intro Not As

Un compilador es un programa informático que traduce un programa escrito en un lenguaje de programación a otrolenguaje de programación, generando un programaequivalente que la máquina será capaz de interpretar.Usualmente el segundo lenguaje es código máquina, perotambién puede ser simplemente texto. Este proceso de traducción se conoce como compilación.

Un compilador es un programa que permite traducir el códigofuente de un programa en lenguaje de alto nivel, a otrolenguaje de nivel inferior (típicamente lenguaje máquina). De esta manera un programador puede diseñar un programa en un lenguaje mucho más cercano a como piensa un ser humano, para luego compilarlo a un programa más manejablepor una computadora.

Normalmente los compiladores están divididos en dos partes:

Front End: es la parte que analiza el código fuente, comprueba su validez, genera el árbol de derivación y rellenalos valores de la tabla de símbolos. Esta parte suele ser independiente de la plataforma o sistema para el cual se vayaa compilar.

Back End: es la parte que genera el código máquina, específico de una plataforma, a partir de los resultados de la fase de análisis, realizada por el Front End.

Esta división permite que el mismo Back End se utilice paragenerar el código máquina de varios lenguajes de programación distintos y que el mismo Front End que sirvepara analizar el código fuente de un lenguaje de programación concreto sirva para generar código máquina en varias plataformas distintas.

El código que genera el Back End normalmente no se puedeejecutar directamente, sino que necesita ser enlazado por un programa enlazador (linker)

Page 29: Intro Not As

El interpretador implementa una máquina virtual cuyo �lenguaje de

máquina� es el lenguaje de alto nivel en el que está escrito el

programa.

El interpretador lee más o menos una línea por vez y la ejecuta.

Como ventaja con respecto al compilador, el interpretador ofrece

mayor flexibilidad y mensajes de error más explicativos.

Adicionalmente, se comienza a ejecutar una vez hechas las

modificaciones sin esperar por el proceso de recompilación.

Page 30: Intro Not As

Muchos lenguajes interpretados emplean un traductor inicial (preprocesador)

que remueve comentarios y espacios en blanco, y agrupa caracteres en

�tokens� para formar palabras clave, identificadores, números y símbolos.

Luego expande abreviaciones al estilo de un macro de �assembler� y

finalmente identifica estructuras sintácticas de alto nivel como �loops� y

subrutinas. Lo que se busca es obtener una forma intermedia, similar al código

fuente, que pueda interpretarse con mayor facilidad.

Si el traductor es �sencillo� es decir, hace una transformación trivial del código

fuente, entonces se considera como un interpretador.

Ahora bien si la traducción es más �compleja�, es decir no hay fuerte similitud

entre el programa intermedio y el fuente, el traductor se considera un

compilador que produce una forma intermedia que puede interpretarse a

posteriori.

Por otro lado, ciertos ambientes de programación ( conjunto de herramientas

integradas al compilador o interpretador que permiten la edición, y debugging

de código) para Pascal, C y otros lenguajes imperativos incluyen interpretación

y compilación.

Se pueden conseguir compiladores (LISP, Prolog, Smalltalk) que permiten

binding tardío por tanto el compilador trabaja en conjunción con un

interpretador. (El binding tardío se ahondará en clases futuras, por ahora basta

con saber que éste implica que las referencias a propiedades y métodos se

resuelven a tiempo de ejecución).

En ocasiones un sistema de programación puede postergar la compilación

hasta el último momento posible (just in time compiler) traduciendo código

binario en lenguaje de máquina inmediatamente antes de cada ejecución del

programa (Java).

En máquinas diseñadas antes de los 80�s las instrucciones a nivel de

ensamblador no estaban implementadas en hardware, y corrían sobre un

interpretador escrito en microcódigo (firmware) almacenado en ROM y

ejecutado por el hardware.

Page 31: Intro Not As

El Linker se encarga de asociar las rutinas de librería apropiadas al

programa final. Nótese que la compilación produce lenguaje de máquina

incompleto ya que quedan por resolver las referencias a librerías.

Page 32: Intro Not As

Muchos compiladores generan código �assembler� en lugar de lenguaje de

maquina ya que:

- Facilita el �debugging�

- Es más fácil de leer por las personas.

- Aisla al compilador de cambios en el formato de los

archivos del lenguaje de máquina que son mantenidos por las diversas

versiones de Sistemas Operativos.