On Fri, January 27, 2017 11:37 am, Dmitry Boyarintsev wrote: > On Fri, Jan 27, 2017 at 12:52 PM, Jon Foster > <jon-li...@jfpossibilities.com> > wrote: > > >> Correct me if I'm wrong: It would seem like that your free >> implementation >>> doesn't actually do anything, other than fulfilling the obligation of >>> having a "free". If I do this: >>> >> >> var o: TObject; >> begin o:=TObject.create; >> { do something ... } >> o.free; end. >> >> Wouldn't "o" still contain a reference after "free" is called? In >> non-JVM FPC "self" is just another variable, who's origin is somewhat >> hidden by the compiler. The call to "o.free" would do something like >> "TObject.free(o)" >> where "o" is passed by *value* into the procedure variable "self". >> "Self" >> comes and goes with the scope of the "TObject.free" procedure. Which is >> why if I'm concerned about detecting whether or not "o" still contains a >> correct object reference I would need to do something like this: >> "o.free; >> o:=nil;" so I can test for "nil" later. Although I think FPC added a >> procedure to do that some time back. Yup, I see it >> "SysUtils.FreeAndNil". >> >> >> I'm not sure of the specific semantics of the JVM calls but from what I >> read in the various FPC JVM related pages on the wiki it would seem to >> use similar semantics. > > > Object Pascal semantic of calling .Free suggests that "o" would no longer > be a valid object. If a dummy Free method is available for JVM, then such > semantic is violated. > > However, if JVM free method would at least reset "o" reference to nil, > then the semantic of "o" being an invalid object remains. > > It also suggests to the garbage collector that the memory could be > recycled earlier, that the variable leaves the scope. > > thanks, Dmitry
Another interesting idea, from all this discussion, is whether a mixed Garbage Collected/Manually Collected language could exist. Imagine a garbage collected programming language, that at any point in time, you could take control of with your bare hands and free anything. This, likely, would be: 1) a bad idea 2) hard to implement 3) or an interesting thesis project for some ivory tower... I'm not sure if this sort of what Delphi's iOS fake free/release system allows... I dream of a language that is garbage collected for every day use (most projects) but when I want to have real time control (nuclear power plant or rocket ship that requires code run in real time), this dream language could be handy. It could also be a confusing nightmare (as Delphi iOS garbage collection/fake release system is getting a bit scary) _______________________________________________ fpc-pascal maillist - fpc-pascal@lists.freepascal.org http://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-pascal