On 3/27/20 4:39 PM, Hervé Pagès wrote:
Hi Tomas,
On 3/27/20 07:01, Tomas Kalibera wrote:
they provide an over-approximation
They can also provide an "under-approximation" (to say the least) e.g.
on reference objects where the entire substance of the object is
ignored which makes object.size() completely meaningless in that case:
setRefClass("A", fields=c(stuff="ANY"))
object.size(new("A", stuff=raw(0))) # 680 bytes
object.size(new("A", stuff=runif(1e8))) # 680 bytes
Why wouldn't object.size() look at the content of environments?
Yes, the treatment of environments is not "over-approximative". It has
to be bounded somewhere, you can't traverse all captured environments,
getting to say package namespaces, global environment, code of all
functions, that would be too over-approximating. For environments used
as hash maps that contain data, such as in reference classes, it would
of course be much better to include them, but you can't differentiate
programmatically. In principle the same environment can be used for both
things, say a namespace environment can contain data (not clearly
related to any user-level R object) as well as code. Not mentioning
things like source references and parse data.
Tomas
Thanks,
H.
______________________________________________
[email protected] mailing list
https://stat.ethz.ch/mailman/listinfo/r-devel