ventajas


Las ventajas que aportan los NameBlock's se pueden resumir en que da facilidades para alcanzar mayor modularidad, mejor organización y legibilidad y mayor reusabilidad del código.

Modularidad

La principal utilidad del NameBlock es dotar a TOL de un mecanismo de modularidad más allá del fichero que permita construir módulos, paquetes y librerías robustamente organizados. Una forma prudente de anidar los NameBlock's sería en este caso: lib_id::package_id::module_id

Legibilidad
Pero un NameBlock podría también ayudar a la legibilidad del código en tareas más humildes, al sustituir llamadas a set[num_field] por set::name_field sin el coste computacional añadido de set["name_field"] y sin tener que definir estructuras de datos espúreas para usar set->name_field

Eliminación de variables globales
Un caso especialmente recomendable es el que afecta a todos los parámetros de configuración y variables globales en general que deberían incluirse dentro de un único NameBlock global para evitar colisiones de nombres.

//Parámetros de configuración del proyecto
NameBlock cfg = 
[[
//Configuración del acceso a la base de datos
  NameBlock db   = [[Text alias, Text user, Text pwd, Text host, ...]],
//Configuración de los directorios más utilizados
  NameBlock path = [[Text source, Text data, Text log, ...]],
  ...
]];
Real DBOpen(cfg::db::alias, cfg::db::user, cfg::db::pwd);
Flexibilidad
Las funciones que devuelven conjuntos heterogéneos también ganarían flexibilidad, expresibilidad y facilidad de mantenimiento y uso sin recurrir a la definición de estructuras locales

NameBlock my_stats(Serie ser)
{[[
  Real num  = CountS (ser);
  Real avg  = AvrS(ser);
  Real stdv = StDsS(ser)   
]]};

NameBlock stats = my_stats(SubSer(Gaussian(0,1,C),y2000,y2000m12d31));
Real stats::stdv;

Aunque se añadan elementos a lo que devuelve la función o se reordenen los mismos seguirá funcionando el código que usara esta función accediendo con :: mientras no se cambien los nombres:

NameBlock my_stats(Serie ser)
{[[
  Real num  = CountS (ser);
  Real avg  = AvrS(ser);
  Real mdn  = MedianS(ser);
  Real stdv = StDsS(ser)    
]]};