On Sun, 2009-09-13 at 16:16 +0200, Jan Hudec wrote:
> On Sat, Sep 12, 2009 at 13:34:27 +0200, Jürg Billeter wrote:
> > Hi Jiří,
> >
> > On Sat, 2009-09-12 at 00:27 +0200, Jiří Zárevúcky wrote:
> > > --------------------------------------------------------------
> > > 1. "yields" keyword is far from intuitive
> > > --------------------------------------------------------------
> > >
> > > [...]
> > >
> > > Personally, I would find following much more appropriate:
> > >
> > > public virtual async void method (int arg) throws IOError;
> >
> > I agree with you here. The reason I've chosen `yields' is that I've
> > initially thought that the same syntax could be used for more generic
> > coroutine support. However, the focus was always on asynchronous methods
> > and there is no plan to integrate generic coroutine with the same syntax
> > anymore.
>
> Please, don't use 'yield' keyword in a way incompatible with C#, where (since
> version 2.0) it is used for generators just like in Python. E.g.
>
> public IEnumerable<int> range(int start, int end) {
> for(int i = start; i <= end; ++i)
> yield i;
> }
This should be `yield return i;'. We do not use/need `yield return' for
async methods, and I'm planning to add support for `yield return' for
generators in Vala the same way as it's used in C#. I don't see a
conflict here.
> This has nothing to do with asynchronous at all.
>
> I understand this is would be complicated to implement, but please at least
> don't use any of that syntax in an incompatible way.
>
> Virtual machines actually have it pretty easy to implement. They just stash
> away the running function state and than resume it. Vala can't easily do
> that, but I see two options for it:
>
> - Generate the function in a special way so it is restartable. This would
> mean to generate an anonymous class. All arguments and variables would be
> converted to members of that class. Plus one extra member would remember
> which point the function last returned at. Than if the function contained
> no block-local variables, it should be possible to wrap it in a big case
> (similar to what Duff's device uses) to jump to the correct point to
> continue.
That's roughly what we already do for async methods, and the
implementation will be very similar for generators.
Jürg
_______________________________________________
Vala-list mailing list
[email protected]
http://mail.gnome.org/mailman/listinfo/vala-list