La imagen anterior presenta el árbol genealógico del lenguaje de programación C++.
El desarrollo de este lenguaje no puede ser mejor relatado que por su propio creador:
El desarrollo de este lenguaje no puede ser mejor relatado que por su propio creador:
Bjarne Stroustrup.
Stroustrup señala que la primera influencia de C++ proviene del lenguaje Fortran
(FORmula TRANslation), desarrollado inicialmente en 1956 y considerado el primer
lenguaje de programación de alto nivel, es decir, el primer paso dado hacia la
implementación de los programas en el dominio del problema.i,2 Fortran ya cuenta
con arreglos, ciclos de repetición, una librería de funciones matemáticas,
mecanismos de entrada/salida, funciones definidas por el usuario y, entre las
cuestiones más importantes logradas con su desarrollo, se descubrió la estructura
básica de un compilador así como la notación Backus-Naur Form (BNF) para
expresar la gramática de un lenguaje de programación.
El primero de los lenguajes de programación que empleó la notación BNF, fue
Algol60. El lenguaje algorítmico (ALGOrithmic Language), Algol, fue desarrollado por
un grupo de gente auspiciada por la Federación Internacional de Procesamiento de
Información (IFIP – International Federation of Information Processing), el cual
estableció los fundamentos para los lenguajes de programación modernos, incluido
C++, con las características implementadas en Algol: tipos de datos en tiempo de
compilación, ámbito léxico, uso de una gramática para definir el propio lenguaje,
separación de las reglas sintácticas de las semánticas así como de la definición del
lenguaje con respecto a su implementación y, al final pero no menos importante, el
soporte para la programación estructurada. Aunque Algol no tuvo gran éxito, por ser
demasiado diferente a lo que existía, fue un parteaguas que estableció las bases para
el futuro de la programación.
Siguiendo el linaje de Algol, a mediados de la década de los 60’s se desarrolló el
lenguaje Simula, como un superconjunto de Algol60 y como el primer lenguaje de
programación en implementar los conceptos que hoy definen a la POO: la
encapsulación, la herencia y el polimorfismo.iii Simula acuñó los términos clase, para
denominar a un tipo definido por el usuario; y virtual, para denotar una función que
puede ser sobrescrita e invocada a través de una clase base o padre. Así, un
programa se convierte en un conjunto de objetos interactuando entre ellos y no en
un monolito de código.
A través de otra derivación de Algol, diferente a la que originó Simula, llega la
principal influencia del lenguaje C++, el lenguaje de programación C, conocido
también como su lenguaje padre, por la cantidad tan grande de características que
heredó de él.
El origen de C proviene del proyecto CPL que nunca se completó en Inglaterra;
del lenguaje BCPL (CPL Básico – Basic CPL) que Martin Richards creó cuando visitó
el Instituto Tecnológico de Massachusetts, en Estados Unidos, proveniente de la
Universidad de Cambridge; y de un lenguaje interpretado denominado B, creado por
Ken Thompson.
CPL fue un proyecto conjunto entre la Universidad de Cambridge y el Colegio
Imperial en Londres. Como el proyecto se inició en Cambridge, el significado del
nombre, “C”, correspondía oficialmente a “Cambridge”. Luego entró al proyecto el
Colegio Imperial y el significado cambió a “Combinado”. Se supone que en realidad
su significado siempre fue “Christopher”, derivado del nombre del diseñador
principal de CPL, Christopher Strachey.
Dennis Ritchie diseñó e implementó el lenguaje de programación C en el Centro
de Investigación en Ciencias Computacionales de los Laboratorios Bell, en Murray
Hill, Nueva Jersey. Su trabajo fue un esfuerzo realizado como una clara
contraposición a la costumbre establecida en esa época de que el software de
sistemasv debía programarse en lenguaje ensamblador, generando la imposibilidad
de ser portable. Por tal motivo, Ken Thompson y el propio Dennis Ritchie
desarrollaron más tarde el sistema operativo Unix, programándolo exclusivamente en
C, incluidas las herramientas necesarias para su funcionamiento, como el
compilador. Unix es la influencia más grande conocida en el tema de los sistemas
operativos y, unido a él, el lenguaje C es el referente primario en el área de los
lenguajes de programación. Más ahora que el sistema operativo GNU/Linux,
derivado directo de Unix y también programado en C, ha tenido un repunte
impresionante, respaldado por los movimientos de software abierto y libre.
La belleza del lenguaje C radica en que es deliberadamente simple, apegado a
los aspectos fundamentales del hardware, esto es, las características del lenguaje
mapean directamente a las características de hardware.
Dennis Ritchie describió a C como “un lenguaje fuertemente tipado, pero
débilmente verificado”; esto es, C es muy estricto en tiempo de compilación, pero
muy débil o demasiado permisivo en tiempo de ejecución. Lo anterior no es un
efecto premeditado del diseño del lenguaje, se debe a las características tan
restrictivas que en esos tiempos tenía el hardware.
Finalmente, Bjarne Stroustrup diseñó e implementó el lenguaje de programación
C++ en el mismo Centro de Investigación en Ciencias Computacionales de los
Laboratorios Bell, en Murray Hill, donde nació el lenguaje C (y a unos cuantos pasos
de la oficina de Dennis Ritchie). C++ es un lenguaje de programación de propósitos
múltiples, con una cierta orientación hacia la programación de sistemas, que es un
mejor C y que soporta la abstracción de datos, la POO y la programación genérica.
Conceptos que, en los tiempos en que nació C++, se consideraban demasiado costosos en cuanto a recursos de cómputo, como para usarlos en el mundo real, o demasiado complicados para que los programadores ordinarios los aprendieran.
El trabajo de desarrollo de C++ inició en 1979, generando una versión comercial
en 1985. Posteriormente, Stroustrup siguió desarrollando el lenguaje con ayuda de
sus compañeros de los laboratorios Bell, y de gente externa a estos, hasta que
comenzó su estandarización oficial en 1990. A partir de ahí y teniendo como líder
del esfuerzo al propio Stroustrup, la definición de C++ la desarrolló el Instituto
Nacional Estadounidense de Estándares (ANSI – American National Standards
Institute) y, desde 1991, la Organización Internacional de Estándares (ISO –
International Organization for Standardization). Bjarne Stroustrup sigue dirigiendo el
grupo internacional de estandarización a cargo de diseñar e implementar las
características nuevas del lenguaje. El primer estándar internacional se ratificó en
1998 (denominado C++98) y, el segundo, en 2011 (denominado C++11)
El desarrollo más significativo del lenguaje C++, después de su primera década
de crecimiento, es la Librería Estándar de Plantillas (STL – Standard Template Library)
creada por Alexander Stepanov. La STL es la librería estándar del lenguaje para
manejo de contenedores (estructuras de datos) y los algoritmos que las manipulan.
El “C con clases” mostrado en la Figura 1, fue una síntesis inicial de ideas
tomadas de los lenguajes C y Simula, que dio paso a su sucesor, C++.
Las fortalezas principales que han hecho de C y C++ lo que hoy son, no son ni la
elegancia, ni las características avanzadas; son su flexibilidad, su rendimiento y su
estabilidad. En el mundo siempre cambiante de los sistemas de software, estas son
tres de las características más codiciadas.
Para finalizar este apartado, cabe señalar que el lector interesado en profundizar
en la descripción, el diseño, la evolución, el futuro y la propia programación en este
lenguaje puede recurrir a The C++ Programming Language,3 al estándar oficial C++11 de la ISO,4 a The Design and Evolution of C++,5 a la página web del propio
Bjarne Stroustrup6 y a Programming and Practice – Principles and Practice Using
C++.