Características de los lenguajes de programación

¿Cuáles son estas características?

Según la definición de la Encyclopedia of Computer Science (Encyclopedia of Computer Science, 4th Edition, Anthony Ralston (Editor), Edwin D. Reilly (Editor), David Hemmendinger (Editor), Wiley, 2000. Disponible en la biblioteca politécnica con identificador: POE R0/E/I/ENC/RAL):

"A programming language is a set of characters, rules for combining them, and rules specifying their effects when executed by a computer, which have the following four characteristics:

  1. It requires no knowledge of machine code on the part of the user
  2. It has machine independence
  3. Is translated into machine language
  4. Employs a notation that is closer to that of the specific problem being solved than is machine code"

Según Abelson y Sussman, en el libro que vamos a seguir en nuestra asignatura (SICP, p. 1):

"We are about to study the idea of a computational process. Computational processes are abstract beings that inhabit computers. As they evolve, processes manipulate other abstract things called data. The evolution of a process is directed by a pattern of rules called a program. [...] The programs we use to conjure processes are like a sorcerer's spells. They are carefully composed from symbolic expressions in arcane and esoteric programming languages that prescribe the tasks we want our processes to perform."

Y después, en la página 4, añaden otra idea fundamental:

"A powerful programming language is more than just a means for instructing a computer to perform tasks. The language also serves as a framework within which we organize our ideas about processes. Thus, when we describe a language, we should pay particular attention to the means that the language provides for combining simple ideas to form more complex ideas."

Así, entre las características de un lenguaje de programación podemos remarcar las siguientes:

  • Define un proceso que se ejecuta en un computador
  • Es de alto nivel, cercano a los problemas que se quieren resolver (abstracción)
  • Permite construir nuevas abstracciones que se adapten al dominio que se programa

Para Abelson y Sussman, todos los lenguajes de progamación permiten combinar ideas simples en ideas más complejas mediante los siguientes tres mecanismos:

  • expresiones primitivas, que representan las entidades más simples del lenguaje
  • mecanismos de combinación con los que se construyen elementos compuestos a partir de elementos más simples
  • mecanismos de abstracción con los que dar nombre a los elementos compuestos y manipularlos como unidades

Cuando se habla de elementos en el párrafo anterior nos estamos refiriendo tanto a datos como a programas.

Una breve lista de características comunes a todos los lenguajes de programación:

  • Tienen una sintaxis: un conjunto de reglas que definen qué expresiones de texto son correctas. Por ejemplo, en C todas las sentencias deben terminar en ';'.
  • Los lenguajes de programación se ejecutan en un computador y tienen una determinada semántica que define cuál será el resultado de la ejecución de un programa.
  • Definen un conjunto de tipos de datos primitivos que representan los posibles valores que pueden devolver las expresiones del lenguaje.
  • Tienen mecanismos de abstracción para definir nuevos tipos de datos a partir de los primitivos o nuevas funciones y procedimientos.

Abstracción

El concepto de abstracción es fundamental en informática. Para modelar un dominio (sistema de información de una universidad, sistema de sensores de una planta química, etc.) es necesario definir distintas abstracciones que nos permitan tratar sus elementos.

Una abstracción agrupa un conjunto de elementos (datos y procedimientos) y le da un nombre. Por ejemplo, cuando hablamos del sistema de información de una universidad identificamos elementos como:

  • Estudiantes
  • Asignaturas
  • Matrícula
  • Expediente académico
  • ...

Existen abstracciones propias de la computación, que se utilizan en múltiples dominios. Por ejemplo, abstracciones de datos como:

  • Listas
  • Árboles
  • Grafos
  • Tablas hash

También existen abstracciones que nos permiten tratar con dispositivos y ordenadores externos:

  • Fichero
  • Raster gráfico
  • Protocolo TCP/IP

Uno de los trabajos principales de un informático es la construcción de abstracciones que permitan ahorrar tiempo y esfuerzo a la hora de tratar con la complejidad del mundo real.

Tal y como dice Joel Spolsky en su blog Joel on Software:

"TCP is what computer scientists like to call an abstraction: a simplification of something much more complicated that is going on under the covers. As it turns out, a lot of computer programming consists of building abstractions. What is a string library? It's a way to pretend that computers can manipulate strings just as easily as they can manipulate numbers. What is a file system? It's a way to pretend that a hard drive isn't really a bunch of spinning magnetic platters that can store bits at certain locations, but rather a hierarchical system of folders-within-folders containing individual files that in turn consist of one or more strings of bytes."

Una misión fundamental de los lenguajes de programación es proporcionar herramientas que sirvan para construir estas abstracciones.