Biblioteca (programación)
De Wikipedia, la enciclopedia libre
| Esta página está siendo traducida del idioma inglés a partir del artículo Library (computing), razón por la cual puede haber lagunas de contenidos, errores sintácticos o escritos sin traducir. Puedes colaborar con Wikipedia continuando con la traducción desde el artículo original |
En ciencias de la computación, una biblioteca (o librería) es un conjunto de subprogramas utilizados para desarrollar software. Las bibliotecas contienen código "ayuda" y datos, que proporcionan servicios a programas independientes, es decir, pasan a formar parte de estos. Esto permite que el código y los datos se compartan y puedan modificarse de forma modular. Algunos programas ejecutables pueden ser a la vez programas independientes y bibliotecas, pero la mayoría de éstas no son ejecutables. Ejecutables y bibliotecas hacen referencias (llamadas enlaces o links) entre sí a través de un proceso conocido enlace (o link), que por lo general es realizada por un software denominado enlazador o linker.
La mayoría de los sistemas operativos modernos proporcionan bibliotecas que implementan la mayoría de los servicios del sistema. De esta manera, estos servicios se convierten en una "materia prima" que cualquier aplicación moderna espera que el sistema operativo ofrezca. Como tal, el código utilizado por la mayoría de las aplicaciones modernas se ofrece en estas bibliotecas.
Tabla de contenidos |
[editar] Nota terminológica
Habitualmente se emplea el término librería para referirse a una biblioteca, por la similitud con el original inglés library. Ambos términos, biblioteca y librería, son correctos según las definiciones ('biblioteca', 'librería') de la RAE, aunque los "puristas" consideran como correcta biblioteca. Esto se debe a que la traducción correcta de library es biblioteca, mientras que el término inglés para librería es book shop (literalmente: tienda de libros), aunque también podría ser bookshelf (estantería o mueble para guardar libros, librería). También es habitual referirse a ella con el término de origen anglosajón toolkit (conjunto, equipo, maletín, caja, estuche, juego (kit) de herramientas).
[editar] Historia
Los primeros conceptos de programación similares a las bibliotecas intentaban separar las definiciones de datos de la implementación del programa. Siguiendo los principios de las ciencias de la computación de "separación de problemas" (aislar problemas pequeños fáciles de abordar) y "ocultación de información", "se propone permitir el intercambio de datos del sistema ente varios programas, proporcionando una descripción centralizada de los datos" (Wexelblat 1981:369).
COBOL incluyó un "primitivo sistema de bibliotecas" en el año 1959 (Wexelblat 1981:274), pero Jean Sammet las describió retrospectivamente como "recursos insuficientes de librería" (Wexelblat 1981:258).
Otra de las grandes contribuciones al concepto moderno de biblioteca fue la innovación de subprograma de FORTRAN. Éstos pueden ser compilados con independencia unos de otros, pero el compilador carece de un enlazador, por lo que el chequeo de tiposentre los subprogramas resulta imposible (Wilson et. Al. 1988:126).
Por último, se debe hablar la influencia que Simula 67 tuvo en el concepto de 'librería'. Simula es el primer lenguaje de programación orientado a objetos, y sus clases son casi idénticas que el concepto actual que se utiliza en Java, C++ y C#. El concepto de clase de Simula fue también el origen del "paquete" en Ada y el "módulo" de Modula-2 (Wilson et. Al. 1988:52). A pesar de haber sido desarrollado 1965, las clases de Simula podrían ser incluidas en ficheros de librería y añadidas en tiempo de compilación (Wexelblat 1981:716).
[editar] Tipos
[editar] Librerías estáticas
Históricamente, las bibliotecas sólo podían ser estáticas. Una librería estática, también conocido como archivo, consiste en un conjunto de rutinas que se copian en una aplicación por el compilador o el enlazador, produciendo archivos con código objeto y un fichero ejecutable independiente. Este proceso, y el archivo ejecutable, se conoce como una construcción estática de la aplicación objetivo. La dirección real, las referencias para saltos y otras llamadas a rutinas se almacenan en una dirección relativa o simbólica, que no puede resolverse hasta que todo el código y las bibliotecas son asignadas a direcciones estáticas finales.
El enlazador resuelve todas las direcciones no resueltas convirtiéndolas en direcciones fijas o relocalizables (desde una base común) cargando todo el código y las librerías en posiciones de memoria en tiempo de ejecución. Este proceso de enlazado puede durar incluso más tiempo que el proceso de compilación, y debe ser realizado cada vez que alguno de los módulos es recompilado. La mayoría de los lenguajes compilados tienen biblioteca estándar (por ejemplo, la librería estándar de C), pero los programadores también pueden crear sus propias bibliotecas personalizadas. Los compiladores comerciales proporcionan tanto las librerías estándar como las personalizadas.
Un enlazador pueden trabajar sobre tipos específicos de ficheros objeto, y por lo tanto requiere tipos específicos (compatibles) de bibliotecas. Los ficheros objeto recopilados en una biblioteca pueden distribuirse y utilizarse fácilmente. Un cliente, ya sea un programa o una librería de subrutinas, accede a una biblioteca objeto referenciando sólo por su nombre. El proceso de enlazado resuelve las referencias buscando en las bibliotecas de el orden dado. Por lo general, no se considera un error si un nombre puede encontrarse varias veces en un determinado conjunto de las bibliotecas.
[editar] Librerías dinámicas
Enlace dinámico significa que las subrutinas de una biblioteca son cargadas en un programa en tiempo de ejecución, en lugar ser enlazadas en en tiempo de compilación, y se mantienen como archivos independientes separados del fichero ejecutable del programa principal. El enlazador realiza una mínima cantidad de trabajo en tiempo de compilación, registra que rutinas de la biblioteca necesita el programa y el índice de nombres o números de las rutinas en la biblioteca. La mayor parte de la labor de enlazado se realiza en el momento en que la aplicación se carga (tiempo de carga o loadtime) o durante la ejecución (tiempo de ejecución o runtime). El necesario código enlazado, llamado por el cargador, es de hecho parte del sistema operativo subyacente. En el momento adecuado el cargador localiza las librerías en el disco y añade los datos relevantes de estas en el espacio de memoria del proceso.
Algunos sistemas operativos sólo pueden enlazar una biblioteca en tiempo de carga, antes de que el proceso comience su ejecución, otros son capaces de esperar hasta después de que el proceso haya empezado a ejecutarse y enlazar la biblioteca sólo cuando efectivamente se hace referencia a ella (es decir, en tiempo de ejecución). Esto último se denomina "retraso de carga". En cualquier caso, esa biblioteca es una librería enlazada dinámicamente.
El enlace dinámico, por su naturaleza, tiene tan sólo las limitaciones establecidas por las licencias de software.
Los plugins son un uso común de las bibliotecas enlazadas dinámicamente, que son especialmente útiles cuando unas bibliotecas pueden ser sustituidas por otras con una interfaz similar, pero diferente funcionalidad. Se puede decir que un software tiene una "arquitectura de plugin" si utiliza bibliotecas con una funcionalidad básica con la intención de que puedan ser sustituidas. Sin embargo, el uso de las bibliotecas enlazadas dinámicamente en la arquitectura de una aplicación no significa necesariamente que puedan ser sustituidas.
El enlace dinámico se desarrollo originalmente en los sistemas operativos Multics a partir de 1964. Se trataba de una característica del MTS (Michigan Terminal System), construido a finales de los 60.[1] En Microsoft Windows, las librerías enlazadas dinámicamente se denominan DLLs (Dynamic Linking Library).
[editar] Relocalización
[editar] Localización de librerías en tiempo de ejecución
[editar] Carga dinámica
[editar] Librerías remotas
[editar] Librerías compartidas
[editar] Librerías objeto
[editar] Identificación de librerías
[editar] Referencias
- ↑ "A History of MTS". Information Technology Digest 5 (5).

