Ir al contenido principal

Desreferenciación en línea

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:

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

Entradas más populares de este blog

Punteros y referencias

 PseudoD hace énfasis en las diferencias entre punteros y referencias. Este articulo esta dedicado a mostrar y explicar estas diferencias (incluye ejemplos). Para comenzar, vamos a asumir que al inicio de todos los ejemplos de ejecutó el siguiente código: adquirir variable1 adquirir variable2 adquirir variable3 ¿Muy sencillo no? luego de esto, la memoria de PseudoD queda similar a: Memoria después de tres adquisiciones de memoria Claro, esto es ignorando las variables de la BEPD y del núcleo las cuales, en PseudoD 1.9.5 (no pro bado en versiones recientes) er an de , aproximadamente, ~526 bloques (esto incluyen d o toda la BEPD, nosotros solo utilizaremos lo autoincl uido ). Primero: ¿Que es un puntero? Un puntero (se cción no-normativa , válida solo en PseudoD ) es un bloque de memoria que en vez de poseer un valor propio (como variable1 posee {Hola} en la imagen superior) posee un índice de acceso rápido a otra variable, por ende, cada vez que se acceda al punt

Futuro PseudoD 2.2.0

La futura versión de PseudoD, PseudoD 2.2.0 tendrá cambios fundamentales en la estructura del lenguaje, más estos cambios serán compatibles con versiones anteriores, de manera que no romperán con la estructura de ningún programa existente. Los cambios son: Resolución de nombres Ahora usar referencias es más cómodo que nunca con la resolución de nombres de PseudoD 2.2.0: adquirir var fijar var a {Hola Mundo} adquirir ref fijar ref a var#NOMBRE escribir <ref> Este código imprime en pantalla el texto "Hola Mundo". Mejor sintaxis para las clases y funciones clase Persona hereda Objeto implementa @Saludable atributo nombre puntero padre puntero madre metodo saludar finclase metodo Persona#saludar con yo y nombre escribir {Hola } escribir nombre escribir {, yo soy } escribir <yo>#nombre nl finmetodo Reestructuración de la BEPD parte 1/2 Ahora la BEPD posee una mejor estrucutra y nuevas funciones.

Paginas oficiales

Como primera entrada, voy a dejar una lista de enlaces a las páginas oficiales de PseudoD: http://www.pseudod.com : página oficial de PseudoD. http://www.pseudod.com/wiki/ : wiki oficial de PseudoD. http://www.pseudod.sourceforge.net/ : página de desarrolladores. http://www.sourceforge.net/p/pseudod : proyecto en sourceforge. http://www.github.com/alinarezrangel/pseudod : proyecto en github. En estas páginas se encuentra gran parte de la documentación del lenguaje.