El lenguaje C++: historia y características

C++, Java y C#, los tres lenguajes más populares junto con C en esta primera década del siglo XXI son herederos directos del propio C con características orientadas a objetos y a Internet.

Actualmente, y aunque C sigue siendo, tal vez, el más utilizado en el mundo de la educación como primer lenguaje de programación y también copa un porcentaje alto de utilización en el campo profesional, los tres lenguajes con características técnicas de orientación a objetos forman con C el poker de lenguajes más empleados en el mundo educativo, profesional y científico actual y previsiblemente de los próximos años.

C++ es heredero directo del lenguaje C que, a su vez, se deriva del lenguaje B [Richards, 1980]. C se mantiene como un subconjunto de C++.

Otra fuente de inspiración, como señala su autor Bjarne Stroustrup [Stroustrup, 1997]9 fue Simula 67 [Dahl, 1972] del que tomó el concepto de clase (con clases derivadas y funciones virtuales).

El lenguaje de programación C fue desarrollado por Dennis Ritche de AT&T Bell Laboratories que se utilizó para escribir y mantener el sistema operativo UNIX (hasta que apareció C, el sistema operativo UNIX fue desarrollado por Ken Thompson en AT&T Bell Laboratories mediante en lenguaje en-samblador o en B).

C es un lenguaje de propósito general que se puede utilizar para escribir cualquier tipo de programa, pero su éxito y popularidad está especialmente relacionado con el sistema operativo UNIX. (Fue desarrollado como lenguaje de programación de sistemas, es decir, un lenguaje de programación para escribir sistemas operativos y utilidades (programas) del sistema.).

Los sistemas operativos son los programas que gestionan (administran) los recursos de la computadora. Ejemplos bien conocidos de sistemas operativos además de UNIX son MS/DOS, OS/2, MVS, Lynux, Windows 95/98, Windows NT, Windows 2000, OS Mac, etc.

La especificación formal del lenguaje C es un documento escrito por Ritchie, titulado The C Refe-rence Manual. En 1997, Ritchie y Brian Kernighan, ampliaron ese documento y publicaron un libro referencia del lenguaje The C Programming Language (también conocido por el K&R).

Aunque C es un lenguaje muy potente, tiene dos características que lo hacen inapropiado como una introducción moderna a la programación.

Primero, C requiere un nivel de sofisticación a sus usuarios que les obliga a un difícil aprendizaje a los programadores principiantes ya que es de comprensión difícil.

Segundo C, fue diseñado al principio de los setenta, y la naturaleza de la programación ha cambiado de modo significativo en la década de los ochenta y noventa.

Para subsanar estas “deficiencias” Bjarne Stroustrup de AT&T Bell Laboratories desarrolló C++ al principio de la década de los ochenta. Stroustrup diseñó C++ como un mejor C.

En general, C estándar es un subconjunto de C++ y la mayoría de los programas C son también programas C++ (la afirmación inversa no es verdadera).

C++ además de añadir propiedades a C, presenta características y propiedades de programación orientada a objetos, que es una técnica de programación muy potente y que se verá en la última parte de este libro.

Se han presentado varias versiones de C++ y su evolución se estudió en [Stroustrup 94]. Las características más notables que han ido incorporándose a C++ son: herencia múltiple, genericidad, plantillas, funciones virtuales, excepciones, etc.

C++ ha ido evolucionando año a año y como su autor ha explicado: “evolucionó siempre para resolver problemas encontrados por los usuarios y como consecuencia de conversaciones entre el autor, sus amigos y sus colegas”.

C++ comenzó su proyecto de estandarización ante el comité ANSI y su primera referencia es The Annotated C++ Reference Manual [Ellis 89]12. En diciembre de 1989 se reunió el comité X3J16 del ANSI por iniciativa de Hewlett Packard.

En junio de 1991, a la estandarización de ANSI se unió ISO (International Organization for Standardization) con su propio comité (ISO-WG-21), creando un esfuerzo común ANSI/ISO para desarrollar un estándar para C++.

Estos comités se reúnen tres veces al año para aunar sus esfuerzos y llegar a una decisión de creación de un estándar que convirtiera a C++ en un lenguaje importante y de amplia difusión.

En 1995, el Comité publicó diferentes artículos (working paper) y en abril de ese año, se publicó un borrador del estándar (Comité Draft) para su examen público. En diciembre de 1996 se lanzó una segunda versión (CD2) a dominio público.

Estos documentos no sólo refinaron la descripción de las características existentes, de C++ sino que también se amplió el lenguaje con excepciones, identificación en tiempo de ejecución (RTII, run_time type identification), plantillas (templates) y la biblioteca estándar de plantillas STL (Standard Template Library).

Stroustrup publicó en 1997 la tercera edición de su libro The C++ Programming Language. Este libro sigue el estándar ANSI/ISO C++.

C++ es un lenguaje estandarizado. En 1998, un comité de ANSI/ISO (American Nacional Standard Institute/International Organization for Standardization) adoptó una especificación del lenguaje cono-cida como Estándar C++ de 1998, oficialmente tiene el título ISO/ANSI C++ Standard (ISO/IEC 14882:1998) [Standard98].

En 2003 una segunda versión del Estándar vio la luz y fue adoptada también como [Standard03]. El estándar está disponible en Internet como archivo PDF con el número de docu-mento 14882 en http://www.ansi.org donde se puede adquirir.

La nueva edición es una revisión técnica, significando que se ordena la primera edición —fijación de tipos, reducción de ambigüedades y similares, pero no cambian las características del lenguaje.

Este libro se basa en el estándar C++ como un superconjunto válido de C. Existen diferencias entre el estándar ANSI C y las reglas correspondientes de C++, pero son pocas. Realmente, ANSI C incorpora algunas características primitivas introducidas en C++, tal como el prototipado de funciones y el calificador de tipo const.

Antes de la emergencia de ANSI C, la comunidad de C fue seguida de un estándar de facto, basado en el libro The C Programming Language, de Kernighan y ritchie (Addison-Wesley Publishing Company, Reading, MA, 1978). Este estándar se conoció, en un principio, como K&r; con la emergencia de ANSI C, el k&R más simple se llamó, con frecuencia, C clásico.

El estándar ANSI C no sólo definió el lenguaje C sino que también definió una biblioteca estándar de C que deben soportar todas las implementaciones de ANSI C. C++ también utiliza la biblioteca; este libro se refiere a ella como la biblioteca estándar de C o simplemente biblioteca estándar. También el estándar ANSI/ISO C++ proporciona una biblioteca estándar de clases.

Recientemente, el C estándar ha sido revisado; el nuevo estándar, llamado, con frecuencia C99, fue adoptado por ISO en 1999 y por ANSI en 2000.

Este estándar añade algunas características de C, tales como un nuevo tipo integer, que soportan algunos compiladores de C++. Aunque, no son parte del estándar C++ actual, estas características se pueden convertir como parte del C++ Standard.

Antes de que el comité ANSI/ISO C++ comenzara su trabajo, muchas personas aceptaron como estándar, la versión de C++ más reciente de Bell Labs. Así, un compilador puede describirse como compatible con la versión 2.0 o 3.0 de C++.

Debido a que se lleva mucho tiempo hasta que un fabricante de compiladores implementa las últimas

especificaciones de un lenguaje, existen compiladores que todavía no cumplen o conforman el estándar. Esto puede conducir a restricciones en algunos casos. Sin embargo, todos los programas de este libro han sido compilados con las últimas versiones de compiladores diferentes.

C++ es un lenguaje orientado a objetos que se ha hecho muy popular y con una gran difusión en el mundo del software y actualmente constituye un lenguaje estándar para programación orientada a objetos, aunque también puede ser utilizado como lenguaje estructurado al estilo de C si se desea trabajar al modo clásico de programación estructurada, sobre todo si se desea trabajar con algoritmos y estructura de datos.