2011-07-09

Generators in Vala

Hello,
here I'll show a cool snippet code making use Vala async functions for emulating Python/Ruby generators. Creating a generator is as simple as extending the Generator class and implementing the generate() method.

abstract class Generator<G> {
private bool consumed;
private 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++) {
yield feed (i);
}
}
}

void main () {
var gen = new IntGenerator ();
foreach (var i in gen) {
message ("%d", i);
}
}


You can find the above code snippet here as well.

2011-07-06

Vala 0.13.1 released

Hello,
the new development version 0.13.1 of the Vala programming language has been released.
Below the changes since version 0.13.0:

Changes

  • New libpeas-1.0 bindings (Michal Hruby).
  • Many bug fixes and binding updates.

More information and download at the Vala homepage.