# GLib

En informática, GLib es una biblioteca multiplataforma de funciones de propósito general implementada originalmente como parte de la biblioteca de componentes gráficos GTK.$^{:7}$ Posteriormente, GLib fue separada de GTK, de forma que pudiera ser usada también por aplicaciones sin interfaz gráfica de usuario o que no emplearan GTK para implementar dicha interfaz gráfica.

## Características

Uno de los mayores beneficios de usar GLib es que provee una interfaz de plataforma independiente que permite que el código pueda ser usado en diferentes sistemas operativos. Otro aspecto de GLib es la amplia gama de tipo de datos que deja disponible al desarrollador.
* GLib provee tipos de datos en C que usualmente se incluyen de forma estándar a otros lenguajes, como por ejemplo listas enlazadas. Otros tipos de datos básicos incluidos son colas doblemente enlazadas, árboles binarios autobalanceados, etc.
* Las cadenas de caracteres en GLib son similares a las de C++, porque son buffers de texto que crecen automáticamente cuando se agregan datos. Son fáciles de integrar a la familia de funciones printf.
* Los segmentos de memoria (memory slice) son una forma eficiente de crear secciones de memoria que tienen todos el mismo tamaño. Pueden ser usados para crear vectores aún de elementos de tamaño conocido.
* Las cachés (Hash Tables desde la versión 2.32) son usadas para compartir grandes y complejas estructuras de datos en una sencilla API, lo cual ayuda a ahorrar espacio. Se usan en GTK+ para los estilos y contextos gráficos, ya que estos objetos consumen muchos recursos.
GLib además de proporcionar varios tipos de datos, también dispone de numerosos tipos de funciones. Se encuentran funciones de manipulación de archivos, soporte de internacionalización, cadenas de caracteres, advertencias, banderas de depuración, carga dinámica de módulos, solo por nombrar algunas.
GLib maneja funciones que pueden ser llamadas cuando el microprocesador no está haciendo nada en la aplicación. También puede llamar funciones en un intervalo arbitrario de tiempo.

## Dependencias

| Biblioteca libiconv | Se necesita para usar la función iconv, la cual convierte entre diferentes codificaciones de caracteres. |
| Biblioteca libintl | Se necesita si el sistema no cuenta con la función gettext |

## Tipos de datos

GLib define tipos de datos que usan otras bibliotecas, los cuales garantizan mayor portabilidad de código.
| Tipo de dato | Descripción |
| gboolean | Tipo lógico estándar. Las variables de este tipo sólo pueden contener TRUE o FALSE. |
| gpointer | Un puntero sin tipo de datos. gpointer luce mejor y es más fácil de usar que void*. |
| gconstpointer | Un puntero sin tipo de datos. El dato apuntado no puede ser cambiado. |
| gchar | Corresponde al tipo carácter estándar de C (char). |
| guchar | Corresponde al tipo carácter sin signo estándar de C (unsigned char). |
| gint | Corresponde al tipo entero estándar de C (int). Sus valores van del rango de G_MININT a G_MAXINT. |
| guint | Corresponde al tipo entero sin signo estándar de C (unsigned int). Sus valores van del rango de 0 a G_MAXUINT. |
| gshort | Corresponde al tipo entero corto estándar de C (short). Sus valores van del rango de G_MINSHORT a G_MAXSHORT. |
| gushort | Corresponde al tipo entero corto sin signo estándar de C (unsigned short). Sus valores van del rango de 0 a G_MAXUSHORT. |
| glong | Corresponde al tipo entero largo estándar de C (long). Sus valores van del rango de G_MINLONG a G_MAXLONG. |
| gulong | Corresponde al tipo entero largo sin signo estándar de C (unsigned long). Sus valores van del rango de 0 a G_MAXULONG. |
| gint8 | Entero con signo de 8 bits en cualquier plataforma. Rango de -128 a 127. |
| guint8 | Entero sin signo de 8 bits en cualquier plataforma. Rango de 0 a 255. |
| gint16 | Entero con signo de 16 bits en cualquier plataforma. Rango de -32,768 a 32,767. |
| guint16 | Entero sin signo de 16 bits en cualquier plataforma. Rango de 0 a 65,535. |
| gint32 | Entero con signo de 32 bits en cualquier plataforma. Rango de -2,147,483,648 a 2,147,483,647. |
| guint32 | Entero sin signo de 32 bits en cualquier plataforma. Rango de 0 a 4,294,967,295. |
| gint64 | Entero con signo de 64 bits en cualquier plataforma. Rango de -9,223,372,036,854,775,808 a 9,223,372,036,854,775,807. |
| gfloat | Corresponde al tipo flotante estándar de C (float). Sus valores van del rango de -G_MAXFLOAT a G_MAXFLOAT. |
| gdouble | Corresponde al tipo flotante doble estándar de C (double). Sus valores van del rango de -G_MAXDOUBLE to G_MAXDOUBLE. |
| gsize | Valor entero sin signo resultado del operador sizeof. El tamaño de este tipo es el suficiente para almacenar un valor numérico de un puntero, en una plataforma de 32 bits utiliza 32 bits, en una plataforma de 64 bits utiliza 64 bits. |
| gssize | Variante con signo del tipo gsize. |
| goffset | Valor entero con signo que se usa para representar offsets de archivos. |