Loading presentation...

Present Remotely

Send the link below via email or IM

Copy

Present to your audience

Start remote presentation

  • Invited audience members will follow you as you navigate and present
  • People invited to a presentation do not need a Prezi account
  • This link expires 10 minutes after you close the presentation
  • A maximum of 30 users can follow your presentation
  • Learn more about this feature in our knowledge base article

Do you really want to delete this prezi?

Neither you, nor the coeditors you shared it with will be able to recover it again.

DeleteCancel

Make your likes visible on Facebook?

Connect your Facebook account to Prezi and let your likes appear on your timeline.
You can change this under Settings & Account at any time.

No, thanks

Lenguajes Compilados - Fundamentos del computador

La tarea del mejor grupo de la clase ;)
by

Adiel Smith

on 29 January 2014

Comments (0)

Please log in to add your comment.

Report abuse

Transcript of Lenguajes Compilados - Fundamentos del computador

Un lenguaje compilado es una expresión un tanto impreciso para referirse a un lenguaje de programación que se implementa mediante un compilador. Esto implica que, una vez escrito el programa, éste se traduce a partir de su código fuente por medio de un compilador en un archivo ejecutable para una determinada plataforma (por ejemplo Solaris para Sparc, Windows NT para Intel, etc.).
Los lenguajes compilados son lenguajes de alto nivel en los que las instrucciones se traducen del lenguaje utilizado a código máquina para una ejecución rápida. Por el contrario un lenguaje interpretado es aquel en el que las instrucciones se traducen o interpretan una a una siendo típicamente unas 10 veces más lentos que los programas compilados.
Algunos ejemplos típicos de lenguajes compilados
Fortran
La familia de lenguajes de
C
, incluyendo
C++
y
Objective C
pero no
Java
.
Ada
(incluyendo su dialecto Delphi)
Pascal
Algol
Haskell
Por contra un lenguaje se dice que es compilado cuando el programa entero se traduce mediante el compilador de dicho lenguaje al lenguaje máquina correspondiente a un microprocesador dao (CPU) y el resultado se almacena de manera permanente en un archivo. De esta forma el programa se ejecutará de forma mucho más rápida que con un intérprete, sobre todo si hay estructuras que se repiten, caso de los ciclos. La principal desventaja es cuando se produce un error, que muchas veces se detecta en el momento de la ejecución, y la corrección no se puede hacer de inmediato sino que hay que realizar todo el proceso de compilado desde el principio. Un ejemplo típico de lenguaje de este tipo el C ++, ampliamente usado en el desarrollo de programas.
Si hablamos de la plataforma más usada en el hogar, entiéndase Microsoft Windows, o pues hasta el momento, TODOS, sin excepción, son lenguajes interpretados o semi-interpretados.
En los sistemas operativos modernos, cuando se "compila" un programa, éste se traduce a un pseudoensamblador o a un estilo de pseudo-máquina, que a su vez es interpretada por la "máquina virtual" propia o nativa del sistema operativo, para poder procesar, dibujar y ejecutar todas las instrucciones adecuadamente.

Todos los programas son interpretados en mayor o menor grado, la cuestión es ahora, qué compiladores generan código "más compilado" que los otros. mencionaré algunos lenguajes que son los que generan, en teoría, programas "más compilados", sin mencionar las plataformas a las cuales pertenecen (hago omisión de algunos lenguajes compilados, no usados en la actualidad:
Fortran, Ada, Algol, COBOL
y demás de su tiempo, exceptuando
BASIC
y derivados):
C
El lenguaje compilado maestro por excelencia ya que es el lenguaje en el cual se diseñaron la gran mayoría, por no decir todos, los sistemas operativos modernos.
C++
C++ no es TAN compilado como C, especialmente porque casi siempre está usado en sistemas operativos gráficos, solo en sus versiones de consola es compilado en código máquina real, pero básicamente y en esencia se compila a código máquina
Pascal
Básicamente, en todas sus variantes, es compilado a código nativo máquina.
Delphi
Kylix
Lazarus
Son altamente compilados, aunque no totalmente, pues están orientados a sistemas operativos gráficos, así que en menor grado son interpretados, pero son considerados lenguajes compilados, pues el código generado es nativo de la plataforma objetivo.
Ventajas de los lenguajes interpretados
Portabilidad:
Esta es la principal ventaja que presenta este tipo de lenguajes, porque puede ser compilado en y para cualquier plataforma o sistema operativo.

Compatibilidad:
al ser interpretado por el sistema operativo, es la máquina virtual o framework el que se encarga de que las instrucciones sean ejecutadas por el software y el hardware.

Desventajas de los lenguajes interpretados
Velocidad
: Es el aspecto más notable y el cual se debe evaluar a fondo al crear software con este tipo lenguajes, pues se debe equilibrar la portabilidad con la velocidad que se está sacrificando. A menos que las prestaciones de los equipos informáticos sean bastante altas, en el caso cual, se podría despreciar este aspecto.

Los lenguajes interpretados
exigen gran cantidad de recursos
especialmente RAM y procesador. Deberían aprovecharse los lenguajes interpretados hasta donde sea posible pues en pocos años o incluso meses, entrarán en vigor y serán o ya son el nuevo estándar de desarrollo.

¿Por qué los lenguajes de programación interpretados son más lentos que los lenguajes de programación compilados?
Son más rápidos los lenguajes compilados y la razón es muy simple, cuando se ejecuta un lenguaje interpretado como php, se debe convertir todo ese código escrito en lenguaje php a lenguaje máquina para poderse ejecutar y lógicamente para que el procesador lo entienda en su interior (ALU unidad aritmético lógica) sin necesidad de pasar por un proceso previo de compilación; mientras que un lenguaje compilado como java si debe pasar por dicho proceso (el de compilación) para posteriormente ser interpretado.

Pero aun así un lenguaje compilado sigue siendo más rápido debido a que cuando se compila un lenguaje como java lo que se genera es un código o lenguaje intermedio entre el lenguaje de programación java y el lenguaje máquina y dicho lenguaje es el bytecode, y es éste bytecode el que finalmente será interpretado por una máquina virtual (más precisamente se vuelve a compilar por el compilador JIT (Just-In-Time)) para poder ser convertido en código máquina y ser entendido por el procesador. Por eso cuando se hace un programa en un lenguaje compilado como java lo que se genera luego de terminal dicho software son bytecodes que serán los que se ejecuten en una plataforma u otra; y no directamente el código en lenguaje java (lenguaje de alto nivel) sino un lenguaje intermedio (bytecode).

Entonces al comparar cual interpretación es más rápida se puede decir que es la interpretación que se hace de bytecode a lenguaje maquina por medio de la máquina virtual, y no la interpretación que se hace de un lenguaje interpretado y de alto nivel como php.

Bytecode
El bytecode es un código intermedio más abstracto que el código máquina. Habitualmente es tratado como un archivo binario que contiene un programa ejecutable similar a un módulo objeto, que es un archivo binario producido por el compilador cuyo contenido es el código objeto o código máquina .

El bytecode recibe su nombre porque usualmente cada código de operación tiene una longitud de un byte, si bien la longitud del código de las instrucciones varía. Cada instrucción tiene un código de operación entre 0 y 255 seguido de parámetros tales como los registros o las direcciones de memoria. Esta sería la descripción de un caso típico, si bien la especificación del bytecode depende ampliamente del lenguaje.

Como código intermedio, se trata de una forma de salida utilizada por los implementadores de lenguajes para reducir la dependencia respecto del hardware específico y facilitar la interpretación. Menos frecuentemente se utiliza el bytecode como código intermedio en un compilador. Algunos sistemas, llamados traductores dinámicos o compiladores just-in-time traducen el bytecode a código máquina inmediatamente antes de su ejecución para mejorar la velocidad de ejecución.

Just in time
tiempo de ejecución
En informática, la compilación en tiempo de ejecución (también conocida por sus siglas inglesas, JIT, just-in-time), también conocida como traducción dinámica, es una técnica para mejorar el rendimiento de sistemas de programación que compilan a bytecode, consistente en traducir el bytecode a código máquina nativo en tiempo de ejecución.

La compilación en tiempo de ejecución se construye a partir de dos ideas anteriores relacionadas con los entornos de ejecución: la compilación a bytecode y la compilación dinámica.

En un sistema que use compilación a bytecode como por ejemplo Smalltalk, Perl, GNU CLISP o las primeras versiones de Java, el código fuente es traducido a un código intermedio llamado bytecode. El bytecode no es el código máquina de ninguna computadora en particular, y puede por tanto ser portable entre diferentes arquitecturas. El bytecode es entonces interpretado, o ejecutado por una máquina virtual.

Diferencia entre compilar y compilado
Existe una confusión entre “compilar un programa” y “lenguajes compilados”.
Una duda que surge frecuentemente entre los usuarios de Java es: ¿Java es un lenguaje interpretado o compilado? Obviamente se compila el programa a un formato que se llama byte-code, por lo tanto debería ser un lenguaje compilado. Pero no lo es. Java es un lenguaje interpretado. El intérprete de Java es la “máquina virtual de Java”. Sin ella el byte-code no es ejecutable.

La confusión resulta de usar la palabra “compilar” para dos cosas distintas aunque similares. Un significado de “compilar” es “convertir un programa a un formato óptimo para el ordenador” y el otro es “convertir un código a un programa ejecutable”. Un programa ejecutable es obviamente la forma más óptima para un ordenador, porque ya no necesita ninguna transformación adicional.

Los compiladores de los “lenguajes compilados” como C o Fortran traducen el código fuente directamente a instrucciones para el microprocesador. Esto trae la ventaja que se puede utilizar el programa compilado independiente del lenguaje que lo originó. No necesito instalar ningún intérprete para ejecutar programas en estos lenguajes. Pero el programa sólo funcionará en la plataforma para que se compiló.

Entonces ¿qué significa “compilar” el código Java? Pues, “compilar un programa” signífica “convertirlo en un formato optimizado para el ordenador”. Esto significa en caso de un lenguaje compilado convertirlo a una secuencia de instrucciones para el microprocesador. Para un lenguaje como Java significa convertirlo a un formato optimizado para la interpretación. Por ejemplo, una palabra clave como while se puede sustituir por un sólo byte en el byte-code. Así la máquina virtual sólo necesita leer y entender un byte en lugar de cinco.


Lenguaje de programación compilado
Full transcript