Anuncios

Bienvenidos sean a este post, muy al principio dijimos que Lua es un programa pegamento o incrustado (embedded) esto significa que no es un paquete solitario o unico pero si una libreria que nos vincula con otras aplicaciones para incorporar las facilidades de Lua en ellas.

Anuncios

Ahora te estaras preguntando si Lua no es programa solitario como es que estuvimos usandolo hasta ahora de forma independiente en todos estos posts? La explicacion es el interprete de Lua (su ejecutable: lua5.3) porque esta pequeña aplicacion (menos de 400 lineas de codigo) que usa la libreria de Lua para implementar al interprete.

Anuncios

Este programa maneja la interfaz con el usuario, tomando los archivos y cadenas para enviarlos a la libreria la cual hace el trabajo duro, esta habilidad para ser usada como una libreria para extender una aplicacion es lo que hace a Lua un lenguaje de extension, al mismo tiempo un programa que usa Lua puede registrar nuevas funciones en el entorno de Lua, tales funciones son implementadas en otro lenguaje (por ejemplo C) dando la posibilidad de poder agregar facilidades que no se pueden escribir directamente en Lua, esto es lo que convierte a Lua en un programa extensible.

Anuncios

Estas dos visiones de Lua (Lenguaje de extension y lenguaje extensible) corresponden a los tipos de interaccion entre C y Lua, en el primer tipo: C tiene el control y Lua es la libreria, el codigo C en esta interaccion es lo que llamamos codigo de aplicacion; en el segundo tipo: Lua tiene el control y C es la libreria, para este caso el codigo de C es llamado codigo de libreria, ambos codigos (aplicacion y libreria) usan la misma API para comunicarse con Lua, la asi llamada API de C.

Anuncios
Anuncios

Esta API es un conjunto de instrucciones que nos permite interactuar con Lua, comprende funciones para leer y escribir variables globales de Lua, llamar funciones de Lua, correr pedazos de codigo de Lua, registrar funciones de C para que puedan ser llamadas despues por el codigo de Lua y asi, en este caso a lo que llamamos funcion en realidad es una funcion o una macro ya que la API implementa muchas facilidades como macros.

Anuncios

Esta API sigue el modus operandi de C, el cual es muy distinto de Lua, cuando se programa en C se debe tener cuidado con el tipo de dato (y tipo de error), recuperacion del error, errores de ubicacion en memoria y muchas otras fuentes de complejidad, la mayoria de las funciones en la API no chequean si sus argumentos son correctos o no porque es una responsabilidad del programador verificar que los argumentos son validos antes de llamar a la funcion, si cometes un error obtendras un error de “falta de segmentacion” o similares, en lugar de un mensaje de error concreto, ademas la API enfatiza algunas veces la flexibilidad y simplicidad al costo de la facilidad de uso, asi que tareas comunes pueden desembocar en muchas llamadas de API lo cual puede ser aburrido pero te da control total sobre todos los detalles.

Anuncios

Un gran componente en la comunicacion entre Lua y C es una pila (stack) virtual omnipresente, casi todas las llamadas de la API operan en valores sobre la pila, todo el intercambio de datos de Lua a C y de C a Lua ocurre a traves de esta pila, ademas nos da la posibilidad de mantener resultados intermedios, la pila nos soluciona dos problemas entre Lua y C:

  • el primero es causado por Lua haciendo la recoleccion de basura, en cambio C requiere desasignacion explicita
  • el segundo caso ocurre por el encontronazo entre el tipo dinamico de Lua y el tipo estatico de C pero sobre esto ahondaremos mas adelante
Anuncios

Si bien esto trato de ser un resumen para lo que se viene e iremos paso a paso para poder hacer una correcta implementacion de la API en nuestros codigos asi que les pido que no se tiren por la ventana si llegaron hasta aca y tampoco se enloquezcan con los detalles que no comprendemos, por eso les pido un poco de paciencia que en los proximos dias iremos descubriendo el verdadero potencial de Lua, espero les haya sido util sigueme en Twitter o Facebook para recibir una notificacion cada vez que subo un nuevo post en este blog, nos vemos en el proximo post.

Tengo un Patreon donde podes acceder de manera exclusiva a material para este blog antes de ser publicado, sigue los pasos del link para saber como.

Tambien podes donar

Es para mantenimiento del sitio, gracias!

$1.00