Good question, I don't know !

Let's ask the creator of the language himself (Jütrg Billete)

Serge.

On Wed, Jul 13, 2011 at 9:17 PM, august <[email protected]> wrote:

>
> I've been following this thread with interest.   I also find the
> documentation about async methods in vala to be a little thin.  For
> example, in the tutorial, the first line of description says:
>
>
>        "With asynchronous methods it is possible to do programming without
>        any blocking."
>
> The following examples in the tutorial  are much more enlightening...so
> it's not that bad.   But, maybe it could be improved.
>
>
> I always thought async methods:
>        a) are always single threaded
>        b) uses the glib runtime scheduler to simulate
>                multi-processes
>        c) cannot take advantage of multi-core or multi-processor
>                computers
>
> Is that correct?
>
>
> Also, are there any plans to ease multi-core development in Vala?
>
>
> thanks, best -august.
>
>
> > Actually, this is Luca's code (the coroutine-based generator).
> >
> > (I am the guilty party to blame for the naive idea to try to add threads
> to
> > it : I had the Goroutine/channel concept of Go in mind and was trying to
> > emulate it by attempting to combine Luca's generator with threads).
> >
> > :)
> >
> > Serge.
> >
> >
> >
> > On Wed, Jul 13, 2011 at 3:02 PM, Jim Peters <[email protected]> wrote:
> >
> > > Serge Hulne wrote:
> > > > Here is a further development of the idea of Luca Bruno about a Vala
> > > > implementation for Generators:
> > > >
> > > > Simulating  Go's goroutines and channels in Vala:
> > > >
> > > > Basically the idea is to start as many threads as needed (which play
> the
> > > > role of Go' goroutines) and to recuperate their output from a
> "Generator"
> > > > (which plays the role of the "Go" channel form which the result from
> a
> > > given
> > > > thread can be pulled):
> > >
> > > To clarify after all the confusion (partly my fault -- sorry):
> > >
> > > - Luco's Generator doesn't need threads, and it doesn't need a main
> > >  loop either, even though it is using 'async'
> > >
> > > - The whole thing runs in a single thread
> > >
> > > A few thoughts:
> > >
> > > - 'async' is really powerful in Vala, but also quite hard to
> > >  understand.  (I wish I could find a high-level design document
> > >  explaining async in GIO.)
> > >
> > > - Its implementation of coroutines doesn't require another stack, it
> > >  holds its state in a private data structure.  When it does a 'yield'
> > >  it returns to the caller, and when it is next given control, it
> > >  resumes the previous point of execution using a switch and 'goto'.
> > >
> > > - Probably it could all go a lot faster if less housekeeping was going
> > >  on, but I haven't seen Go's implementation either, so who knows how
> > >  it compares.  Anyway, Vala always puts functionality first and
> > >  optimisation second, which suits people who want to get the job done
> > >  now instead of waiting for the ultimate language to arrive, so that
> > >  seems okay.
> > >
> > > Attached is a version of Serge's code with all the thread stuff cut
> > > out, which still works.
> > >
> > > Jim
> > >
> > > /////////////////////////////////
> > > using Posix;
> > >
> > > abstract class Generator<G> {
> > >    private bool consumed;
> > >    private unowned G value;
> > >    private SourceFunc callback;
> > >
> > >    public Generator () {
> > >        helper ();
> > >    }
> > >
> > >    private async void helper () {
> > >        yield generate ();
> > >        consumed = true;
> > >    }
> > >
> > >    protected abstract async void generate ();
> > >
> > >    protected async void feed (G value) {
> > >        this.value = value;
> > >        this.callback = feed.callback;
> > >        yield;
> > >    }
> > >
> > >    public bool next () {
> > >        return !consumed;
> > >    }
> > >
> > >    public G get () {
> > >        var result = value;
> > >        callback ();
> > >        return result;
> > >    }
> > >
> > >    public Generator<G> iterator () {
> > >        return this;
> > >    }
> > > }
> > >
> > > class IntGenerator : Generator<int> {
> > >    protected override async void generate () {
> > >        for (int i=0; i < 10; i++) {
> > >             if (i%2 ==0) yield feed (i);
> > >        }
> > >    }
> > > }
> > >
> > > class IntGenerator_1 : Generator<int> {
> > >    protected override async void generate () {
> > >        for (int i=0; i < 10; i++) {
> > >             if (i%2 !=0) yield feed (i);
> > >        }
> > >    }
> > > }
> > >
> > > int main(string[] args) {
> > >
> > >    var gen = new IntGenerator();
> > >    var gen_1 = new IntGenerator_1();
> > >
> > >    print("\n\nResults computed in first generator\n");
> > >
> > >    var i=0;
> > >    foreach (var item in gen) {
> > >        if (i<10) Posix.stdout.printf("%i\n", item);
> > >        i++;
> > >    }
> > >
> > >     print("\n\nResults computed in the second generator\n\n");
> > >
> > >    i=0;
> > >    foreach (var item in gen_1) {
> > >        if (i<10) Posix.stdout.printf("%i\n", item);
> > >        i++;
> > >    }
> > >
> > >    return 0;
> > > }
> > >
> > > /////////////////////////////////
> > >
> > > --
> > >  Jim Peters                  (_)/=\~/_(_)                 [email protected]
> > >                          (_)  /=\  ~/_  (_)
> > >  Uazú                  (_)    /=\    ~/_    (_)                http://
> > >  in Peru            (_) ____ /=\ ____ ~/_ ____ (_)            uazu.net
> > >
>
> > _______________________________________________
> > vala-list mailing list
> > [email protected]
> > http://mail.gnome.org/mailman/listinfo/vala-list
>
>
> --
>        -------------------
>        http://aug.ment.org
>
>
> -----BEGIN PGP SIGNATURE-----
> Version: GnuPG v1.4.10 (GNU/Linux)
>
> iQEVAwUBTh3vN8VXRY8APmlSAQJqjQf/aQ1bOVQFYuVwwRJrVZtlLe8EYZ4mr7mM
> s/OSZcomk9tenAe2zTonUz4p8mmJqSA6JnBxEabX3DY8TlohDrQxuiYySoLwK0DE
> kVDt8qiGxXCOH+HHYKeunG4NsNnhI4f/spaKyoe4t/oLCpMZRkoxenUE3y+dpoF7
> eRFngk27g9dQRFPwPwsjuTtoA+LdkUvCYp7ST+C6YSybTcvwMyQKm2bm/wxjVzvR
> zMusKCs+DehYXf12r/rt7I7BdxBK7bofpwryN0m5iFWEf9ZC3YvCNxJRahEmcfja
> WSAVJHQI7Im4t3wxM0VCJKPgxe3zwYqdj9kgO6NjH2//DhFw1ILL0A==
> =mrFz
> -----END PGP SIGNATURE-----
>
>
_______________________________________________
vala-list mailing list
[email protected]
http://mail.gnome.org/mailman/listinfo/vala-list

Reply via email to