martes, 9 de junio de 2009



Los compiladores C++ incluyen un amplio repertorio de clases, funciones y macros que permiten realizar una amplia variedad de tareas, incluyendo entradas/salidas de bajo y alto nivel; manipulación de cadenas alfanuméricas y ficheros; control de procesos (incluyendo multiproceso); manejo de memoria; cálculos matemáticos y un largo etcétera.
Este repertorio de recursos es denominado colectivamente como "Rutinas de librería"; "Librerías de ejecución" RTL ("Runtime Librarys") o simplemente "Librerías". Puede decirse que el lenguaje aislado (tal cual) no tiene prácticamente ninguna utilidad sin la concurrencia de estas utilidades. El Estándar C++ las clasifica según su utilidad:
Soporte del lenguaje [7]
Diagnóstico
Utilidades generales
Cadenas alfanuméricas ("Strings")
Localización
Contenedores
Iteradores
Algoritmos
Cálculo numérico
Entrada/Salida
§2.1 Librería Estándar C++
Para poner un poco de orden, el Estándar C++ define la denominada Librería Estándar [3] que debe acompañar a cada implementación del compilador que se adhiera al estándar. Es decir: la norma determina cuales son, como se llaman y como se utiliza este conjunto de algoritmos que deben acompañar (como mínimo) a cada implementación del compilador que quiera llamarse "Estándar". La última versión, ISO/IEC 14882 del año 1998, especifica que se compone de 32 ficheros de cabecera de nombres fijos y conocidos agrupados según la funcionalidad de los algoritmos. Son los siguientes:
Ficheros
Funcionalidad/funciones

Parte de la STL que describe los algoritmos ( 5.1.3)

Parte de la STL relativa a contenedores tipo bitset ( 5.1.1e1). Set de valores booleanos.

Parte de la librería numérica de la STL relativa a los complejos ( ).

Parte de la STL relativa a contenedores tipo deque; un tipo de colas: "Double-ended-queue" ( 5.1.1c3).

Parte de la librería de diagnóstico relativa al manejo de excepciones ( 1.6)

Flujos hacia/desde ficheros.

Parte de la STL relativa a Objetos-función ( 4.9.18f)

Manipuladores.

Supreclases para manejo de flujos de E/S.

Contiene declaraciones adelantadas de todas las plantillas de flujos y sus typedefs estándar. Por ejemplo ostream.

Parte del a STL que contiene los algoritmos estándar de E/S.

Algoritmos estándar de flujos de entrada.

Parte de la STL relacionada con iteradores ( 5.1.2), un tipo de puntero que permite utilizar los algoritmos de la Librería con las estructuras de datos representadas por los contenedores.

Descripción de propiedades dependientes de la implementación ( 1.2.1) que afectan a los tipos fundamentales.

Parte de la STL relativa a contenedores tipo list ( 5.1.1c4); listas doblemente enlazadas ( 1.8)

Parte de la STL relativa a la internacionalización ( 5.2).

Parte de la STL relativa a contenedores tipo map ( 5.1.1e4).

Utilidades relativas a la gestión de memoria, incluyendo asignadores ( 5.1.5) y punteros inteligentes (auto_ptr).

Manejo de memoria dinámica ( 1.3.2)

Parte de la librería numérica de la STL relativa a operaciones numéricas ( ).

Algoritmos estándar para los flujos de salida.

Parte de la STL relativa a contenedores tipo queue ( 5.1.1d1); colas de objetos ( 1.8).

Parte de la STL relativa a contenedores tipo set ( 5.1.1e2).

Flujos hacia/desde cadenas alfanuméricas.

Parte de la STL relativa a contenedores tipo stack ( 5.1.1c5); pilas de objetos ( 1.8).

Parte de la STL relativa a las clases de las que derivan los objetos lanzados por las excepciones ocasionadas en los algoritmos de la propia STL y otras expresiones. Estas clases son utilizadas para reportar errores detectados durante runtime. Los usuarios también pueden utilizar excepciones para reportar errores en sus propios programas ( 1.6.1a).

Parte de la STL relativa al Almacenamiento de flujos de E/S ("Stream buffers"). Define los tipos que controlan la capa de transporte ( 5.3.2f).

Parte de la STL relativa a contenedores tipo string ( ); una generalización de las cadenas alfanuméricas para albergar cadenas de objetos.

Mecanismo de identificación de tipos en tiempo de ejecución ( 4.9.14).

Parte de la STL que contiene elementos auxiliares como operadores y pares (pairs).

Parte de la librería numérica de la STL relativa a manejo de matrices numéricas ()

Parte de la STL relativa a los contenedores tipo vector; una generalización de las matrices unidimensionales C/C++ ( 5.1.1c1)
Es digno de mención que aunque generalmente las librerías no aportan ninguna característica al lenguaje (se supone que son utilidades auxiliares que no forman parte del lenguaje propiamente dicho), una pequeña porción de la Librería Estándar C++ sí aporta características que se consideran pertenecientes a este, de forma que deben estar presentes los ficheros de cabecera correspondientes si se desea usarlas. En concreto se refieren a los siguientes elementos:
Operadores new, new[], delete y delete[] ( 4.9.20).
Clase type_info que corresponde al mecanismo RTTI de identificación de tipos en tiempo de ejecución representado por el operador typeid ( 4.9.14).
Rutinas de inicio y terminación ( 1.5).
Las excepciones estándar lanzadas por los algoritmos anteriores ( 1.6.1a)
§2.2 Librería C
Además de otras nuevas, cuyo diseño e importancia cambian drásticamente la filosofía del lenguaje, C++ incluye prácticamente la totalidad de funciones de la primitiva librería estándar C. A esta librería, mantenida por compatibilidad, la denominamos Librería clásica ( 5.5).
§3 Componentes
Al referirnos a las librerías C++ utilizamos la terminología siguiente:
RTL Conjunto de librerías que acompañan a un compilador ("Runtime Library"), sean o no estándar.
Librería Estándar. Conjunto de librerías cuyo contenido está definido por el Estándar C++ (abreviadamente LE)
Libería clásica. Parte de la Librería Estándar correspondiente al C clásico.
STL ("Standard Templete Library"). Parte de la LE genuina de C++ (que no es heredada de C) y que responde a la forma "++" de hacer las cosas.
La calidad de un compilador C++ viene determinada en gran medida por la calidad y cantidad de su RTL; por su grado de adherencia al Estándar [6] y por el grado de soporte que proporciona para la plataforma concreta a que se destina.
Nota: en lo que concierne a la programación para MS Windows (las referencias a la plataforma Wintel surgen de forma constante e inevitable), los compiladores Borland C++ y MS Visual C++ son quizás los más conocidos y utilizados. El primero incluye una completa librería denominada VCL (Visual Component Library 4.11.8b). La del segundo es conocida como MFC (Microsoft Foundation Classes 1.7.2).Linux dispone de su propio compilador: GNU Cpp, que comenzó siendo un compilador C y ha evolucionado a un producto que es en realidad un superconjunto de compiladores. No solo puede compilar código C y C++; también otros lenguajes como Ada o Fortran; de forma que es común referirse a ellos como GCC ("GNU Compiler Collection"). La buena noticia es que existen versiones de este compilador para plataformas Windows, de forma que incluso en este ambiente "Propietario" pueden realizarse desarrollos utilizando herramientas "Open source" (ver recuadro en 1.4.0a1).
A grandes rasgos la librería Estándar C++ comprende los siguientes módulos:
La denominada Librería Estándar de Plantillas ( 5.1), abreviadamente STL ("Standard Templete Library").
Librería numérica. Parte de la STL que contiene algoritmos especialmente concebidos para computación numérica. Por ejemplo, una clase valarray optimizada para matrices numéricas y una clase complex para manejo y representación estandarizada de números complejos (en realidad una plantilla con especializaciones para los tipos float, double y long double).
Utilidades. Parte de la STL dedicada a elementos auxiliares tales como adaptadores y la clase auto_ptr.
Unas utilidades de entrada/salida de flujos, denominadas genéricamente iostreamsUna utilidad locale para manejo de localismos

Una clase string para manejo estandarizado de cadenas de caracteres. En realidad es una instanciación (especialización) de la plantilla basic_string para cadenas de caracteres.
Un esquema para describir de modo uniforme el entorno de ejecución mediante la utilización de una clase estándar denominada numeric_limits y especialización para cada uno de los tipos de datos fundamentales.
Utilidades para manejo de memoria
Soporte para utilización de juegos de caracteres y signos de diversos idiomas.
Utilidades de diagnóstico y manejo de errores. Incluyen manejo de excepciones y la macro assert


No hay comentarios:

Publicar un comentario