Crear y usar Librerías

Las librerías Gambas son ejecutables Gambas que pueden ser utilizados por un proyecto casi exactamente como un componente.

Introducción

Son útiles, tan pronto como se escribe proyectos más grandes o un incluso un par de proyectos que tienen algunas funciones u objetos en común. Están disponibles desde Gambas 3.1, sin embargo desde 3.2 es que se acentúa dicha diferencia respecto los componentes.

Lo mas parecido a las librerías gambas es los submodulos git con la salvedad que estas no son compartidas como instancias (que es independiente del sistema) sino archivos ejecutables reales en el sistema (lo cual depende del sistema de archivos), esto implica una ruta establecida.


Formalidades

  • Las librerías deben hacerse para sus propias rutinas especificas a compartir, y deben/pueden ser distribuidas con sus proyectos.

  • Componentes son extensiones al lenguaje de Gambas, y deben/pueden ser distribuidas con el código fuente de gambas.

Desde 3.1


Rutas de búsqueda

Cuando se ejecuta un proyecto que depende de una biblioteca, desde la versión 3.2 la biblioteca ejecutable se busca en varias rutas en vez de una establecida, estas son en el siguiente orden:

Orden Ruta Observación
1. <project executable directory>/<name>.gambas Para compatibilidad versiones viejas
2. $XDG_DATA_HOME/gambas3/lib/<vendor>/<name>:<version>.gambas Si $XDG_DATA_HOME esta definido.
3. ~/.local/share/gambas3/lib/<vendor>/<name>:<version>.gambas Si $XDG_DATA_HOME no esta definido.
4. <project extra archive directory>/<vendor>/<name>:<version>.gambas El directorio extra de archivos del proyecto es una propiedad de proyecto definida en la pestaña Libreria del diálogo de propiedades del proyecto.
5. /usr/lib[/multiarch]/gambas3/<vendor>/<name>:<version>.gambas Los paquetes de biblioteca binaria se instalan allí de forma predeterminada y están disponibles en todo el sistema (importante para equipos multiusuario). multiarch depende de la distribución, en las basadas en Debian depende de su implementación, revise Debian Multiarch
6. /usr/bin/<vendor>/<name>.gambas programas ejecutables pueden ser usados como librerías. Pero no es permitido ni estandar en LSB.

La primera y ultima son usadas para compatibilidad a versiones mas antiguas.

Las locaciones "2" y "3" son para ámbito de usuario únicamente. Las librerías son instaladas automáticamente en esta forma "ambito-usuario-solamente" cuando se fabrica un ejecutable gambas de dichas fuentes, o cuando se instala una librería desde la Granja Gambas.
Este "ambito-usuario-solamente" es realmente útil al usuario actual, ya que le permite (el desarrollador y/o probador) utilizar la última, es decir, su versión "inestable" en lugar de tener que aplastar el sistema con versiones de prueba y sustituir la versión "estable" instalada.

Top

¿Cómo hacer un proyecto tipo biblioteca o librería?

Basta con crear un proyecto normal de Gambas. En el diálogo de propiedades del proyecto, seleccione Biblioteca como el tipo de proyecto. Rellene el nombre del proveedor (¡importante!) sin espacios ni caracteres extraños.

Sólo las clases marcadas con el palabra reservada EXPORT serán exportados y visible para el proyecto que implementara esa biblioteca o librería.

A continuación, hacer el ejecutable del proyecto. El ejecutable se instalará en la ruta (3).

Top

Cómo utilizar una biblioteca o librería en un proyecto?

Abrir otro proyecto. Abra la propiedad del proyecto de diálogo e ir a la pestaña Libreria. Asi puede añadir desde las bibliotecas instaladas o adicionar una en particular desde la raíz del proyecto.

Si utiliza una biblioteca que depende de otra biblioteca, tendrá que definir el orden correcto en que las bibliotecas serán cargados desde la parte superior (primera) a abajo (última). Primero las Librerías que no dependen de otras obviamente.

Similar comportamiento debe realizarse para los componentes de los cuales depende cada librería.

Top

Cómo instalar una biblioteca del sistema?

Crear un paquete de instalación de su biblioteca (Ctrl-Alt-I) como lo haría con un proyecto normal. Instalar este paquete en el equipo de destino. La biblioteca habrá instalarse en la ruta (5).

Para las distribuciones que no soporten o no se tenga un formato de paquete, simplemente crear un ejecutable gambas y colocarlo en la ruta especifica (2) y/o (3) en el sistema operativo destino.

Tenga en cuenta que el orden de búsqueda siempre preferirá la versión en el directorio personal del usuario (rutas 2 y 3) sobre el del sistema (ruta 5). Así que, cuando haya terminado la prueba, asegúrese de eliminar la copia o libreria colocada por usuario, es decir local o en las rutas (2) y/o (3).

Top

Cómo probar una biblioteca?

Puede implementar pruebas para su biblioteca dentro de sí mismo. Esto no causa mayores porque recuerde, sólo las clases marcadas con EXPORT son visibles (expuesta) para el proyecto que implemente o utilice la biblioteca o librería. Por lo tanto dentro del propio proyecto de biblioteca puede incluir clases o módulos para probar las características de su biblioteca ya que al no tener la palabra reservada EXPORT no están expuestas y no serán visible o tomadas en cuenta al implementarse la libreria.

Top

Tópicos avanzados

Acceso a archivos mediante rutas relativas

A veces puede que desee acceder a un archivo usando una ruta relativa . Pero en el que ejecutable? El ejecutable Libreria o el ejecutable para el proyecto utilizando la Libreria. Para acceder a un archivo en la propia Libreria ejecutable, se debe comenzar la ruta relativa a la secuencia "./." si necesita acceder a un archivo que se encuentra en el proyecto principal debe iniciar su ruta relativa por el "../" en la secuencia.

dependencias de bibliotecas

"Iniciar" o arranque prematuro de librerías

De vez en cuando, puede requerir la biblioteca para hacer algo de procesamiento automático de "puesta en marcha" cuando se carga o inicia el principal proyecto que se ejecuta. Es decir, la Librería tiene que hacer algo, incluso antes de que su principal proyecto intenta utilizar una de sus características expuestas.

Una forma de lograr esto es exponer una rutina exigible (por ejemplo un método de "run" en un módulo exportado) para que el programa principal se puede llamar a este método antes de que se utiliza ningún características más útiles. Una vez hecho esto algunas veces puede llegar a ser evidente que esto es doloroso ... usted tiene que hacer esa llamada en cualquier cosa en su proyecto principal que podría ser el "primero" de usuario de la biblioteca y además es probable que tenga para mantener realizar un seguimiento dentro de la biblioteca en cuanto a si la puesta en marcha se ha hecho o no, etc, etc.

Hay una mejor manera. Se va a pasar de forma automática y con independencia de su lógica principal de ejecución del proyecto. :. ?