lunes, 29 de agosto de 2016

Lenguaje de Alto, Medio y Bajo Nivel

Lenguaje de Alto Nivel

Son tipos de lenguajes de programación que permite al programador escribir programas que son más o menos independientes de un tipo particular de computadora. Estos lenguajes son considerados de alto nivel, porque son más parecidos al lenguaje natural humano y más lejanos al lenguaje de las maquinas, la principal ventaja de los lenguajes de alto nivel sobre los de bajo nivel es que son más fáciles de leer, escribir y mantener por los humanos. Al final los programas escritos en alto nivel deben ser traducidos en un lenguaje maquina especifico empleando un compilador o un intérprete. De esta manera pueden ser ejecutados por una maquina especifica.

Lenguaje de Medio Nivel

Es un lenguaje de programación informática como el lenguaje C, que se encuentran entre los lenguajes de alto nivel y los lenguajes de bajo nivel.

Suelen ser clasificados muchas veces de alto nivel, pero permiten ciertos manejos de bajo nivel. Son precisos para ciertas aplicaciones como la creación de sistemas operativos, ya que permiten un manejo abstracto (independiente de la máquina, a diferencia del ensamblador), pero sin perder mucho del poder y eficiencia que tienen los lenguajes de bajo nivel.

Una característica distintiva, por ejemplo, que convierte a C en un lenguaje de medio nivel y al Pascal en un lenguaje de alto nivel es que en el primero es posible manejar las letras como si fueran números (en Pascal no), y por el contrario en Pascal es posible concatenar las cadenas de caracteres con el operador suma y copiarlas con la asignación (en C es el usuario el responsable de llamar a las funciones correspondientes).

Una de las características más peculiares del lenguaje de programación C; es el uso de "apuntadores", los cuales son muy útiles en la implementación de algoritmos como Listas ligadas, Tablas Hash y algoritmos de búsqueda y ordenamiento que para otros lenguajes de programación (como Java por ejemplo) les suele ser un poco más complicado implementar.

Lenguaje de Bajo Nivel

Un lenguaje de programación de características bajo nivel es aquel en el que sus instrucciones ejercen un control directo sobre el hardware y están condicionados por la estructura física de las computadoras que lo soportan. El uso de la palabra bajo en su denominación no implica que el lenguaje sea menos potente que un lenguaje de alto nivel, sino que se refiere a la reducida abstracción entre el lenguaje y el hardware. Por ejemplo, se utiliza este tipo de lenguajes para programar tareas críticas de los sistemas operativos, de aplicaciones en tiempo real o controladores de dispositivos.


Código Fuente

El código fuente de un programa informático (o software) es un conjunto de líneas de texto con los pasos que debe seguir la computadora para ejecutar dicho programa. Por tanto, en el código fuente de un programa está escrito por completo su funcionamiento.




El código fuente de un programa está escrito por un programador en algún lenguaje de programación, pero en este primer estado no es directamente ejecutable por la computadora, sino que debe ser traducido a otro lenguaje o código binario; así será más fácil para la máquina interpretarlo (lenguaje máquina o código objeto que sí pueda ser ejecutado por el hardware de la computadora). Para esta traducción se usan los llamados compiladores, ensambladores, intérpretes y otros sistemas de traducción.


Programa Fuente

Programa fuente es una noción que se emplea como sinónimo de código fuente. Se trata de las instrucciones que un programa informático transmite a una computadora para que pueda ejecutarse. Dichas instrucciones son líneas de texto escritas en un lenguaje de programación (una estructura capaz de impartir instrucciones informáticas a partir de una determinada base semántica y sintáctica).


Puede decirse que, en el programa fuente, un software detalla la totalidad de su funcionamiento. Un programador es quien desarrolla dichas instrucciones, respetando los principios del lenguaje de programación elegido. El sistema en cuestión, al acceder al programa fuente, interpreta las instrucciones y las pone en marcha.

Compilador

Un compilador es un programa informático que traduce un programa escrito en un lenguaje de programación a otro lenguaje de programación, generando un programa equivalente que la máquina será capaz de interpretar. Usualmente el segundo lenguaje es lenguaje de máquina, pero también puede ser un código intermedio (bytecode), o simplemente texto. Este proceso de traducción se conoce como compilación.




Fases del compilador

Un compilador típicamente opera en fases, cada una lleva a cabo una tarea sobre el programa fuente, las primeras tres fases suelen agruparse en una sola fase llamada fase de análisis y las últimas tres en una llamada fase de síntesis.

La fase de análisis y el módulo de manejo de errores se describen posteriormente en este mismo capítulo. La fase de síntesis no es relevante en el contexto de un lenguaje cultivase de datos, ya que este sigue un enfoque diferente que el de los lenguajes tradicionales, por esta razón solo se menciona.
Partes de un compilador

Básicamente, un compilador cuenta con dos partes fundamentales: El Front End y el Back End. Estas partes se complementan para lograr el objetivo del compilador. A continuación, describiremos cada una de estas partes:

Front End: El Front End es la parte del compilador que interactúa con el usuario y por lo general, es independiente de la plataforma en la que se trabaja. Se encarga de realizar el análisis del código fuente a compilar y verifica que este sea válido, así como también, genera el árbol de derivación y rellena los valores de la tabla de símbolos.

Back End: Esta parte del compilador es la encargada de generar el código en formato de máquina, a partir del trabajo hecho por el Front End.

Lenguaje Ensamblador

Un lenguaje ensamblador puro es aquel en que cada sentencia produce exactamente una instrucción máquina. En otras palabras, hay una correspondencia biunívoca entre las instrucciones de máquina y las sentencias del programa en ensamblador.

Si cada línea de un programa en ensamblador contuviera una sentencia ensamblador y si cada palabra de máquina contuviera una instrucción de máquina, entonces un programa de n líneas escrito en ensamblador produciría un programa en lenguaje de máquina que ocuparía n palabras.

Ensamblador.png

¿Dónde se utiliza el lenguaje ensamblador?

El lenguaje ensamblador trabaja directamente con el microprocesador de una máquina, es decir, programamos un microprocesador con este lenguaje, también lo podemos utilizar para desarrollar controladores de dispositivos (Drivers) y sistemas operativos de computadoras.

IDE para lenguaje ensamblador

Flat assembler (FASM) es un ensamblador libre, multi-paso, con el estilo de la sintaxis de Intel que soporta las arquitecturas IA-32 y x86-64.

El proyecto fue iniciado en 1999 por Tomasz Grysztar, que en aquella época era un estudiante no graduado de matemáticas en Polonia. El FASM está escrito en lenguaje ensamblador, viene con el código fuente completo, y fue capaz de ensamblarse a sí mismo (bootstrapping) desde la versión 0.90 del 4 de mayo de 1999. El primer lanzamiento público fue anunciado la 15 de marzo de 2000.

Es notable por su velocidad rápida, optimizaciones de tamaño, portabilidad, poderosas capacidades de macro, y la comunidad del foro en línea. Sin embargo, casi no usa opciones en la línea de comandos. Hay disponibles archivos binarios y de código fuente para Linux, Windows (incluyendo un IDE de desarrollo), DOS, OpenBSD, MenuetOS, OctaOS, y DexOS. FASM contiene vínculos (bindings) para la GUI de Windows y OpenGL.

Todas las versiones de FASM pueden generar los siguientes archivos objeto: binarios planos (flat binary), ELF o COFF (clásico o de MS), como también ejecutables en formato MZ, ELF o PE. Existe un traslado del ensamblador a la arquitectura ARM, llamado FASMARM.

Lenguaje Máquina

El lenguaje de máquina o código máquina es el sistema de códigos directamente interpretable por un circuito microprogramable, como el microprocesador de una computadora o el microcontrolador de un autómata. 

Está compuesto por un conjunto de instrucciones que determinan acciones a ser tomadas por la máquina. Un programa consiste en una cadena de estas instrucciones más un conjunto de datos sobre el cual se trabaja.



Estas instrucciones son normalmente ejecutadas en secuencia, con eventuales cambios de flujo causados por el propio programa o eventos externos.

El lenguaje de máquina es específico de la arquitectura de la máquina, aunque el conjunto de instrucciones disponibles pueda ser similar entre arquitecturas distintas