martes, 14 de febrero de 2017

¿Sabes que es un programa y un lenguaje de programación?

Siempre he dicho que podemos conocer y hasta dominar algo, pero no sabemos exactamente que es ese algo, Bien ese algo de lo que voy a hablar es de los programas y los lenguajes de programación, muchos sabrán que es pero otros no. En fin, comencemos.

Primero ¿que es un programa? Pues es un conjunto de instrucciones que una vez ejecutadas realizarán una o varias tareas en un computador. Un programa pasa por las siguientes etapas.
  • Conversión del código fuente a código objeto: El código fuente es un conjunto de instrucciones elegibles para el ser humano, mas no para el computador. Es por eso que debe ser llevado a código objeto, ya sea por medio de un compilador o un intérprete. 
  • Creación del código ejecutable: Posteriormente el compilador o el intérprete une el código objeto obtenido con diversas funciones y bibliotecas mediante un enlazador, para así obtener un código o archivo ejecutable, que puede ser entendido y ejecutado por el procesador.
Esto se ve en el siguiente diagrama:


Explicaremos los conceptos aparecidos en el diagrama

Código fuente

El código fuente no es mas que un texto legible para el ser humano, es decir, escritos en palabras que un ser humano puede entender y en el cual se muestra los pasos que debe seguir el programa. Las palabras y símbolos aparecidos en el código fuente dependerá del lenguaje de programación utilizado

Compiladores

Un compilador no es más que un traductor, es decir, un programa que nos permite pasar información de un lenguaje a otro. Por ejemplo, un compilador de C nos permite traducir ficheros escritos en lenguaje C a un lenguaje legible para la máquina (ensamblador).

El proceso de compilación no siempre es directo. Esto quiere decir que si partimos de un lenguaje A y queremos traducir a un lenguaje B, no siempre será recomendable traducir directamente de A a B, si no que puede ser conveniente usar un lenguaje intermedio (llamémosle X) y entonces diseñaríamos un traductor de A a X, y otro de X a B. En este caso, el primer traductor recibe el nombre de front-end mientras que el segundo se llama back-end. El lenguaje A es el lenguaje fuente y el lenguaje B es el lenguaje objeto o destino.

Tipos de compiladores
  • Compiladores cruzados: generan código para un sistema distinto del que están funcionando. Compiladores optimizadores: realizan cambios en el código para mejorar su eficiencia, pero manteniendo la funcionalidad del programa original.
  • Compiladores de una sola pasada: generan el código máquina a partir de una única lectura del código fuente. 
  • Compiladores de varias pasadas: necesitan leer el código fuente varias veces antes de poder producir el código máquina.
  • Compiladores JIT (Just In Time): forman parte de un intérprete y compilan partes del código según se necesitan.
  • Compiladores incrementales: generan un código objeto instrucción por instrucción (en vez de hacerlo para todo el programa) cuando el usuario teclea cada orden individual. El otro tipo de compiladores requiere que todos los enunciados o instrucciones se compilen conjuntamente. 
  • Compilador con montador: compilador que compila distintos módulos de forma independiente y después es capaz de enlazarlos.
  • Autocompilador: compilador que está escrito en el mismo lenguaje que va a compilar. Sirve para hacer ampliaciones al lenguaje, mejorar el código generado, etc.
  • Metacompilador: se refiere a un programa que recibe como entrada las especificaciones del lenguaje para el que se desea obtener un compilador y genera como salida el compilador para ese lenguaje.
  • Descompilador: Realiza el proceso inverso a la compilación, es decir pasa de lenguaje objeto a fuente.
  • HotSpot: herramienta que incluye un compilador dinámico y una máquina virtual para interpretar los bytecodes, que es un código intermedio entre el código fuente y el código máquina.
Interpretes

Transforman y ejecutan las instrucciones que encuentran en un programa escrito en lenguaje fuente. Frecuentemente coexisten en memoria el programa fuente y el intérprete. Todo se hace en tiempo de ejecución.

Algunas características de los intérpretes son:
  • Es más sencillo de implementar.
  • No es necesario tener en memoria todo el código fuente
La ejecución de un programa compilado será más rápida que la del mismo interpretado, pero los intérpretes son más interactivos y facilitan la puesta a punto de programas. Algunos lenguajes necesitan un proceso de compilación traduciendo a un lenguaje intermedio que es posteriormente ejecutado.

Tipos de intérpretes
  • Interprete Puro: el proceso es a través del análisis de cada sentencia y su ejecución hasta finalizar todo el código fuente del programa.
  • Interprete Avanzado: incorporan un paso previo de análisis de todo el programa fuente
  • Interpretes Incrementales: Dirigidos a lenguajes que no pueden compilarse.
Código objeto

El código objeto es el resultado de la traducción hecha por los compiladores o interpretes del código fuente. El código fuente puede estar en lenguaje maquina, es decir en dígitos binarios (1 y 0) o en bytecodes, que vendría siendo algo intermedio entre código fuente y el lenguaje maquina.

Enlazadores

Se encarga de enlazar o unir los ficheros resultantes del proceso de compilación hacia otros subprogramas conocidos como bibliotecas con el fin de crear un código ejecutable

Código ejecutable

Es el código que ejecutan los usuarios de una computadora y el cual realiza las instrucciones descritas en en el programa. El código ejecutable es especifico para un sistema operativo, es decir, puede ejecutarse en Windows, mas no en Linux. También es especifico para cada tipo de hardware, es decitr, puede ejecutarse en un computador con un microprocesador de 32 bits, mas no en uno que tenga un microprocesador de 64 bits.

Un programa ya creado se guarda en un dispositivo de almacenamiento, generalmente en el disco duro, para ser ejecutado en un determinado momento. En ese caso, el programa es cargado en la memoria RAM del computador, bajo el control del sistema operativo, el cual puede acceder directamente al procesador. Este ejecuta el programa, instrucción por instrucción hasta que termina. A un programa en ejecución se le suele llamar también proceso. 



Muy bien ¿y que es un lenguaje de programación? Un lenguaje de programación es un sistema de símbolos y reglas que permite la construcción de programas con los que la computadora puede operar así como resolver problemas de manera eficaz y contienen un conjunto de instrucciones que nos permiten realizar operaciones de entrada / salida, calculo, manipulación de textos, lógica / comparación y almacenamiento / recuperación.

Los lenguajes de programación se clasifican en:
  • Lenguaje Máquina: Son aquellos cuyas instrucciones son directamente entendibles por la computadora y no necesitan traducción posterior para que la CPU pueda comprender y ejecutar el programa. Las instrucciones en lenguaje maquina se expresan en términos de la unidad de memoria más pequeña el bit (dígito binario 0 ó 1).
  • Lenguaje de Bajo Nivel: También conocido como Ensamblador o Assembler. En este caso las instrucciones se escriben en códigos mnemotécnicos (que son agrupaciones de letras que identifica cada instrucción) para las operaciones y direcciones simbólicas. El lenguaje de bajo nivel se asume como una versión simbólica de un lenguaje máquina.
  • Lenguaje de Alto Nivel: Son aquellos en los que las instrucciones o sentencias a la computadora son escritas con palabras similares a las usadas en el lenguaje humano, lo que facilita la escritura y comprensión del programa. Ejemplos de este tipo de lenguaje son Visual Basic, Java, etc.
Describiré algunos tipos de lenguajes de programación.

Lenguaje macros

Macro es una abreviatura de macroinstrucción, siendo esta una serie de instrucciones que se almacenan para que se puedan ejecutar de forma secuencial mediante una sola llamada u orden de ejecución. Dicho de otra forma, una macroinstrucción es una instrucción compleja, formada por otras instrucciones más sencillas, permitiendo la automatización de tareas repetitivas.

Las macros tienden a almacenarse en el ámbito del propio programa que las utiliza y se ejecutan pulsando una combinación especial de teclas o un botón especialmente creado y asignado para tal efecto, así como también con un click del mouse.

La diferencia entre una macroinstrucción y un programa es que en las macroinstrucciones la ejecución es secuencial y no existe otro concepto del flujo de programa, y por tanto, no puede bifurcarse.

Lenguajes orientados al procedimiento

Un lenguaje de programación orientado a procedimientos describe la programación en términos del estado del programa y sentencias que cambian dicho estado. Los programas orientados a procedimientos son un conjunto de instrucciones que le indican al computador cómo realizar una tarea. Históricamente son los primeros lenguajes, y actualmente son los más usados.

En un lenguaje de programación orientado a procedimientos las instrucciones se usan para crear unidades o módulos independientes que se conocen como procedimientos o subrutinas. Los procedimientos aceptan como entrada los datos y transforman estos datos para producir como salida unos resultados específicos. En los lenguajes orientados al procedimiento se usa la encapsulación, que es una forma de proteger los datos que se manipulan dentro de las funciones. 

Otras características de este tipo de lenguaje son:
Uso intensivo de variables.
Estructura de programas basada en instrucciones.
Manejo frecuente de las instrucciones de asignación.
Resolución de algoritmos por medio de estructuras de control secuenciales, alternativas y repetitivas.

Ejemplo de lenguaje de programación orientado a procedimientos son Pascal y C.

Procesadores de lenguaje

Son todas las aplicaciones informáticas en las cuales uno de los datos fundamentales de entrada es un lenguaje. Más específicamente, son todos los programas que a través de una entrada escrita en un lenguaje de programación pueden manipular herramientas de software y hardware de un computador.

Ensambladores 

Los ensambladores son programas que procesan los enunciados del programa origen en lenguaje ensamblador y los traducen en archivos en lenguaje máquina que son ejecutados por un microprocesador. El único lenguaje que entienden los microprocesadores es el código máquina formado por ceros y unos.

Los ensambladores son traductores sencillos, en los que el lenguaje fuente tiene una estructura simple, que permite una traducción de una sentencia fuente a una instrucción en lenguaje máquina, guardándose en casi todos los casos esta relación uno a uno. Hay ensambladores que tienen macroinstrucciones en su lenguaje. Estas macroinstrucciones, de acuerdo con su nombre, se suelen traducir a varias instrucciones de máquina. A este tipo de ensambladores se les denomina macroensambladores (en inglés macroassembler). 

Bueno, es solo una pequeña descripción, pero se que puede servirle a alguien y disculpen lo poco y recuerden comentar.

No hay comentarios.:

Publicar un comentario