Couchbase Lite está disponible desde 2014 y se dirige a las plataformas iOS, Android y .NET, y de forma secundaria a macOS y Windows. Para ello, hemos expuesto API en los lenguajes preferidos de esas plataformas: Java, Objective-C, Swift y C#.

Pero seguro que hay otros usos para un base de datos NoSQL integrada con las mejores capacidades de sincronización de su clase. Es ideal para el emergente Internet de las Cosas; los desarrolladores han venido a nosotros queriendo ejecutar Couchbase Lite en placas Linux embebidas como la Raspberry Pi. Otros nos han pedido bindings a más lenguajes como Python o Go.

Couchbase Lite For C

Me complace decir que estamos dando pasos hacia estos casos de uso, introduciendo Couchbase Lite para C. Esta es una implementación completa de Couchbase Lite con:

  • Una API ANSI C cuya funciones son en su mayoría compatibles uno a uno con los métodos de la clase API de Couchbase Lite 2.x. Algunos detalles son necesariamente diferentes porque C no viene con gestión automática de memoria o estructuras de datos de colección, pero si estás acostumbrado a las APIs existentes deberías estar como en casa - ver algunas pequeños ejemplos de código. También existe una API C++, implementada como una envoltura de la API C.
  • No depende de un tiempo de ejecución de alto nivel como .NET o JVM, ni de una gran biblioteca de clases propietaria como Cocoa.
  • Dependencias mínimas del sistema operativo. Debería funcionar en cualquier sistema operativo tipo Unix (o MS Windows reciente); sólo necesita un sistema de archivos, una biblioteca estándar C++ y una red TCP/IP para el replicador.
  • Necesidades de hardware modestas: piensa en Raspberry Pi (pero no en Arduino). Eso significa decenas de megabytes de RAM disponible, cientos de MHz de CPU y suficiente almacenamiento persistente para tu base de datos.
  • Código fuente completo bajo un Licencia Apache 2como los otros sabores de Couchbase Lite. (Edición para empresas disponibles bajo un licencia comercialfuente cerrada).

¿Cuál es el truco? Aún no está terminado: se trata de un acceso anticipado a un proyecto de calidad alfa. Para más información, consulta la sección "Planes de futuro".

...Y Para Otras Lenguas

Couchbase Lite For C ayudará a llevar Couchbase Lite a otros lenguajes y plataformas. C es un lingua francapor lo que todos los lenguajes tienen herramientas para enlazar con APIs en C. Esto hace que sea fácil escribir el pegamento necesario para llamar a Couchbase Lite, y luego crear una API idiomática encima de eso. Como prueba de concepto, incluimos un archivo Enlace a Python 3 en el mismo repositorio de Github.

La API de C se ha diseñado para que sea fácil de enlazar. Está tan orientada a objetos como es posible, con nombres de función regulares que concatenan el nombre de la "clase" y del "método". Los "objetos" se cuentan por referencias, para que sean fáciles de gestionar desde un tiempo de ejecución con basura. Opcionalmente, se puede acceder a las propiedades de un documento como una cadena JSON si es más sencillo utilizar el analizador JSON de su lenguaje. Incluso hemos dado al código cliente la capacidad de programar cuándo y dónde se invocan las llamadas de retorno de las notificaciones, para que puedas adaptarte a cualquier modelo de concurrencia que admita tu lenguaje (o sistema operativo).

Arquitectura

La API en C para Couchbase Lite es una extensión directa de nuestra arquitectura 2.x. Para el lanzamiento de la versión 2.0 en 2018 reimplementamos Couchbase Lite con un componente central agnóstico de la plataforma escrito en C++. Este núcleo proporciona una API C (no pública) a la que se unen las distintas implementaciones de Couchbase Lite, exponiendo sus propias API públicas en Java, C#, Swift u Objective-C.

Para este nuevo proyecto hemos escrito un adaptador (de nuevo en C++) que en su mayor parte sólo remodela la API interna en C para hacerla más clara, fácil de usar y conforme a nuestra especificación de API multiplataforma. Este adaptador está enlazado estáticamente con la biblioteca central para producir un único binario.

Diagrama de arquitectura que muestra la estratificación de Couchbase Lite para C

Este adaptador es bastante simple: hasta ahora tiene menos de 2.000 líneas de C/C++ incluyendo las cabeceras. La mayor parte de la funcionalidad proviene de Couchbase Lite Core, que ya ha sido probado durante un año en dos plataformas basadas en Unix (Android y Darwin) y Windows. Así que el desarrollo de la API en C es bastante sencillo, lo que nos permite dedicar más trabajo a la portabilidad.

Planes de futuro

Couchbase Lite For C está en desarrollo activo, pero aún no está terminado. Te estamos dando acceso temprano a un proyecto de calidad alfa. Las APIs son bastante sólidas, pero algunas funcionalidades no están conectadas; ha habido pocas pruebas; y aún no lo hemos portado más allá de macOS, Windows y Ubuntu. Aún no es un producto oficial y no ofreceremos soporte comercial hasta que esté completo y sea de alta calidad.

La ponemos a disposición ahora porque sabemos que hay demanda (¡unos cuantos desarrolladores intrépidos ya han recurrido a explorar nuestras API internas en C!) y porque nos vendría bien ayuda para terminarla:

  • El panorama de las plataformas integradas está notablemente fragmentado en comparación con el de los móviles, los ordenadores de sobremesa o los servidores. No tenemos todas las placas de desarrollo IoT ni todas las distribuciones Linux integradas. El soporte multiplataforma para código de bajo nivel puede ser complicado, especialmente con múltiples compiladores (Clang, GCC, MSVC) en la mezcla. También hay algunas aplicaciones exóticas que no son UNIX sistemas operativos en el espacio integrado, como VxWorks, QNX, RIOT...
  • Las pruebas en entornos con recursos limitados pueden ser todo un reto. Los errores por falta de memoria existen. El consumo de energía suele ser muy importante. Y conectar un depurador de código fuente puede ser complicado. Pero como dijo Eric Raymond, "con suficientes ojos, todos los errores son superficiales".

Cómo contribuir

El trabajo de desarrollo es continuo y abierto, y los commits se envían directamente al repositorio de Github. Te animamos a que nos envíes informes de errores, sugerencias y pull requests. (Si quieres contribuir, lee nuestro directrices primero). Esperamos que te unas a nosotros para llevar Couchbase Lite a más plataformas e idiomas que nunca.

Autor

Publicado por Jens Alfke, Arquitecto móvil, Couchbase

Jens Alfke es Arquitecto Móvil en Couchbase. Antes de unirse a Couchbase, Jens ha trabajado en Apple y (brevemente) en Google. Jens toca la guitarra.

Dejar una respuesta