ae (almost everything) is an auxiliary general-purpose D library. It is used by forum.dlang.org, Digger, the D documentation auto-tester, and most of my D projects in general.
Among many things, it implements an asynchronous event loop, several network protocols, and various utility code to complement the D standard library (Phobos).
https://github.com/CyberShadow/ae
The library's Git repository reached a nice round number of commits the other day, which might as well be an occasion to make this announcement, in case someone finds something useful for their D adventures here. Please see the README document for an overview of what can be found in the library.
What's new in ae?
Notable additions within the last 1000 commits:
-
All public declarations have been documented (with help from a DMDFE-based linter). You can browse the documentation on ae.dpldocs.info.
-
ae.net.http
can now be used to accept HTTP requests and send replies not just over plain HTTP(S)-over-TCP, but also using CGI, FastCGI or SCGI over a variety of transports. -
ae.net.http.app
provides a central point which allows your users to configure and integrate your web app with practically any environment. Example of a configuration file doing so. -
ae.net.ssl.openssl
now passes most badssl.com tests. -
ae.sys.file.listDir
is a fast and flexible directory iterator. It sacrifices providing results as a range to instead gain allowing to decide on-the-spot when to recurse. The speed gains come from avoidingstat
calls by taking advantage of thedirent.d_type
field, and allowing applications to avoid GC allocations when querying directory entry names. -
ae.utils.mapset
is a data structure which allows holding and performing operations on very large sets of maps. Applications include fully exploring program states for all possible inputs, e.g. for fuzzing. -
ae.utils.promise
is an implementation of JavaScript-like promises, and attempts to follow the Promises/A+ specification as closely as possible. Discussed here. -
ae.utils.meta.tuplerange
contains constructs for iterating and chaining together operations on range-like constructs which operate on heterogeneous types. The standard D range interface does not provide this, so an internal iteration API is used instead. You may recall me mentioningae.utils.meta.chain
during a DConf talk -meta.tuplerange
ismeta.chain
's successor. -
ae.utils.math.longmul
wraps x86 long (up to 128-bit) multiplication and division in D. Also seen is DustMite. -
ae.utils.graphics.libpng
bridges libpng andae.utils.graphics.image
, allowing decoding arbitrary PNGs into the user-definedImage
type. Because theImage
color type is set at compile-time, the module configureslibpng
to decode the PNG into theImage
's color type. The exhaustingly thorough test suite even identified some bugs in libpng itself. -
ae.utils.sound
is a package to generate, load, and save simple audio samples. Waveforms can be generated as D ranges (using e.g.std.algorithm
) and then mixed / played / saved. The included space shooter demo game pewpew uses this package to generate and play procedural sound effects.
Thanks for reading!