PseudoD 2.2.0 ahora incluye también un mecanismo llamado resolución de nombres, también conocido como desreferenciación en línea o nombres resueltos. Esta característica permite al desarrollador dejar de usar las molestas clases PunteroInteligente y Referencia, ahorrando tiempo y recursos para tareas más importantes. En resumen, ahora puedes resolver un nombre sin la necesidad de llamar a funciones externas o utilizar módulos del NEA. Pero primero: ¿Como se resuelve un nombre?
Un nombre resuelto es aquel que puede acceder de por si solo a una dirección de memoria virtual (de PseudoD) válida: Si, PseudoD no almacena la memoria en direcciones crudas (por ejemplo: void* en C y C++) sino en direcciones virtuales, por ello, incrementar un puntero siempre devolverá dos valores: o un puntero válido a otra variable de PseudoD, o un error (memory underflow/overflow).
Algunos nombres resueltos son: mensaje, NULO y foo#bar. La definición de un nombre sin resolver es un poco más complicada: un nombre sin resolver es aquel que contenga los caracteres < y >. Estos poseen un significado especial desde PseudoD 2.2.0: se evalúa la variable o puntero y se reemplaza su valor, por ejemplo: si la variable desref posee el valor {mensaje} y la variable mensaje posee el valor {Hola Mundo} entonces el nombre <desref> se evalúa como {Hola Mundo}. El NIA se encarga de realizar esta traducción de forma trasparente:
Y esto no solo funciona con referencias: ¡también con punteros! Esto hace innecesarias las clases Referencia y PunteroInteligente dado que ahora el código luce así:
Y gracias a esto PseudoD ahora es más legible y eficiente.
Un nombre resuelto es aquel que puede acceder de por si solo a una dirección de memoria virtual (de PseudoD) válida: Si, PseudoD no almacena la memoria en direcciones crudas (por ejemplo: void* en C y C++) sino en direcciones virtuales, por ello, incrementar un puntero siempre devolverá dos valores: o un puntero válido a otra variable de PseudoD, o un error (memory underflow/overflow).
Algunos nombres resueltos son: mensaje, NULO y foo#bar. La definición de un nombre sin resolver es un poco más complicada: un nombre sin resolver es aquel que contenga los caracteres < y >. Estos poseen un significado especial desde PseudoD 2.2.0: se evalúa la variable o puntero y se reemplaza su valor, por ejemplo: si la variable desref posee el valor {mensaje} y la variable mensaje posee el valor {Hola Mundo} entonces el nombre <desref> se evalúa como {Hola Mundo}. El NIA se encarga de realizar esta traducción de forma trasparente:
adquirir ref
adquirir val
fijar ref a val#NOMBRE
fijar val a {Hola!}
escribir
nl
[ Escribe: Hola! ]
Y esto no solo funciona con referencias: ¡también con punteros! Esto hace innecesarias las clases Referencia y PunteroInteligente dado que ahora el código luce así:
[ Nuevo método ]
utilizar entsal.pseudo
clase Persona
:decirHola
nombre
apellido
finclase
heredar Objeto Persona
funcion Persona#decirHola
adquirir yo
recibir_parametro yo
llamar ImprimirLinea
{¡Hola! yo soy}
<yo>#nombre
<yo>#apellido
NULO
finargs
liberar yo
finfun
instancia Persona johnDoe
instancia Persona allice
fijar johnDoe#nombre a {John}
fijar johnDoe#apellido a {Doe}
fijar allice#nombre a {Allice}
fijar allice#apellido a {Mallory}
llamar johnDoe#decirHola finargs
llamar allice#decirHola finargs
[ Viejo método ]
utilizar entsal.pseudo
utilizar tipos.pseudo [ TODO: necesario ]
clase Persona
:decirHola
nombre
apellido
finclase
heredar Objeto Persona
funcion Persona#decirHola
instancia Referencia yo
recibir_parametro yo#ref
llamar ImprimirLinea
{¡Hola! yo soy}
llamar yo#obtenerAttr {nombre} finargs
llamar yo#obtenerAttr {apellido} finargs
finargs
liberar yo
finfun
instancia Persona johnDoe
instancia Persona allice
fijar johnDoe#nombre a {John}
fijar johnDoe#apellido a {Doe}
fijar allice#nombre a {Allice}
fijar allice#apellido a {Mallory}
llamar johnDoe#decirHola finargs
llamar allice#decirHola finargs
Y gracias a esto PseudoD ahora es más legible y eficiente.
Comentarios
Publicar un comentario