[fpc-devel] Proof of Concept ARC implementation
Michael Schnell
mschnell at lumino.de
Wed Oct 29 13:27:45 CET 2014
Considering the multiple discussions recently here done on the "New
Strings", that also introduce multiple compiler-relevant brands of a
single type, IMHO there are some restrictions to be payed attention to,
if the user is enable to use both ref-counted and not ref-counted
Objects. Otherwise we will be facing some dangerous ambiguity.
One way to avoid the ambiguity is to only provide a single brand TObject
type i.e. the choice would be completely dynamic by a property
"IsRefCounted" to TObject.
If the runtime overhead for this is considered to be too big, two
TObject Types (or brands of the TObject type) could be provided.
But here additional considerations are necessary:
The two brands need to be incompatible. A simple assignment of one to
the other needs to be forbidden
If such assignment is supported by the compiler, some kind of automatic
conversion needs to be implemented (see New Strings encoding conversions)
To decently support lists of such objects (TList), there are some
alternatives:
(1) different incompatible lists types are provided for either brand
(2) TList is provided with only one brand and auto-conversion is forced
(This is how NewStings work with TStrings in Delphi, IMHO inappropriately)
(3) An additional type is provided that is fully dynamic and hence
supports all brands (This is how I would prefer NewStings to work with
TString)
(4) My favorite here: The ref-counted type is "compatible" meaning that
...(a) you can assign a not ref counted object to a variable of the ref
counted type brand. Here (e.g.) the ref count is set to -1 meaning "not
ref counted"
...(b) you can't assign a ref counted object to a variable of the not
ref counted type brand
...(c) TList is provided only for ref counted TObjects. Auto-conversion
is done (setting the ref-count to -1) when moving a not ref-counted
object into the list.
-Michael
More information about the fpc-devel
mailing list