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.httpcan 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.appprovides 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.opensslnow passes most badssl.com tests. -
ae.sys.file.listDiris 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 avoidingstatcalls by taking advantage of thedirent.d_typefield, and allowing applications to avoid GC allocations when querying directory entry names. -
ae.utils.mapsetis 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.promiseis an implementation of JavaScript-like promises, and attempts to follow the Promises/A+ specification as closely as possible. Discussed here. -
ae.utils.meta.tuplerangecontains 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.chainduring a DConf talk -meta.tuplerangeismeta.chain's successor. -
ae.utils.math.longmulwraps x86 long (up to 128-bit) multiplication and division in D. Also seen is DustMite. -
ae.utils.graphics.libpngbridges libpng andae.utils.graphics.image, allowing decoding arbitrary PNGs into the user-definedImagetype. Because theImagecolor type is set at compile-time, the module configureslibpngto decode the PNG into theImage's color type. The exhaustingly thorough test suite even identified some bugs in libpng itself. -
ae.utils.soundis 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!
Permalink
Reply