﻿id	summary	reporter	owner	description	type	status	priority	milestone	component	version	severity	resolution	keywords	cc
880	Understanding NObject	pgea@…	Víctor de Buen Remiro	"En el tique #872 se recomendaba usar NObject para comprobar de alguna manera cómo aumenta el número de objetos y poder así controlar que los objetos se destruyen correctamente.

Según he podido ir comprobando el aumento de NObject varía del siguiente modo:

'''Gramáticas por Valor'''
Para los objetos de TOL que se asignan por valor, la definición aumenta NObject en '''1'''.
Estas gramáticas son: Complex, Date, Matrix, Polyn, Ratio, Real, Text y VMatrix.

'''Gramáticas por Referencia'''
Para los objetos de TOL que se asignan por referencia, la definición aumenta NObject en '''1''', si el objeto se asigna con uno existente y en '''2''' si el objeto se asigna con una nueva definición.
Las gramáticas que cumplen esto son: Code, NameBlock y Set.
Al aumento de NObject por la creación de un NameBlock o un Set hay que añadirle el aumento por los objetos contenidos en ellos.
Ejemplos:
{{{
Code code1 = ASCII;          //> +1
Real code2 (Real x) { x };   //> +2
Set set01 = Empty;           //> +1
Set set02 = Copy(Empty);     //> +2
Set set03 = [[ Real 1 ]];    //> +3
Set set05 = set04;           //> +1
}}}

'''Gramáticas Especiales'''
Quedan dos gramáticas que se comportan distinto a las demás: TimeSet y Serie.

__TimeSet__
Según parece los TimeSet almacenan su definición de modo que cuanto más compleja sea su definición más aumentará NObject.
Por ejemplo:
{{{
TimeSet ts01 = C;             //> 1
TimeSet ts02 = D(1);          //> 3
TimeSet ts03 = D(1) * M(1);   //> 6
TimeSet ts04 = Succ(D(2), 1); //> 5
TimeSet ts05 = ts04 * M(1);   //> 4
}}}
Aunque no tengo claro como se cuenta esto.

__Serie__
Los objetos de tipo Serie son quizá los que más me confunden, podemos encontrar incluso que la copia de una serie ""ocupa"" menos que ella misma:

{{{
Real N0 = Copy(NObject);

Serie serie01 = Gaussian(10,1,C);

Real N1 = Copy(NObject);
WriteLn(""aumenta ""<<(Real N1-N0-1));
//> aumenta 5

Serie serie02 = SubSer(Gaussian(10,1,C),y2009,y2010);

Real N2 = Copy(NObject);
WriteLn(""aumenta ""<<(Real N2-N1-1));
//> aumenta 8

Serie serie03 = Copy(SubSer(Gaussian(10,1,C),y2009,y2010));

Real N3 = Copy(NObject);
WriteLn(""aumenta ""<<(Real N3-N2-1));
//> aumenta 3
}}}

"	doubt	closed	normal		Kernel		normal	fixed		
