D 2015/2016 Vision?

Paulo Pinto via Digitalmars-d digitalmars-d at puremagic.com
Wed Oct 7 00:24:01 PDT 2015


On Tuesday, 6 October 2015 at 20:43:42 UTC, bitwise wrote:
> On Tuesday, 6 October 2015 at 18:43:42 UTC, Jonathan M Davis 
> wrote:
>> On Tuesday, 6 October 2015 at 18:10:42 UTC, bitwise wrote:
>>> On Tuesday, 6 October 2015 at 17:20:39 UTC, Jonathan M Davis 
>>> wrote:
>>> I'm not sure what else I can say. The example I posted says 
>>> it all, and it can't be done properly in D (or C#, but why 
>>> lower the bar because of their mistakes? ;)
>>
>> It's a side effect of having the lifetime of an object managed 
>> by the GC. There's no way around that except to use something 
>> else like manual memory management or reference counting.
>
> You are literally repeating what I just said in different words.
>
>> in D, it's a good reason to use structs to manage resources 
>> like that, and since most objects really have no need of 
>> inheritance and have no business being classes, it's usually 
>> fine.
>
> This is an opinion.
>
> I want polymorphism AND deterministic destruction, and the 
> least you could do is just admit that it's a downside to D not 
> having it, instead of trying to tell me that everything I know 
> is wrong..
>
>> But in the cases where you do have to use a class, it can get 
>> annoying.
>
> YES, its does, and it's not just an odd case here and there..
>
>> You simply do not rely on the GC or the destruction of the 
>> object to free system resources. You manually call a function 
>> on the object to free those resources when you're done with it.
>
> I'm sorry, but I almost can't believe you're saying this.
>
> So, you're saying you want me to just revert back to manual 
> resource management and accept that huge resources like 
> textures and such may just leak if someone doesn't use them 
> right? or throws an exception? in a language like D that is 
> supposed to be safe?
>
>> In the case of C#, they have a construct to help with it that 
>> (IIRC) is something like
>>
>> using(myObj)
>> {
>> } // myObj.dispose() is called when exiting this scope
>
> For the THIRD time, I'll post my example:
>
> class Texture { }
> class Texture2D : Texture {
>     this() { /* load texture... */ }
>     ~this { /* free texture */ }     // OOPS, when, if ever, 
> will this be called?
> }
>
> Now, does this really seem like a realistic use case to you?
>
> using(Texture tex = new Texture2D) {
>     // ...
> }
>

That no, but this yes (at least in C#):

using (LevelManager mgr = new LevelManager())
{
      //....
      // Somewhere in the call stack
      Texture text = mgr.getTexture();
}
--> All level resources gone that require manual management gone
--> Ask the GC to collect the remaining memory right now

If not level wide, than maybe scene/section wide.

However I do get that not all architectures are amendable to be 
re-written in a GC friendly way.

But the approach is similar to RAII in C++, reduce new to minimum 
and allocate via factory functions that work together with handle 
manager classes.

--
Paulo




More information about the Digitalmars-d mailing list