#948 closed defect (remind)
Mecanismo sintáctico de restricción de paquetes
Reported by: | Víctor de Buen Remiro | Owned by: | Víctor de Buen Remiro |
---|---|---|---|
Priority: | highest | Milestone: | TOL Packages |
Component: | Kernel | Version: | |
Severity: | blocker | Keywords: | |
Cc: | Pedro Gea |
Description
Los paquetes en TOL requieren que el NameBlock principal tenga una serie de miembros y métodos pero no hay actualmente ningún mecanismo que lo asegure antes de su publicación.
En función del resultado del ticket #947 hay que decidir si hacer los paquetes instancias de una clase base o de herencias ad-hoc o dejarlo como está, y que sea el TolPackage::Builder el que compruebe que está todo como debe ser.
Change History (4)
comment:1 Changed 15 years ago by
Cc: | Pedro Gea added |
---|---|
Status: | new → accepted |
comment:2 Changed 15 years ago by
comment:3 Changed 15 years ago by
Resolution: | → remind |
---|---|
Status: | accepted → closed |
En lugar de _.autodoc
se ha usado el prefijo _.pkgdoc
con lo que se ha solucionado el problema anterior.
Sin embargo ha aparecido otro problema distinto mucho más grave: no se pueden declarar tipos dentro de una istancia de clase, ni Struct ni Class
ERROR: [9] Sintaxis incorrecta en declaración de miembro Struct @BysInf.Report.Config(Real raftery.diag.q_, Real raftery.diag.r_, Real raftery.diag.s_, Real raftery.diag.eps_, Real acf.lag_, Real histogram.parts_, Real kerDens.points_) de Class BysMcmc ERROR: [10] Sintaxis errónea en el área de de miembros de declaración de [[ ]] Warning: [1] NameBlock BysMcmc se ha construido con 2 errores. ERROR: [11] BysMcmc no se pudo crear.
Esta es una característica irrenunciable de los paquetes por lo que el cambio debería venir de ampliar las capacidades sintácticas de las clases. Para poder meter declaraciones en las instancias tendría que hacer cambios nada triviales. El problema es que de cada miembro lo único que se tiene a la hora de crear la clase es el trozo de árbol sintáctico que devuelve el parser con lo que cada cosa admisible tiene que tener su propio reconocedor que recorra esos árboles demenciales. El código ya es casi ilegible para mí por lo que intentar meter Struct y Class dentro de Class llevaría bastante esfuerzo, mucho más de lo que podemos soportar ahora mismo.
Por lo tanto la única solución viable por el momento es que sea el constructor de paquetes el que compruebe que están todos los miembros y métodos necesarios, para asegurar que al cliente le llegan paquetes correctos.
Tras la resolución positiva del ticket #947 se ha intentado crear un paquete como instancia de la clase
pero da los siguientes errores
El motivo es que los miembros especiales de documentación que son los que comienzan por _.autodoc. se consideran como estáticos incluso aunque no se declaren como tales porque no tiene mucho sentido que signifique una cosa distinta en cada instancia y de este modo se ahorra mucha memoria.
Para poder hacer los paquetes como instancias de clase simplemente habría que sustituir los prefijos
_.autodoc.
por otro cualquiera como_.package.