Fwd (andre at merzky.net): Re: Fwd (andre at merzky.net): Re: [saga-rg] context problem
Thilo Kielmann
kielmann at cs.vu.nl
Sun Jul 16 10:58:05 CDT 2006
and again: back to the list
----- Forwarded message from Andre Merzky <andre at merzky.net> -----
> Date: Sat, 15 Jul 2006 16:22:47 +0200
> From: Andre Merzky <andre at merzky.net>
> To: Thilo Kielmann <kielmann at cs.vu.nl>
> Cc: Andre Merzky <andre at merzky.net>
> Subject: Re: Fwd (andre at merzky.net): Re: [saga-rg] context problem
>
> Let me re-formulate the example:
>
> saga::session *s = new saga::session ();
> saga::file *f = new saga::file (s, url);
>
> saga::task t = f->copy <saga::task::Task> (target);
>
> delete (s);
> delete (f);
>
> t.run ();
>
> That is the C++ version with explicit memory management, and
> boils down to the same problem, right? Now, that looks
> similar in Java I assume, but I know for sure its the same
> for Python, Perl and C:
>
> saga_task* t;
>
> saga_session s = saga_session_create ();
> saga_file f = saga_file_create (s, url);
>
> saga_task t = saga_file_copy_task (target);
>
> saga_session_destroy (s);
> saga_file_destroy (f);
>
> saga_task_run (t);
>
>
> It can be implemented, easily, in both ways: to be valid,
> and to be invalid. In the C example, assume that s, f and t
> are actually integers, which act as handles to the internal
> memory. If that internal memory is freed or not on
> ..._destroy is a SAGA policy, not a C memory management
> issue. If that code is valid or not is not a C/C++
> question, it is a question the language independent SAGA
> spec must address.
>
> > "keeping objects alive" is a C++ thing.
>
> No, I disagree. I think you mean the memory management: that
> is an C++ thing here because it is an C++ example.
>
> If the user can expect the above code to work or not is not
> a C++ question, it needs to be addressed in the language
> independent spec.
>
> Well, and getting back to the original point: I would
> actually argue for that code to be valid, as it allows to
> pass task handles around, w/o burdening the application
> programmer to pass the objects, session and contexts around
> as well.
>
> Cheers, Andre.
>
>
>
> Quoting [Thilo Kielmann] (Jul 15 2006):
> >
> > > > Right, we agree. If there are more/other contexts that might still be OK.
> > > > IMHO, if the programmer is removing a context that is still needed, that is
> > > > a mistake that might lead to an error.
> > >
> > > Yes, we could do that, agree. However, we are already going
> > > a different route with sessions and tasks:
> > >
> > > --------------------------------------------------------
> > > saga::task t;
> > >
> > > {
> > > saga::session s;
> > > saga::file f (s, url);
> > >
> > > t = f.copy <saga::task::Task> (target);
> > > }
> > >
> > > t.run ();
> > > // session and file object are gone here - however, the
> > > // task still lives, and keeps the session and object
> > > // resources alive. At least some state must be
> > > // maintained internally
> > > --------------------------------------------------------
> > >
> > > As usual, that example is in C++, but the problem is
> > > independent of the language.
> >
> > :-)
> >
> > >
> > > I think that this is the same problem really as with the
> > > context. I think we should solve the the same way.
> >
> > Absolutely.
> >
> > > The problem really is, I think, that the above example is
> > > the dominating one. Tasks, as they represent async ops,
> > > are bound to get passed around through different scopes,
> > > and it would be burdensome to expect the programmer to
> > > keep all associated objects, sessions and contexts etc.
> > > alive.
> >
> > "keeping objects alive" is a C++ thing.
> > This means, both for contexts and sessions (and all other similar objects),
> > that the C++ language binding has to define a "object lifecycle policy" that
> > clearly states who (which class, e.g. user) is in charge of creating and
> > destroying objects. Part of this policy is to say whether or not objects
> > are copied when passed to another object, or whether they are used "by
> > reference".
> >
> > So far, C++. And now back to SAGA semantics.
> >
> > What I can see in the code example above is that there is no problem for the
> > SAGA operations. It is 100% a C++ problem:
> > a) if session and file are passed to the task by reference, then the above
> > code is simply incorrect
> > b) if session and file are copied to the task, this code is fine
> >
> >
> > Cheers,
> >
> >
> > Thilo
> --
> "So much time, so little to do..." -- Garfield
----- End forwarded message -----
--
Thilo Kielmann http://www.cs.vu.nl/~kielmann/
More information about the saga-rg
mailing list