Anuncios

Bienvenidos sean a este post, continuando con las tecnicas para escribir funciones de C hoy veremos como almacenar el estado en las funciones.

Anuncios

Porque habitualmente las funciones de C necesitan mantener algun dato no local, es decir que unos datos sobrevivan a su invocacion, en C usamos variables globales o estaticos para esta necesidad, cuando estas programando funciones de libreria para Lua, variables globales y estaticas no son un buen enfoque, primero no puedes almacenar un valor generico de Lua en una variable de C, segundo una libreria que usa tales variables no puede ser usado en multiples estados de Lua.

Anuncios

Una funcion de Lua tiene tiene tres lugares basicos para almacenar datos no locales:

  • Variables globales
  • Entornos de funciones
  • Variables no locales
Anuncios

La API de C tambien ofrece tres lugares basicos para almacenar datos no locales:

  • El registro
  • Entornos
  • Upvalues
Anuncios

El registro es una tabla global que pueden ser accedida solo por el codigo C, usualmente se usa para almacenar informacion para ser compartida entre varios modulos, si se necesita almacenar datos privados a un modulo deberias usar entornos, al igual que una funcion de Lua cada funcion de C tiene su propia tabla de entorno, es habitual que todas las funciones en un modulo compartan la misma tabla de entorno asi ellas pueden compartir datos entre si, por ultimo una funcion de C puede tener tambien upvalues, las cuales son valores de Lua asociados a esa funcion particular, no se preocupen por esto porque en los proximos posts hablaremos mas en detalle sobre cada uno de lellos.

En resumen, hoy hemos visto una introduccion de como almacenar estados en funciones de C, las tecnicas que se usan en Lua, las tecnicas que usa la API, una breve explicacion de estas tres tecnicas, espero les haya sido util sigueme en tumblr, Twitter o Facebook para recibir una notificacion cada vez que subo un nuevo post en este blog, nos vemos en el proximo post.

Anuncios

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