Etienne via Digitalmars-d
2014-09-24 13:13:31 UTC
It's finally here: https://github.com/etcimon/libasync
We all know how event loops are the foundation of more popular libraries
Qt and Nodejs.. we now have a natively compiling async library entirely
written in D.
This event library was tested on Win32, Linux x64, Mac OS x64, with DMD
2.066, offers the more low-level async objects: timers, file i/o, dns
resolver, tcp, udp, listeners, signals (cross-thread), notifications
(same thread), and more recently (and with great efforts for
implementing with OS X / BSD) a directory watcher.
e.g. You can run a timer with:
import std.datetime; import std.stdio; import libasync.all;
EventLoop evl = new EventLoop;
auto timer = new AsyncTimer(evl);
timer.duration(2.seconds).periodic().run({ writeln("Another 2 seconds
have passed"); });
while(evl.loop()) continue;
The tests may be most revealing:
https://github.com/etcimon/libasync/blob/master/source/libasync/test.d
A (lightly tested) vibe.d driver using all those async objects is also
available and currently ongoing a pull request:
https://github.com/etcimon/vibe.d/tree/native-events
The incentive was to make vibe.d compile in completely native D, I'm now
moving onto a botan C++ => D wrapper for it, I plan on moving objects to
D over the years until the TLS library can be completely native. I thank
Walter for the efforts on extern(C++)
Finally, I release this on the basis of an MIT license, looking forward
to seeing our community flourishing with yet more native libraries. Code on
We all know how event loops are the foundation of more popular libraries
Qt and Nodejs.. we now have a natively compiling async library entirely
written in D.
This event library was tested on Win32, Linux x64, Mac OS x64, with DMD
2.066, offers the more low-level async objects: timers, file i/o, dns
resolver, tcp, udp, listeners, signals (cross-thread), notifications
(same thread), and more recently (and with great efforts for
implementing with OS X / BSD) a directory watcher.
e.g. You can run a timer with:
import std.datetime; import std.stdio; import libasync.all;
EventLoop evl = new EventLoop;
auto timer = new AsyncTimer(evl);
timer.duration(2.seconds).periodic().run({ writeln("Another 2 seconds
have passed"); });
while(evl.loop()) continue;
The tests may be most revealing:
https://github.com/etcimon/libasync/blob/master/source/libasync/test.d
A (lightly tested) vibe.d driver using all those async objects is also
available and currently ongoing a pull request:
https://github.com/etcimon/vibe.d/tree/native-events
The incentive was to make vibe.d compile in completely native D, I'm now
moving onto a botan C++ => D wrapper for it, I plan on moving objects to
D over the years until the TLS library can be completely native. I thank
Walter for the efforts on extern(C++)
Finally, I release this on the basis of an MIT license, looking forward
to seeing our community flourishing with yet more native libraries. Code on