Thread overview
ae v0.0.3000
Apr 10, 2021
Vladimir Panteleev
Apr 23, 2021
Dennis
May 10, 2021
James Lu
April 10, 2021

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 avoiding stat calls by taking advantage of the dirent.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 mentioning ae.utils.meta.chain during a DConf talk - meta.tuplerange is meta.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 and ae.utils.graphics.image, allowing decoding arbitrary PNGs into the user-defined Image type. Because the Image color type is set at compile-time, the module configures libpng to decode the PNG into the Image'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!

April 23, 2021

Whoa, this commit:

https://github.com/CyberShadow/ae/commit/3979fc046a556b55825792d959f3e3a95ff4fd15

"Document Almost Everything" - that's dedication!

On Saturday, 10 April 2021 at 20:46:39 UTC, Vladimir Panteleev wrote:

>

This should be interesting to people wanting cent and ucent, like:
https://forum.dlang.org/thread/geirgwoffadqqplnkuax@forum.dlang.org?page=1

>

That's been open for almost two years now. Sadly it looks like they're short on reviewers.

>
  • 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.

Sounds just like an Atari 2600 game. I got 580 points. I started out methodically aiming diagonal shots but then found it's pretty effective to spam space bar while moving left-to right, and then my points started racking up :)

May 10, 2021

On Saturday, 10 April 2021 at 20:46:39 UTC, Vladimir Panteleev wrote:

>

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 avoiding stat calls by taking advantage of the dirent.d_type field, and allowing applications to avoid GC allocations when querying directory entry names.

Cool! Are there any other D libraries (other than Phobos) with support for recursive directory listing?