Un lenguaje de programación es un lenguaje definido mediante un conjunto de símbolos y reglas determinadas que permiten construir una serie de instrucciones con un significado y función concreta.

Un lenguaje de programación permite a un programador especificar de manera precisa: sobre qué datos una computadora debe operar, cómo deben ser estos almacenados y transmitidos y qué acciones debe tomar bajo una variada gama de circunstancias. Todo esto, a través de un lenguaje que intenta estar relativamente próximo al lenguaje humano o natural.

En la figura se representa de forma grafica y resumida como los lenguajes de programación han sufrido saltos sustanciales, yendo desde los lenguajes ensamblador, con muy bajo nivel de abstracción en ambas trayectorias (operaciones y datos), hasta lenguajes de alto nivel de abstracción, como los lenguajes orientados a objetos con tipos. La columna central de la figura establece los lenguajes (en realidad representan una familia de lenguajes) que han supuesto un salto sustancial en ambos niveles de abstracción: a la izquierda aparecen los aspectos novedosos de dichos lenguajes en el ámbito de la abstracción funcional (procedimental), y a la derecha se muestran los detalles relativos a la abstracción de datos.


La evolución de los lenguajes de programación ha sido:

» Lenguaje máquina (lenguaje binario).
» Lenguajes ensambladores.
» Lenguajes de alto nivel.

Lenguaje máquina

El lenguaje de máquina es un código que es interpretado directamente por el microprocesador, este lenguaje se define como un conjunto de instrucciones consistentes en códigos numéricos (generalmente binario, octal, hexadecimal) dependiente de la máquina.
Como el hardware se desarrollaba antes que el software, estos lenguajes se basaban en el hardware, con lo que cada máquina tenía su propio lenguaje y por ello la programación era un trabajo costoso, válido sólo para esa máquina en concreto. El lenguaje máquina es el único lenguaje que puede ejecutar una computadora.
Los programas en Lenguaje Maquina son rápidos pero difíciles de crear para el hombre. Esta dificultad conduce al uso de una notación simbólica para representar los códigos de operación, constituyendo los llamados lenguajes ensambladores.

Lenguajes ensambladores.


El lenguaje ensamblador es un tipo de lenguaje de bajo nivel utilizado para escribir programas informáticos, crear códigos objeto traduciendo instrucciones mnemónicas de un programa fuente escrito en ensamblador a códigos ejecutables e interpretando los nombres simbólicos para direcciones de memoria y otras entidades (ensamblado).

Lenguajes de alto nivel.

Los lenguajes de alto nivel logran la independencia del tipo de máquina y se aproximan al lenguaje natural. Se puede decir que el principal problema que presentan los lenguajes de alto nivel es la gran cantidad de ellos que existen actualmente en uso. Contiene muchas instrucciones. Traducción mediante interprete (traducción línea por línea) o compilador (traducción del programa completo), y consta de tres tipos: estructurados (Pascal, C,...), funcionales, lógicos.

Esquema evolución de los lenguajes de programación:












Un traductor es un programa que tiene como entrada un texto escrito en un lenguaje (lenguaje fuente) y como salida produce un texto escrito en un lenguaje (lenguaje objeto) que preserva el significado de origen. Ejemplos de traductores son los ensambladores y los compiladores.


En el proceso de traducción se identifican dos fases principales:





  • Fase de análisis

  • Fase de Síntesis
1.4.1 ensambladores.

El programa ensamblador es el programa que realiza la traducción de un programa escrito en ensamblador a lenguaje máquina. Esta traducción es directa e inmediata, ya que las instrucciones en ensamblador no son más que nemotécnicosde las instrucciones máquina que ejecuta directamente la CPU.

Tipos de ensambladores

Podemos distinguir entre tres tipos de ensambladores:



  • Ensambladores básicos. Son de muy bajo nivel, y su tarea consiste básicamente en ofrecer nombres simbólicos a las distintas instrucciones.
  • Ensambladores modulares, o macro ensambladores. Descendientes de los ensambladores básicos. Hacen todo lo que puede hacer un ensamblador, y además proporcionan una serie de directivas para definir e invocar macroinstrucciones.
  • Ensambladores modulares 32-bits o de alto nivel. Son ensambladores que aparecieron como respuesta a una nueva arquitectura de procesadores de 32 bits, realizan la misma tarea que los anteriores, permitiendo también el uso de macros, permiten utilizar estructuras de programación más complejas propias de los lenguajes de alto nivel.
1.4.2 compiladores.


Un compilador es un programa informático que traduce un programa escrito en un lenguaje de programación a otro lenguaje de programación, es decir programa que permite traducir el código fuente de un programa en lenguaje de alto nivel, a otro lenguaje de nivel inferior (lenguaje máquina). Generando un programa equivalente a capaz de interpretar.
Estructura de un Compilador.


Cualquier compilador debe realizar dos tareas principales: análisis del programa a compilar y síntesis de un programa en lenguaje maquina. Para el estudio de un compilador, es necesario dividir su trabajo en fases. Cada fase representa una transformación al código fuente para obtener el código objeto. En cada una de las fases se utiliza un administrador de la tabla de símbolos y un manejador de errores.

Componentes en que se divide un compilador:


Análisis Léxico. En esta fase se lee los caracteres del programa fuente y se agrupan en cadenas que representan los componentes léxicos. A la secuencia de caracteres que representa un componente léxico se le llama lexema (o con su nombre en inglés token).

Análisis Sintáctico. Los componentes léxicos se agrupan en frases gramaticales que el compilador utiliza para sintetizar la salida.

Análisis Semántico. Intenta detectar instrucciones que tengan la estructura sintáctica correcta, pero que no tengan significado para la operación implicada.

Generación de código Intermedio. Se puede considerar esta operación intermedia como un subprograma para una máquina abstracta, a esta representación debe tener dos propiedades importantes: debe ser fácil de producir y fácil de traducir al programa objeto.

Optimización de Código. Se trata de mejorar el código intermedio, de modo que resulte un código de máquina más rápido de ejecutar.

Generación de Código. Esta constituye la fase final de un compilador.
Administrador de la tabla de símbolos. Se encarga de manejar los accesos a la tabla de símbolos, en cada una de las etapas de compilación de un programa.

Manejador de errores. Es posible encontrar errores. De esta forma podrán controlarse más eficientemente los errores encontrados en cada una de las fases de la compilación de un programa.


1.4.3 interpretes.


Los intérpretes realizan normalmente dos operaciones:

  • Traducen el código fuente a un formato interno.
  • Ejecutan o interpretan el programa traducido al formato interno.

La primera parte del intérprete se llama a veces "el compilador", aunque el código interno que genera no es el lenguaje de la máquina, ni siquiera lenguaje simbólico, ni tampoco un lenguaje de alto nivel.

Estructura



Particularidades de la interpretación:

  • Ahorra memoria.
  • Produce un resultado que no se puede almacenar, lo cual hace la ejecución lenta.
  • No demasiado eficiente, cada vez que se entre en un bucle se analizaran sus sentencias.
  • Facilita el proceso de depuración.
  • No produce resultados transportables.


La interpretación es útil en:

  • Sistemas interactivos.
  • Programas de pequeña envergadura.
  • Programas de prototipo y de enseñanza.



El lenguaje nos permite hacer la abstracción y conceptualización de ideas y por medio de este comunicarnos.

1.3.1 Lenguajes Naturales.

Los lenguajes naturales, son todos aquellos lenguajes que han sido utilizados por los seres humanos para comunicarse entre sí, expresar ideas, emociones, entre otras cosas. Ejemplos de ellos son el lenguaje inglés, español con sus distintas variantes, chino, etc. Son todas aquellas reglas, conjunto de caracteres, signos y diversas expresiones idiomáticas que han sido desarrollados a lo largo de la historia del hombre.

El lenguaje es un Conjunto de palabras y reglas que permiten comunicar información entre dos entidades.

El lenguaje natural del hombre es la capacidad multisensorial y multimedial del hombre para comunicarse entre sí. El lenguaje natural es a la vez un fenómeno individual y social: el individuo habla el (o los) idiomas de uno o varios grupos humanos. El lenguaje natural es estudiado por la semiología.

La lengua es el lenguaje hablado y escrito, enseñado, cuidado y transmitido por una determinada comunidad a lo largo de un período histórico significativo.

Ø La lengua es estudiada por la lingüística.
Ø El lenguaje es un fenómeno natural.
Ø La lengua es producto de una civilización.

Lo que ocurre es que la mayoría de nuestro lenguaje, de uso diario, apunta a algún significado, sin embargo adolece de la rigurosidad interpretativa que sí se da en los lenguajes artificiales.

1.3.2 Lenguajes Artificiales.

En las distintas ramas de la ciencia nos encontramos con lenguajes artificiales o mejor conocidos como lenguajes formales que limitan su alcance a su materia de estudio. En nuestro caso solo trataremos sobre los lenguajes de programación que nos concierne como ingenieros en sistemas computacionales.
Aunque el español o cualquier otro idioma son también producto de artificio, su creación a lo largo de siglos no fue plenamente consciente y racional como ha sido la creación de lenguajes de programación. Los lenguajes de programación no se hablan, lo cual significa también una gran diferencia. Su fin no es que se entiendan en la comunicación oral, ya que las computadoras actuales casi no toman en cuenta las ondas sonoras. Pero aun suponiendo que fuera posible hablar a una computadora (lo cual es completamente concebible), muy pocos programadores estarían dispuestos a dialogar en FORTRAN, COBOL o PASCAL los cuales son lenguajes crípticos por medio de los cuales se habla a la máquina o mas bien para “explicar” a la computadora las acciones u operaciones a realizar.
Si bien ya se dijo que este tipo de lenguaje no se habla por que resulta muy difícil porque la relación que estos códigos establecen entre sus símbolos sólo se puede captar cuando se presenta especialmente y es examinada con la vista. El ojo puede examinar un renglón varias veces para desentrañar su significado o saltarse diez renglones para comprobar la definición o el uso de un símbolo.
FORTRAN tiene usos mucho más restringidos que los lenguajes comunes. No sirve para expresar emociones ni muchas percepciones razonadas, sino tan sólo una estrecha gama de problemas definidos lógicamente. Estos lenguajes no evolucionan de la forma que lo hacen los lenguajes naturales, un programador no es libre de modificar un lenguaje según sus gustos, porque alguna pequeña desviación en la rigida sintaxis puede provocar que su programa no funcione correctamente o de plano no funcione. Para hacer cambios en ellos se requiere de un grupo de programadores de sistemas para reescribir dicho lenguaje.

1.3.3 Proceso de la Comunicación.

El proceso de la comunicación efectiva requiere de ocho pasos, ya sea un lenguaje natural o un lenguaje artificial el que se esté utilizando. Estos pasos son:

1. Desarrollo de una idea.
Este paso es el que le da sentido a la comunicación, puesto que primero se debe reflexionar y desarrollar la idea que se desea transmitir, si esto no existiera la comunicación no tendría caso.

2. Codificación.
Consiste en codificar o cifrar el mensaje, es decir, ponerlo en un código común para emisor y receptor: palabras, gráficas u otros símbolos o caracteres o instrucciones conocidas por ambos interlocutores. En este momento se elige también el tipo de lenguaje que se utilizará: oral, escrito, gráfico, mímico, etc. y el formato específico: oficio, circular, memorándum, póster, folleto, llamada telefónica, dibujo, video, etc.

3. Transmisión.
Una vez desarrollado y elaborado el mensaje, se transmite en el lenguaje, formato y código seleccionado, enviándolo a través de un Canal o vehículo de transmisión.

4. Recepción.
El paso anterior permite a otra persona recibir el mensaje a través de un Canal de recepción; los canales naturales de recepción son los órganos de los sentidos: vista, oído, olfato, tacto y gusto. El receptor debe estar dispuesto a recibir el mensaje, para que éste llegue más fácilmente. Si el receptor no funciona bien, o pone una barrera mental en el caso del lenguaje natural, el mensaje se pierde.

5. Descifrado o Decodificación.
En este paso del proceso el receptor descifra el mensaje, lo decodifica e interpreta, logrando crear o más bien reconstruir una idea del mensaje. Si esa idea es equivalente a lo que transmitió el emisor se puede lograr la comprensión del mismo.

6. Aceptación.
La aceptación es una decisión personal que admite grados y depende de la forma en que fue percibido el mensaje, la apreciación que se hace de su exactitud, la opinión previa o prejuicio que se tenga sobre el mismo, la autoridad del emisor y las propias creencias y valores del receptor y sus implicaciones. Si el mensaje es aceptado, entonces se logra el efecto deseado y el verdadero establecimiento de la comunicación.

7. Uso.
Este es el paso decisivo de acción, la reacción que se logra en el receptor y el uso que él le da a la información contenida en el mensaje recibido.

8. Retroalimentación.
La retroalimentación es el paso final que cierra el circuito con la respuesta del receptor, que en este momento toma el papel de emisor, estableciendo así una interacción bilateral: la Comunicación en Dos Direcciones. Si la retroalimentación no se diera, entonces la comunicación no se estableció plenamente y sólo se quedó a nivel unilateral como información.

El caso más sencillo de programación de sistemas es la construcción de compiladores para ejecutar lenguajes de programación. Pero no sólo se aplica en lenguajes de programación, sino también se aplica en cualquier programa que se tenga que hacer un análisis o extracción de información.
Las herramientas de programación, son aquellas que permiten realizar aplicativos, programas, rutinas, utilitarios y sistemas para que la parte física del computador u ordenador, funcione y pueda producir resultados.

Muchas herramientas de software que manipulan programas fuentes realizan primero algún tipo de análisis. Algunos ejemplos son:
  • Intérpretes: Un intérprete permite que un programa fuente escrito en un determinado lenguaje vaya traduciéndose y ejecutándose directamente sentencia a sentencia por la computadora. Un intérprete capta una sentencia fuente, la analiza y la interpreta, dando lugar a su ejecución inmediata.



  • Compilador: Un compilador traduce completamente un programa fuente, generando un programa objeto escrito en lenguaje maquina. El compilador informa al usuario de la presencia de errores en el programa fuente.



  • Editores de estructuras: Un editor de estructuras toma como entrada una secuencia de órdenes para construir un programa fuente. Puede comprobar si la entrada, puede proporcionar palabras clave de manera automática.

  • Impresoras estéticas: Una impresora estética analiza un programa y lo imprime de forma que la estructura del programa resulte claramente visible.

  • Verificadores estáticos: Un verificador estático lee un programa, lo analiza e intenta descubrir errores potenciales sin ejecutar el programa. Un verificador estático puede detectar si hay partes de un programa que nunca se podrán ejecutar o si cierta variable se usa antes de ser definida.

1.1. ¿Que es y que estudia la programación de sistemas?


Un sistema es un conjunto de partes o elementos organizados y relacionados que interactúan entre sí para lograr un objetivo común. La programación es el proceso de convertir las especificaciones a grandes rasgos de los sistemas en instrucciones de maquina que produzcan los resultados deseados.
La programación de sistemas es el conjunto de programas necesario para que una computadora de una imagen coherente y monolítica ante sus usuarios. El trabajo de un programador de sistemas es seleccionar, modificar y mantener el complejo software del sistema operativo, por lo tanto, desempeñan una función de apoyo al mantener el ambiente del software del sistema operativo en el que trabajan los programadores, participan en las decisiones relativas a reducciones o ampliaciones de hardware y/o software.
En esta área se estudia la teoría de máquinas y su aplicación en el diseño de sistemas digitales y de arquitectura de computadoras. Áreas específicas: Sistemas digitales para arquitecturas paralelas y control de procesos y sistemas reconfigurables.

  • Inteligencia artificial aplicada a trabajo cooperativo.
    En las aplicaciones cooperativas realizadas en el entorno Web, es viable hacer uso de las herramientas de inteligencia artificial.
  • Sistemas para arquitecturas paralelas y distribuidas. Se refiere a manejo de memoria y calendarización de procesos, redes y protocolos, programación distribuida y diseño.
  • Sistemas de tiempo real. La planificación de los sistemas de tiempo real, por ejemplo; la planificación tolerante a fallas en sistemas de tiempo real, planificación de tiempo real en situaciones de sobrecarga.