1
Interpretes Un intérprete es un programa de computadora que ejecuta o lleva a cabo instrucciones escritas en un lenguaje de programación. La interpretación es una de las formas de ejecución de los programas de computadoras, la otra es la compilación. El término "intérprete" puede hacer referencia al programa que ejecuta el código fuente que acaba de ser traducido a una forma intermedia, o puede hacer referencia al programa que lleva a cabo tanto la traducción como la ejecución.
1.
Lenguaje de alto nivel Un lenguaje de programación de alto nivel se caracteriza por expresar los algoritmos de una manera más cercana a la capacidad cognitiva humana, en lugar de a la capacidad ejecutora de las máquinas. En los primeros lenguajes de alto nivel, la limitación era que se orientaban a un área específica y sus instrucciones requerían de una sintaxis predefinida. Se clasifican como lenguajes procedimentales.
Otra limitación de los lenguajes de alto nivel es que se requiere de ciertos conocimientos de programación para realizar las secuencias de instrucciones lógicas. Los lenguajes de alto nivel se crearon para que el usuario común pudiese solucionar un problema de procesamiento de datos de una manera más fácil y rápida. Por esta razón, a fines de los años 1950 surgió un nuevo tipo de lenguajes de programación que evitaba estos inconvenientes, a costa de ceder un poco en las ventajas. Estos lenguajes se llaman de tercera generación o de alto nivel, en contraposición a los de bajo nivel o de nivel próximo a la máquina. Los lenguajes de alto nivel son aquellos que se encuentran más secanos al lenguaje neutral que al lenguaje máquina. Están dirigidos a solucionar problemas mediante el uso de EDD’s (Estructuras Dinamicas de Datos).
2
EDD’s es algo muy utilizado en todos los lenguajes de programación. Son estructuras que pueden cambiar de tamaño durante la ejecución del programa. Nos permiten crear estructuras de datos que se adapten a las necesidades reales de un programa. Se tratan de lenguajes independientes de la arquitectura del ordenador. Por lo que en principio, un programa escrito en un lenguaje de alto nivel, lo puedes migrar de una maquina a otra sin ningún tipo de problema. Estos lenguajes permiten al programador olvidarse por completo del funcionamiento interno de la máquina para la que están diseñando el programa. Tan solo necesitan un traductor que entiendan el código fuente como las características de la máquina. Suelen usar tipos de datos para la programación y hay lenguajes de propósito general (cualquier tipo de aplicación) y de propósito específico (como FORTRAN para trabajos). 1.1
Ventajas
•
Genera un código más sencillo y comprensible..
•
Escribir un código valido para diversas máquinas y, posiblemente, sistemas operativos.
•
El tiempo de formación de los programadores es relativamente corto comparado con otros lenguajes.
•
La escritura de programas e basa en reglas sintácticas similares a los lenguajes humanos, nombres de las instrucciones tales como READ, WRITE, PRINT, OPEN, etc.
•
Las modificaciones y puestas a punto de los programas son más fáciles.
•
Reducción del costo de los programas.
•
Transportabilidad permiten tener una mejor documentación.
•
Son más fáciles de mantener.
1.2
Desventajas
•
Reducción de velocidad al ceder el trabajo de bajo nivel a la máquina.
•
Algunos requieren que la maquina cliente posea una determinada plataforma.
•
Incremento del tiempo de puesta a punto de necesitarse diferentes traducciones del programa fuente para conseguir el programa definitivo.
•
No se aprovechan los recursos internos de la máquina que se explotan mucho mejor en lenguajes máquina y ensamblador.
3
•
Aumento de la ocupación de memoria.
•
El tiempo de ejecución de los programas es mucho mayor.
Diferentes tipos de lenguaje de alto nivel
1.3 •
ALGOL
•
BASIC
•
C#
•
COBOL
•
Fortran
•
Java
•
Lisp
•
Modula-2
•
Pascal
•
Perl
•
PHP
•
PL/1
•
PL/SQL
•
Python
•
Ruby
2.
Teoría de software de sistemas.
Software son las instrucciones electrónicas que van a indicar a la PC que es lo que tiene que hacer. También se puede decir que son los programas usados para dirigir las funciones de un sistema de computación o un hardware.
4
El software es el conjunto de instrucciones que las computadoras emplean para manipular datos. Sin el software, la computadora sería un conjunto de medios sin utilizar. Al cargar los programas en una computadora, la máquina actuará como si recibiera una educación instantánea; de pronto "sabe" cómo pensar y cómo operar. El Software es un conjunto de programas, documentos, procedimientos, y rutinas asociados con la operación de un sistema de cómputo. Distinguiéndose de los componentes físicos llamados hardware. Comúnmente a los programas de computación se les llama software; el software asegura que el programa o sistema cumpla por completo con sus objetivos, opera con eficiencia, esta adecuadamente documentado, y suficientemente sencillo de operar. Es simplemente el conjunto de instrucciones individuales que se le proporciona al microprocesador para que pueda procesar los datos y generar los resultados esperados. El hardware por sí solo no puede hacer nada, pues es necesario que exista el software, que es el conjunto de instrucciones que hacen funcionar al hardware. El software de sistema puede clasificarse en sistema operativo, controladores de dispositivos y programas utilitarios. Un sistema operativo crea una interfaz entre el usuario y el sistema de hardware, mientras que el resto de programas refinan o permiten mejorar la interacción con el hardware.
2.1
Clases de software de sistema son:
•Cargadores de programas. •Sistemas operativos (y sus componentes, muchos de los cuales pueden considerarse como software de sistema). •Controladores de dispositivos. •Herramientas de programación: compiladores, ensambladores, enlazadores, etc. •Programas utilitarios. •Entorno de escritorio / Interfaz gráfica de usuario (que pueden incluir Gestores de ventanas). •Línea de comandos. •BIOS. •Bootloaders (Gestor de arranque)
5
2.2
Cargador, Ligador, Ensamblador, Sistema operativo y Compilador
2.2.1
CARGADOR:
Un cargador es un programa que coloca en la memoria para su ejecución, el programa guardado en algún dispositivo de almacenamiento secundario. El cargador consiste en un juego de instrucciones que permiten al dispositivo de entrada (teclado o unidad de cinta) asignar la dirección de inicio de la memoria y asegurar que el computador leerá el programa y lo cargara byte a byte. Las funciones más importantes de un cargador son: colocar un programa objeto en la memoria e iniciar su ejecución. Si tenemos un cargador que no necesita realizar las funciones de ligado y relocalización de programas, su operación es simple pues todas las funciones se realizan en un solo paso.
2.2.1.1
Tipos de cargadores:
Cargadores iniciales.- indican a la computadora la forma de poner unos datos dentro de la memoria principal algunos datos que están guardados en periféricos de memoria externa. Cargadores absolutos.- cuando el programa carga las instrucciones y las guarda siempre en un mismo espacio. Cargadores con reubicación.- cuando un programa se ejecuta cada vez en diferente posición de memoria y no esta direccionado a un solo espacio en la memoria. Cargadores ligadores.- hace referencia a las páginas externas al cargar el programa o direcciones que no están en memoria.
2.2.2
Ligador
Es un programa de sistema que combina dos o más programas objeto separados y permite que se hagan referencias unos a otros, cada uno de estos programas puede hacer referencia a código o variables de los otros programas con los que esta enlazado.
6
2.2.3
Ensamblador
Se refiere a un tipo de programa informático que se encarga de traducir un fichero fuente escrito en un lenguaje ensamblador, a un fichero objeto que contiene código máquina para la que se ha generado. La tarea fundamental de un ensamblador es traducir un programa en el lenguaje ensamblador al código correspondiente en lenguaje de máquina.
2.2.4
Sistema Operativo
Conjunto de programas de un sistema de cómputo destinado a administrar y compartir sus recursos, así como coordinar todas sus funciones. El sistema operativo comienza a trabajar cuando se enciende el equipo, y gestiona por ejemplo la memoria, discos duros, pantalla, teclado, mouse, dispositivos de red, impresoras, puertos USB, unidades de cd, y demás funciones, por ejemplo en teléfonos celulares o móviles, etc.
2.2.5
Compilador
Un compilador es un programa o una herramienta cuya función es compilar; es decir es aquel que toma un texto o código fuente escrito en un lenguaje de alto nivel y lo traduce a un lenguaje compresible para las computadoras. Básicamente, existen dos grandes formas de ejecutar programas: programas compilados (previamente pasados por un compilador) y programas interpretados (necesitan pasar por un intérprete para ejecutarse en tiempo real). En este caso hablamos de los compiladores.
3.
Tipos de interpretes
7
A continuación se va a realizar una clasificación de los diferentes métodos de interpretación según la estructura interna del intérprete. Es conveniente observar que algunos métodos podrían considerarse híbridos, ya que mezclan los procesos de compilación e interpretación. 3.1
Intérpretes puros
Los intérpretes puros son los que analizan y ejecutan sentencia a sentencia todo el programa fuente. Siguen el modelo de interpretación iterativa y, por tanto, se utilizan principalmente para lenguajes sencillos. Los intérpretes puros se han venido utilizando desde la primera generación de ordenadores al permitir la ejecución de largos programas en ordenadores de memoria reducida, ya que sólo debían contener en memoria el intérprete y la sentencia a analizar y ejecutar en cada momento. El principal problema de este tipo de intérpretes es que si a mitad del programa fuente se producen errores, se debe de volver a comenzar el proceso.
En la figura se representa el esquema general de un intérprete puro. Se puede observar que el lenguaje fuente se traduce a una representación interna (texto o binaria) que puede ser almacenada en memoria o en disco. Esta representación interna tiene todas las instrucciones numeradas o colocadas consecutivamente en estructuras de tamaño fijo (por ejemplo un array o posiciones consecutivas de memoria, o un fichero binario de estructuras de tamaño fijo). Mientras se realiza este paso se puede construir la tabla de símbolos o etiquetas, que es una tabla que contiene una estructura donde están todas las etiquetas y su posición en el programa fuente (las etiquetas se utilizan tanto en las instrucciones de salto como en las llamadas a procedimientos y
8
funciones). Una vez que este proceso ha finalizado, comienza la ejecución por la primera instrucción del código, que se envía al evaluador de instrucciones, éste la ejecuta (recibiendo datos si es necesario o enviando un mensaje de error). El evaluador de instrucciones también determina la instrucción siguiente a ejecutar, en algunos casos previa consulta a la tabla de etiquetas. En caso de que no haya saltos (GOTO) se ejecuta la siguiente instrucción a la instrucción en curso. 3.2
Intérpretes avanzados
Los intérpretes avanzados o normales incorporan un paso previo de análisis de todo el programa fuente. Generando posteriormente un lenguaje intermedio que es ejecutado por ellos mismos. De esta forma en caso de errores sintácticos no pasan de la fase de análisis. Se utilizan para lenguajes más avanzados que los intérpretes puros, ya que permiten realizar un análisis más detallado del programa fuente (comprobación de tipos, optimización de instrucciones, etc.)
3.3
Intérpretes incrementales
Existen ciertos lenguajes que, por sus características, no se pueden compilar directamente. La razón es que pueden manejar objetos o funciones que no son conocidos en tiempo de compilación, ya que se crean dinámicamente en tiempo en ejecución. Entre estos lenguajes, pueden considerarse Smalltalk, Lisp o Prolog. Con el propósito de obtener una mayor eficiencia que en la interpretación simple, se diseñan compiladores incrementales. La idea es compilar aquellas partes estáticas del programa en lenguaje fuente, marcando como dinámicas las que no puedan compilarse. Posteriormente, en tiempo de ejecución, el sistema podrá compilar algunas partes dinámicas o recompilar partes dinámicas que hayan sido modificadas. Estos sistemas no producen un código objeto independiente, sino que acompañan el sistema que permite compilar módulos en tiempo de ejecución (run time system) al código objeto generado. Normalmente, los compiladores incrementales se utilizan en sistemas interactivos donde conviven módulos compilados con módulos modificables [Rober94].
3.4
Evaluadores Parciales
La utilización de evaluadores parciales o especializadores surge al considerar que muchos programas contienen dos tipos de datos de entrada. Existen una serie de datos
9
de entrada que son diferentes en cada ejecución mientras que otros datos no varían de una ejecución a otra. El primer conjunto, se conoce como datos de entrada dinámicos (se denotará como Din), mientras que el segundo conjunto, serían los datos de entrada estáticos (Est). Dado un programa P, el proceso de evaluación parcial consiste en construir otro programa especializado PEst para los datos estáticos de P. El programa PEst suele estar escrito en el mismo lenguaje fuente que P y se debe garantizar que cuando se le presenten los datos dinámicos produzca los mismos resultados que si se hubiesen presentado todos los datos al programa P original.
3.5
Compiladores “Just in Time”
Con la aparición de Internet surge la necesidad de distribuir programas de una forma independiente de la máquina permitiendo su ejecución en una amplia variedad de plataformas. Los códigos de bytes de la máquina Virtual de Java permiten la ejecución de programas distribuidos, ya que la mayoría de los visualizadores tienen un mecanismo capaz de interpretarlos. La interpretación de códigos de bytes supone una demora en los tiempos de ejecución. Para evitar la interpretación, muchos sistemas transforman los códigos de bytes en código nativo siguiendo el modelo “just in time”. En este modelo, una unidad de compilación o clase se transmite en el formato de códigos de bytes, pero no se realiza la interpretación. En lugar de ello, el código es compilado a código nativo justo en el momento en que lo necesita el programa que se está ejecutando.
3.6
Compilación Continua
10
La compilación continua surge como un intento de mejorar la compilación “Just in Time”. El sistema mezcla el proceso de compilación a código nativo con el proceso de interpretación. Para conseguirlo, el sistema dispone de dos módulos: un módulo de interpretación de los códigos de bytes y otro módulo de compilación de códigos de bytes a código nativo. La idea consiste en que ambos módulos actúen a la vez (lo ideal sería disponer de dos procesadores), de forma que el sistema no se detenga a compilar un módulo, sino que vaya interpretándolo hasta que el compilador haya generado el código nativo.
BIBLIOGRAFIA Página de internet
http://www.slideshare.net/elvin1202/lenguaje-deprogramacion-de-alto-nivel
http://di002.edv.uniovi.es/~labra/FTP/Interpretes.pdf
11