On Monday, 28 January 2013 at 18:04:22 UTC, Dicebot wrote:
T changes its inner encapsulated states. Period. It is no
different that properties that calculate result on the fly,
like range.empty (which is good property usage).
Array.length allocates. Takes from some global resources, takes
some considerable time, calls some global allocating function.
For me it is a crucial difference that pushes symbol to the
world of functions.
The question "what is or should be a property?" is a question of
semantics. I don't see what performance or those implementation
details you mentioned have to do with semantics.
What if our container type wasn't a dynamic array? Let's say it's
a pseudo container that pretends to be a vector of consecutive
int values, but in reality it just has two integers which denote
the beginning and the end of the range. Now changing the length
property of that container takes constant time (it just sets the
end value anew).