www.digitalmars.com         C & C++   DMDScript  

digitalmars.D.announce - ae v0.0.3000

reply Vladimir Panteleev <thecybershadow.lists gmail.com> writes:
*ae* (***a**lmost **e**verything*) 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](https://github.com/CyberShadow/ae#overview) for an 
overview of what can be found in the library.



Notable additions within the last 1000 commits:

- All public declarations have been documented (with help from [a 
DMDFE-based linter](https://github.com/CyberShadow/dlint)). You 
can browse the documentation on 
[ae.dpldocs.info](https://ae.dpldocs.info/ae.html).

- 
[`ae.net.http`](https://github.com/CyberShadow/ae/tree/master/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`](https://github.com/CyberShadow/ae/blob/master/ne
/http/app/server.d) 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](https://github.com/CyberShadow/cirun/blob/86d54e4724bcdf4395c01cb488c1d059ae482d01/src/cirun.conf.sample#L36-L114).

- 
[`ae.net.ssl.openssl`](https://github.com/CyberShadow/ae/blob/maste
/net/ssl/openssl.d) now passes most badssl.com tests.

- 
[`ae.sys.file.listDir`](https://ae.dpldocs.info/~next/ae.sys.file.listDir.html)
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`](https://github.com/CyberShadow/ae/blob/ma
ter/utils/mapset.d) 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`](https://github.com/CyberShadow/ae/blob/mas
er/utils/promise.d) is an implementation of JavaScript-like promises, and
attempts to follow the Promises/A+ specification as closely as possible.
[Discussed here](https://forum.dlang.org/post/pzbyxaxssokctpgprikz forum.dlang.org).

- 
[`ae.utils.meta.tuplerange`](https://github.com/CyberShadow/ae/blob/master/util
/meta/tuplerange.d) 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`](https://github.com/CyberShadow/ae/blob/master/u
ils/math/longmul.d) wraps x86 long (up to 128-bit) multiplication and division
in D. [Also seen is DustMite](https://dlang.org/blog/2020/04/13/dustmite-the-general-purpose-data-reduction-tool/).

- 
[`ae.utils.graphics.libpng`](https://github.com/CyberShadow/ae/blob/master/util
/graphics/libpng.d) 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](https://github.com/glennrp/libpng/pull/270).

- 
[`ae.utils.sound`](https://github.com/CyberShadow/ae/tree/master/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](https://github.com/CyberShadow/ae/blob/master/demo/pewpew/) uses this
package to generate and play procedural sound effects.

Thanks for reading!
Apr 10
next sibling parent Dennis <dkorpel gmail.com> writes:
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:
 - 
 [`ae.utils.math.longmul`](https://github.com/CyberShadow/ae/blob/master/u
ils/math/longmul.d) wraps x86 long (up to 128-bit) multiplication and division
in D. [Also seen is DustMite](https://dlang.org/blog/2020/04/13/dustmite-the-general-purpose-data-reduction-tool/).
This should be interesting to people wanting `cent` and `ucent`, like: https://forum.dlang.org/thread/geirgwoffadqqplnkuax forum.dlang.org?page=1
 - The exhaustingly thorough test suite even identified [some 
 bugs in libpng 
 itself](https://github.com/glennrp/libpng/pull/270).
That's been open for almost two years now. Sadly it looks like they're short on reviewers.
 - 
 [`ae.utils.sound`](https://github.com/CyberShadow/ae/tree/master/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](https://github.com/CyberShadow/ae/blob/master/demo/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 :)
Apr 23
prev sibling parent James Lu <jamtlu gmail.com> writes:
On Saturday, 10 April 2021 at 20:46:39 UTC, Vladimir Panteleev 
wrote:
 [`ae.sys.file.listDir`](https://ae.dpldocs.info/~next/ae.sy
.file.listDir.html) 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?
May 10