Construir un proyecto C++ con Gradle

Introducción

La construcción, gestión de dependencias y distribución de mis proyectos es algo que cada vez me preocupa más, me gustaría encontrar una herramienta que unificara este proceso y fuese independiente del lenguaje, lo más parecido con lo que he trabajado ha sido SCons, Autotools, Ant, Maven y últimamente Gradle.

Llevo un tiempo haciendo algunas cosas con Gradle, pero siempre centrado en proyectos Java utilizándolo como reemplazo a Maven, porque que es más sencillo de usar y más rápido. También lo he utilizado en projectos Android y he sufrido la pareja Android Studio + Gradle en sus primeros matrimonios (porque yo he querido), actualmente está todo mucho más documentado y funciona muy bien.

Antes de nada hay que decir que la construcción de proyectos C/C++ y Objective-C con Gradle se encuentra en fase de incubación, aunque ya permite hacer algunas tareas avanzadas como:

  • Generación de múltiples artefactos dentro del mismo proyecto, esto es varias librerías o ejecutables.
  • Gestionar las dependencias entre estos artefactos (sin versiones).
  • Generar distintos “sabores” de aplicaciones, por ejemplo: podremos generar una aplicación “Community” y otra con más características habilitadas llamada “Enterprise”.
  • Permite generar binarios para distintas plataformas, esto depende de las cadenas de herramientas ( Toolchains ) que tengamos instaladas en la máquina de compilación.

Como decía todavía tiene limitaciones, aunque están trabajando en ello y si consiguen lo que tienen planeado dejaré Autotools (me arrepentiré de haber dicho esto).

Leer más…

Bases de Datos Embebidas Java: Comparación de Rendimiento

Bases de datos embebidas

Se trata de bases de datos que carecen de servidor, están inscrustadas en la propia aplicación y suelen estar almacenadas en ficheros locales. Esto último unido a que suelen tener un modo de funcionamiento en el que mantienen los datos en memoria hace que puedan tener un rendimiento muy alto.

Eso sí, este gran grado acoplamiento a la aplicación, hace que tengan peor rendimiento cuando se comparten entre varias aplicaciones debido a colisiones de acceso.

Otra ventaja es que no tenemos que encargarnos de mantener y gestionar un servidor de bases de datos.

Voy a hacer una comparativa de rendimiento entre 3 bases de datos embebidas ACID (transaccionales), las NoSQL no entran en esta comparativa que están en otra liga de rendimiento.

Leer más…

Distintas formas de serialización en Java: Comparación de rendimiento

Hace poco, he tenido que serializar/deserializar unos datos en Java, hacía mucho que no lo hacía en formato binario directamente (ultimamente he utilizado JSON o XML). Recordaba haber serializado objetos implementando el interfaz Serializable, pero había visto por Internet otra forma implementando el interfaz Externalizable, ¿cuál interfaz utilizo? Pues depende lo que quieras y necesites, como todo.

Leer más…

Mutex C++

En C++11 se han introducido muchas mejoras que nos ayudan a desarrollar sistemas multi-hilo. Voy a centrarme en los mutex.

En las versiones anteriores a C++11 una forma de obtener un mutex es el que nos proporciona la librería pthread, pero para utilizarlo debíabos inicializarlo y destruirlo en estilo C, en definitiva, tienes que hacer algo más que lock/unlock cada vez que trabajas con un mutex.

C++11 nos proporciona una clase mutex, que nos abstrae de cosas que no son lock/unclock. Os recomiendo que echéis un vistazo y veáis lo limpio que queda el código: Clase mutex de C++11.

Si sigues trabajando con versiones de compiladores previos a C++11, hace tiempo me hice un wrapper que te ayuda a abstraerte del mutex de pthread, lo dejo aquí abajo por si a alguien le resulta útil.

Abajo está un Gist del Código, he vuelto a escribir el código de cabeza y puede ser que haya algún error, lo revisaré, pero lo importante es la idea de hacer una clase que envuelva la inicialización del mutex de pthread.

Leer más…