Lenguajes de Programación: Tipos, Niveles y Evolución Histórica

Perspectivas del Estudio de los Lenguajes de Programación

El estudio de los lenguajes de programación agrupa tres intereses diferentes: el del programador profesional, el del diseñador del lenguaje y el del implementador del lenguaje. Claramente, el programador que ha realizado un curso de doce semanas en COBOL y luego entra en el campo del procesamiento de datos es diferente del programador que escribe un compilador en Pascal, o del programador que diseña un experimento de inteligencia artificial en LISP, o del programador que combina sus rutinas de FORTRAN para resolver un problema de ingeniería complejo, o del programador que desarrolla un sistema operativo multiprocesador en ADA.

En esta investigación, intentaremos clarificar estas distinciones tratando diferentes lenguajes de programación en el contexto de cada área de aplicación diferente. Algunos lenguajes (como APL y LISP) fueron diseñados por una sola persona con un concepto único, mientras que otros (FORTRAN y COBOL) son el producto de desarrollo de varios años realizados por comités de diseño de lenguajes.

El «Implementador del lenguaje» es la persona o grupo que desarrolla un compilador o intérprete para un lenguaje sobre una máquina particular o tipos de máquinas. Por ejemplo, la Universidad de Waterloo desarrolla compiladores para FORTRAN y PASCAL, los cuales son útiles en un entorno de programación de estudiantes debido a su superior capacidad de diagnóstico y velocidad de compilación.

Hay también muchos aspectos compartidos entre los programadores, diseñadores de un lenguaje e implementadores del mismo. Cada uno debe comprender las necesidades y ligaduras que gobiernan las actividades de los otros dos.

Clasificación de los Lenguajes de Programación

Hay, al menos, dos formas fundamentales desde las que pueden verse o clasificarse los lenguajes de programación: por su nivel y por sus principales aplicaciones. Además, hay cuatro niveles distintos de lenguaje de programación.

Lenguajes de Órdenes

Son fundamentalmente lenguajes de órdenes, dominados por sentencias que expresan «Lo que hay que hacer» en vez de «Cómo hacerlo». Ejemplos de estos lenguajes son los lenguajes estadísticos como SAS y SPSS y los lenguajes de búsqueda en base de datos, como NATURAL e IMS. Estos lenguajes se desarrollaron con la idea de que los profesionales pudieran asimilar más rápidamente el lenguaje y usarlo en su trabajo, sin necesidad de programadores o prácticas de programación.

Lenguajes de Alto Nivel

Los lenguajes de «Alto Nivel» son los más utilizados como lenguaje de programación. Aunque no son fundamentalmente declarativos, estos lenguajes permiten que los algoritmos se expresen en un nivel y estilo de escritura fácilmente legible y comprensible por otros programadores. Además, los lenguajes de alto nivel tienen normalmente las características de «Transportabilidad». Ejemplos de estos lenguajes de alto nivel son PASCAL, APL y FORTRAN (para aplicaciones científicas), COBOL (para aplicaciones de procesamiento de datos), SNOBOL (para aplicaciones de procesamiento de textos), LISP y PROLOG (para aplicaciones de inteligencia artificial), C y ADA (para aplicaciones de programación de sistemas) y PL/I (para aplicaciones de propósitos generales). Cada tipo de máquina, tal como VAX de Digital, tiene su propio lenguaje máquina distinto y su lenguaje ensamblador asociado. El lenguaje ensamblador es simplemente una representación simbólica del lenguaje máquina asociado, lo cual permite una programación menos tediosa que con el anterior. Sin embargo, es necesario un conocimiento de la arquitectura mecánica subyacente para realizar una programación efectiva en cualquiera de estos niveles de lenguajes.

Diferencias entre Lenguajes Máquina, Ensambladores y de Alto Nivel

Los siguientes tres segmentos de programa equivalentes exponen las distinciones básicas entre lenguajes máquina, ensambladores y de alto nivel:

(Aquí debería ir un ejemplo de código en lenguaje máquina, ensamblador y un lenguaje de alto nivel para ilustrar las diferencias, pero como el documento original no lo incluye, se omite).

Como muestra este ejemplo, a más bajo nivel de lenguaje más cerca está de las características de un tipo de máquina particular y más alejado de ser comprendido por un humano ordinario. La principal diferencia aquí es que los lenguajes ensambladores utilizan símbolos (X, Y, Z, A para «sumar», M para «multiplicar»), mientras que se requieren códigos numéricos (OC1A4, etc.) para que lo comprenda la máquina.

Compiladores, Intérpretes y su Evolución

La programación de un lenguaje de alto nivel o en un lenguaje ensamblador requiere, por tanto, algún tipo de interfaz con el lenguaje máquina para que el programa pueda ejecutarse. El ensamblador y el compilador traducen el programa a otro equivalente en el lenguaje X de la máquina «residente» como un paso separado antes de la ejecución. Por otra parte, el intérprete ejecuta directamente las instrucciones en un lenguaje Y de alto nivel, sin un paso de procesamiento previo. Cada sentencia es interpretada y luego traducida a lenguaje máquina solo una vez.

Algunos lenguajes son lenguajes principalmente interpretados, como APL, PROLOG y LISP. El resto de los lenguajes — Pascal, FORTRAN, COBOL, PL/I, SNOBOL, C, Ada y Modula-2 – son normalmente lenguajes compilados. En algunos casos, un compilador estará utilizable alternativamente para un lenguaje interpretado (tal como LISP) e inversamente (tal como el intérprete SNOBOL4 de los laboratorios Bell). La calidad de diagnosis y depuración que soportan los lenguajes interpretados es generalmente mejor que la de los lenguajes compilados, puesto que los mensajes de error se refieren directamente a sentencias del texto del programa original. Además, la ventaja de la eficiencia que se adjudica tradicionalmente a los lenguajes compilados frente a los interpretados puede pronto ser eliminado, debido a la evolución de las máquinas cuyos lenguajes son ellos mismos lenguajes de alto nivel. Como ejemplo de estos están las nuevas máquinas LISP, las cuales han sido diseñadas recientemente por Symbolics y Xerox Corporations.

Influencia del Estilo de Programación y los Tipos de Datos

Los lenguajes de programación son tomados de diferentes perspectivas. Con frecuencia el programador es osado a usar combinaciones de conceptos que hacen al lenguaje «duro» de usar, de entender e implementar. Cada programador tiene en mente un estilo particular de programación, la decisión de incluir u omitir ciertos tipos de datos que pueden tener una significativa influencia en la forma en que el lenguaje es usado, la decisión de usar u omitir conceptos de programación o modelos.

Importancia de la Historia de los Lenguajes de Programación

El programador, diseñador e implementador de un lenguaje de programación deben comprender la evolución histórica de los lenguajes para poder apreciar por qué presentan características diferentes. Por ejemplo, los lenguajes «más jóvenes» desaconsejan (o prohíben) el uso de las sentencias GOTO como mecanismo de control inferior, y esto es correcto en el contexto de las filosofías actuales de ingeniería del software y programación estructurada. Por tanto, cuando se ve un lenguaje como FORTRAN, el cual tiene sus raíces en los comienzos de la historia de los lenguajes de programación, uno no debe sorprenderse de ver la antigua sentencia GOTO dentro de su repertorio.

Lo más importante es que la historia nos permite ver la evolución de familias de lenguajes de programación, ver la influencia que ejercen las arquitecturas y aplicaciones de las computadoras sobre el diseño de lenguajes y evitar futuros defectos de diseño aprendiendo las lecciones del pasado. Colectivamente cubren los aspectos más importantes con los que ha de enfrentarse el diseñador de lenguajes y la mayoría de las aplicaciones con las que se enfrenta el programador. Para los lectores que estén interesados en conocer con más detalle la historia de los lenguajes de programación recomendamos las actas de una reciente conferencia (1981) sobre este tema, editadas por Richard Wexelblat. Vemos que FORTRAN I es un ascendente directo de FORTRAN II, mientras que FORTRAN, COBOL, ALGOL 60, LISP, SNOBOL y los lenguajes ensambladores, influyeron en el diseño de PL/I.

Estándares de Lenguajes de Programación

También varios lenguajes están prefijados por las letras ANS. Esto significa que el American National Standards Institute ha adoptado esa versión del lenguaje como el estándar nacional. Una vez que un lenguaje está estandarizado, las máquinas que implementan este lenguaje deben cumplir todas las especificaciones estándares, reforzando así el máximo de transportabilidad de programas de una máquina a otra. La política federal de no comprar máquinas que no cumplan la versión estándar de cualquier lenguaje que soporten tiende a «fortalecer» el proceso de estandarización, puesto que el gobierno es, con mucho, el mayor comprador de computadoras de la nación. Esta máquina no solo influyó en los primeros lenguajes, sino que también suministró el esqueleto operacional sobre el que evolucionó la mayoría de la programación de sistemas.

Una discusión más directa de todos estos primeros modelos no está entre los objetivos de este texto. Sin embargo, es importante apuntar aquí debido a su fundamental influencia en la evolución de los primeros lenguajes de programación, por una parte, y por su estado en el núcleo de la teoría de la computadora, por otra. Esta sección, conocida ampliamente como «tesis de Church», nos permite escribir algoritmos en distintos lenguajes de programación.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.