Igual creo que lo que el gallego plantea, es que los floats los instancia
la VM (mediante alguna primitiva) no tenes chances de evitarlos.

Osea... si tenes 1000 operaciones que multiplican por un float, por más que
la parte decimal de esos resultados sea cero, y por lo tanto un
SmallInteger podría cubrir la necesidad de representación, la VM va a
instanciar los 1000 floats.

Creo que dado el caso de dolphin, no podes parchear la VM ni el compiler.

Saludos.

Esteban A. Maringolo


El 3 de mayo de 2012 15:57, Smalltalk <[email protected]> escribió:

> GallegO,
>
> Lo que hice hace un tiempo con el UML Almighty fue usar una LookupTable con
> el Float printString como Key y el Float como value.
> Si definis la presicion de X después del coma no hay problema. No se lo
> podes aplicar a tu caso.
> Seria algo asi:
>
> cache: aFloat
>
>        ^floatCache at: aFloat printString ifAbsent: [floatCache at: aFloat
> printString put: aFloat. aFloat]
>
> Se puede poner:
> cache: aFloat presicion: anInteger
>        ^floatCache at: (aFloat printString first: anInteger) ifAbsent:
> [floatCache at: aFloat printString put: aFloat. aFloat]
>
> Lo malo de este encare es si tenes los cálculos distribuidos, hay que
> modificar mucho para integrarlo.
>
> Es bastante sencillo pero me fue muy útil.
>
> Saludos,
> Bruno
>
>
>
> -----Mensaje original-----
> De: [email protected] [mailto:[email protected]]
> En nombre de GallegO
> Enviado el: Thursday, May 03, 2012 3:37 PM
> Para: [email protected]
> Asunto: Re: [clubSmalltalk] Re: Muchos aFloat
>
> Marcelo:
>
> Te copio un pedazo de algo que había puesto en otro mail:
>
> "Pero el problema que tengo es en unos objetos que calculamos en
> memoria para un periodo x de tiempo. Por ejemplo calcular la
> producción de 30 dias de 5000 pozos, suponiendo que cada producción
> tiene 20 valores numericos que mantiene en variables de instancia, eso
> te da unos 3 millones de instancias de Float."
>
>
> Es decir, el problema no es con lo que viene de la BD, eso lo manejo
> de taquito, el tema es con lo que calculo en memoria, por ejemplo:
>
> | oc |
> oc := OrderedCollection new.
> 10000000 timesRepeat: [oc add: 1 * 0.0].
>
> Saludos
>  Gallego
>
> El día 3 de mayo de 2012 15:24, Juan <[email protected]>
> escribió:
> > gallego
> >
> > Si me llegan tus email. de hecho contesto,
> > che entonces si lo haces asi no deberia haber mas que un solo 0.0.
> > digo el metodo que llame ceroFloat es una variable de clase en algun lado
> > lo guardas y en el ifTrue: lo devolves ,no podrias tener mas de uno con
> > value 0.0
> > Por ahi .¿estoy comentiendo algun error, no se decime :)
> > salu2
> > jmdc.
> >
> >
> >
> > 2012/5/3 GallegO <[email protected]>
> >>
> >> Hola Marcelo :
> >>
> >> no te llegan mis mails?
> >> Si, digo que para lo que viene de la BD ya lo hago asi, y estoy muy
> >> contento :)
> >>
> >>
> >> Saludos
> >>
> >> El día 3 de mayo de 2012 15:18, Juan <[email protected]>
> >> escribió:
> >> > Galllego
> >> >
> >> > pero se me ocurre algo re facil. quizas bobo, pero ahi va,
> >> > seguramente en algun momento instancias el float  o lo hace el mapper
> ?
> >> > si lo hace el mapper busca donde si lo haces vos , algo asi;
> >> >
> >> >
> >> > asFloat: aBuffer
> >> > "devuelve un float del abuffer value "
> >> > "suponiendo que buffer es lo que te da la db"
> >> > ^ aBuffer value= 0.0
> >> >  ifTrue:[  self ceroFloat " devuelve una instancias de float 0.0"]
> >> >  ifFalse:[ "lo que hacia antes"].
> >> > Tambien se me ocurre el problema podria estar en el mapeador
> >> > que usan?
> >> > ReStore?
> >> > unop propio?
> >> > o el de Alan Knight no recuerdo el nombre...
> >> > saludos
> >> > jmdc
> >> >
> >> >
> >> >
> >> > 2012/5/3 GallegO <[email protected]>
> >> >>
> >> >> Hola Marcelo,
> >> >>
> >> >> si es lo que veniamos planteando, no se si no se entendio pero
> >> >> basicamente para cuando viene de las BD la cosa anda barbara, el tema
> >> >> es que cuando haces cuentas, intervienen primitivas y la VM se
> encarga
> >> >> de instanciar el resultado y no tenes control desde el lado de
> >> >> Smalltalk de que numero se instancia (por lo menos en Dolphin no
> >> >> conozco forma de controlarlo).
> >> >>
> >> >> Y no obvio en Dolphin no son float flyweight ni mucho menos jaja
> pesan
> >> >> como 80 megas los float esos jaja increible para tener todos 0 un
> >> >> cagadon.
> >> >>
> >> >> Saludos
> >> >>  GallegO
> >> >>
> >> >> El día 3 de mayo de 2012 14:56, Juan <[email protected]>
> >> >> escribió:
> >> >> > Hola Gallego ,gente
> >> >> >
> >> >> > Che una idea no se si aplica,
> >> >> > No podrias usar un proxy cuando traes la data, y alli manejar el
> caso
> >> >> > del
> >> >> > 0.0 yo usaria un singleton, pero aqui
> >> >> > viene mi duda , no son los floats flyweight en Dolphin? sino es
> asi,
> >> >> > podrias
> >> >> > usar un factory o sea un metodo de creacion en la clase que
> devuelva
> >> >> > una
> >> >> > instancia siempre la misma, o que administre proxy's donde tambien
> >> >> > podrias
> >> >> > volver a administrar la creacion, o sea un mix entre flyweight y
> >> >> > proxy.
> >> >> > que te/les parece?
> >> >> > salud2
> >> >> > jmdc
> >> >> >
> >> >> >
> >> >> > 2012/5/3 [email protected] <[email protected]>
> >> >> >
> >> >> >> Si el tema es "emprolijar" lo feo podrías subclasificar Float y
> >> >> >> hacer
> >> >> >> algo similar a lo que Symbol hace con String. Podrías mantener un
> >> >> >> pool, incluso con algún criterio estadístico, en donde no guardes
> >> >> >> todo
> >> >> >> sino lo que mas te aparezca (como el 0.0). También podrías
> redondear
> >> >> >> lo que se pueda, no nos olvidemos que Float ya trunca las cosas y
> se
> >> >> >> manda sus mocos sin ayuda de nadie.
> >> >> >>
> >> >> >> On 3 mayo, 14:39, GallegO <[email protected]> wrote:
> >> >> >> > Hola:
> >> >> >> >
> >> >> >> > Les respondo aclarando la situación.
> >> >> >> >
> >> >> >> > Ya implemente un flyweight para cuando traigo floats de la base
> de
> >> >> >> > datos. Luego de observar los resultados llegue a la conclusión
> que
> >> >> >> > por
> >> >> >> > perfomance, en mi caso particular, no valía la pena el flyweight
> >> >> >> > (que
> >> >> >> > lo habia implementado con un WeakSet). La mayoría de mis valores
> >> >> >> > eran
> >> >> >> > 0.0, entonces simplemente evito el 0.0, cuando viene un 0.0
> >> >> >> > instanciado por el driver, en el lugar donde se mapea eso a los
> >> >> >> > objetos directamente si viene 0.0 lo descarto y al objeto le
> pongo
> >> >> >> > el
> >> >> >> > SmallInteger 0, simple y rápido. Si se pone peludo algun día
> tenes
> >> >> >> > la
> >> >> >> > posibilidad de hacer eso e incluso hacerlo para Date, Time,
> >> >> >> > TimeStamp
> >> >> >> > e incluso String.
> >> >> >> >
> >> >> >> > Pero el problema que tengo es en unos objetos que calculamos en
> >> >> >> > memoria para un periodo x de tiempo. Por ejemplo calcular la
> >> >> >> > producción de 30 dias de 5000 pozos, suponiendo que cada
> >> >> >> > producción
> >> >> >> > tiene 20 valores numericos que mantiene en variables de
> instancia,
> >> >> >> > eso
> >> >> >> > te da unos 3 millones de instancias de Float.
> >> >> >> >
> >> >> >> > Ahora, entiendo perfectamente que podemos trabajar ahí también
> >> >> >> > para
> >> >> >> > evitar tener todo eso calculado, o evitar tener al menos tantos
> >> >> >> > Float
> >> >> >> > 0.0 pero por como están programados todos los cálculos se hace
> muy
> >> >> >> > complicado (y feo) manejar esto en todos lados. De ultima que
> cada
> >> >> >> > seter de las variables de instancias pongo codigo que maneje un
> >> >> >> > flyweight o el Float zero al menos, pero es algo feo feo.
> >> >> >> >
> >> >> >> > Por eso pregunto por algo "transparente" como seria poder
> >> >> >> > modificar
> >> >> >> > la
> >> >> >> > VM o las primitivas al menos, que en mi caso por ser Dolphin no
> >> >> >> > puedo.
> >> >> >> >
> >> >> >> > Recién veo el mail de Juan Vuletich, en Dolphin tengo FloatArray
> >> >> >> > tambien. Calculo que en vez de variables de instancia podría
> tener
> >> >> >> > un
> >> >> >> > array de estos en mis objetos y los accessors que apunten a cada
> >> >> >> > una
> >> >> >> > de las posiciones del array. No se si te referis a que es
> posible
> >> >> >> > ese
> >> >> >> > uso. Ja! no me imagino lo que tendría que testear...
> >> >> >> >
> >> >> >> > De todas maneras tener en Smalltalk reflexividad sobre la
> >> >> >> > instanciacion como los Symbol estaría buenísimo.
> >> >> >> >
> >> >> >> > Bueno, viendo esta perspectiva ¿que me sugieren? :D
> >> >> >> >
> >> >> >> > Saludos
> >> >> >> >   GallegO
> >> >> >> >
> >> >> >> > El día 3 de mayo de 2012 14:16, Angel Java Lopez
> >> >> >> > <[email protected]> escribió:
> >> >> >> >
> >> >> >> >
> >> >> >> >
> >> >> >> > > Interesante tema/problema..
> >> >> >> >
> >> >> >> > > Por que hay millones de float? Yo me imagino algun calculo,
> pero
> >> >> >> > > igual
> >> >> >> > > luego
> >> >> >> > > el garbage collector deberia liberarlos. El problema es la
> >> >> >> > > memoria?
> >> >> >> > > se
> >> >> >> > > acaba? Se necesitan los millones de floats, digo, que esten
> >> >> >> > > referenciados y
> >> >> >> > > no sean liberados por el GC? no habra forma de cambiar el
> >> >> >> > > algoritmo? O
> >> >> >> > > el
> >> >> >> > > problema es el tiempo (mucho tiempo creando) y no la memoria?
> >> >> >> >
> >> >> >> > > 2012/5/3 [email protected] <[email protected]>
> >> >> >> >
> >> >> >> > >> Hola GallegO,
> >> >> >> > >> Supongo que habrás hecho un flyweight y es lo que
> generalmente
> >> >> >> > >> me
> >> >> >> > >> sirvió. Tal vez si contarás un poco mas surjan mas ideas, en
> >> >> >> > >> las
> >> >> >> > >> cosas
> >> >> >> > >> que me topé terminé por darme cuenta que los números son
> >> >> >> > >> muchísimos
> >> >> >> > >> menos que los que parecen, en matemática son infinitos pero
> en
> >> >> >> > >> la
> >> >> >> > >> compu no, y en la realidad mucho menos.
> >> >> >> >
> >> >> >> > >> Abrazo
> >> >> >> >
> >> >> >> > >> Diego
> >> >> >> >
> >> >> >> > >> On 3 mayo, 13:04, GallegO <[email protected]> wrote:
> >> >> >> > >> > Gente:
> >> >> >> >
> >> >> >> > >> > Quería saber si alguien se le ocurre de que forma uno puede
> >> >> >> > >> > evitar
> >> >> >> > >> > la
> >> >> >> > >> > instanciación de Float en Dolphin, o si se les ocurren en
> >> >> >> > >> > cualquier
> >> >> >> > >> > Smalltalk en forma transparente. Tengo un problemita con
> >> >> >> > >> > algunos
> >> >> >> > >> > millones de floats. En algunos lados lo puedo solucionar
> con
> >> >> >> > >> > un
> >> >> >> > >> > lightweight pero cuando se usan primitivas en un calculo
> >> >> >> > >> > estoy
> >> >> >> > >> > al
> >> >> >> > >> > horno.
> >> >> >> >
> >> >> >> > >> > Gracias por su ayuda :)
> >> >> >> >
> >> >> >> > >> > Saludos
> >> >> >> > >> >   GallegO
> >> >> >> >
> >> >> >> > >> --
> >> >> >> > >> To post to this group, send email to
> >> >> >> > >> [email protected]
> >> >> >> > >> To unsubscribe from this group, send email to
> >> >> >> > >> [email protected]
> >> >> >> >
> >> >> >> > >>http://www.clubSmalltalk.org
> >> >> >> >
> >> >> >> > > --
> >> >> >> > > To post to this group, send email to
> >> >> >> > > [email protected]
> >> >> >> > > To unsubscribe from this group, send email to
> >> >> >> > > [email protected]
> >> >> >> >
> >> >> >> > >http://www.clubSmalltalk.org
> >> >> >>
> >> >> >> --
> >> >> >> To post to this group, send email to
> [email protected]
> >> >> >> To unsubscribe from this group, send email to
> >> >> >> [email protected]
> >> >> >>
> >> >> >> http://www.clubSmalltalk.org
> >> >> >
> >> >> >
> >> >> > --
> >> >> > To post to this group, send email to
> [email protected]
> >> >> > To unsubscribe from this group, send email to
> >> >> > [email protected]
> >> >> >
> >> >> > http://www.clubSmalltalk.org
> >> >>
> >> >> --
> >> >> To post to this group, send email to [email protected]
> >> >> To unsubscribe from this group, send email to
> >> >> [email protected]
> >> >>
> >> >> http://www.clubSmalltalk.org
> >> >
> >> >
> >> > --
> >> > To post to this group, send email to [email protected]
> >> > To unsubscribe from this group, send email to
> >> > [email protected]
> >> >
> >> > http://www.clubSmalltalk.org
> >>
> >> --
> >> To post to this group, send email to [email protected]
> >> To unsubscribe from this group, send email to
> >> [email protected]
> >>
> >> http://www.clubSmalltalk.org
> >
> >
> > --
> > To post to this group, send email to [email protected]
> > To unsubscribe from this group, send email to
> > [email protected]
> >
> > http://www.clubSmalltalk.org
>
> --
> To post to this group, send email to [email protected]
> To unsubscribe from this group, send email to
> [email protected]
>
> http://www.clubSmalltalk.org
>
> --
> To post to this group, send email to [email protected]
> To unsubscribe from this group, send email to
> [email protected]
>
> http://www.clubSmalltalk.org
>

-- 
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to 
[email protected]

http://www.clubSmalltalk.org

Responder a