About this library
ae (almost everything) is an auxiliary general-purpose D library which contains code shared across my projects.
Among many things, it implements an asynchronous event loop, and several network protocols, such as HTTP / IRC / TLS.
The library is split into the following packages:
ae.demo– This package contains a few demos for various parts of the library.
ae.net– All the networking code (event loop, HTTP, NNTP, IRC) lives here.
ae.sys– Utility code which primarily interfaces with other systems (including the operating system).
ae.ui– Framework for creating 2D games and graphical applications (SDL, OpenGL).
ae.utils– Utility code which primarily manipulates data.
ae.sys.d– Builds arbitrary versions of D. Shared by Digger, DAutoTest, and TrenD.
ae.sys.net– High-level synchronous API for accessing network resources (URLs). Includes implementations based on cURL, WinINet, and
ae.utils.graphics– Contains a templated graphical context optimized for speed, and basic support for a few image formats.
std.datetimewith extras such as PHP-like parsing / formatting and floating-point duration operations.
Data: Many modules that handle raw data (from the network / disk) do so using the
Datastructure, defined in
ae.sys.data. See the module documentation for a description of the type; the quick version is that it is a type equivalent to
void, with a few benefits. Some modules use an array of
Data, to minimize copying / reallocations when handling byte streams with unknown length.
Networking: ae uses asynchronous event-based networking. A
select-based event loop dispatches events to connection objects, which then propagate them to higher-level code as necessary.
libevsupport is also available.
ae.uipackage contains basic support for cross-platform interactive applications using SDL. There is a working game demo in
What uses this library?
- DFeed (forum.dlang.org) - networking, SQLite
- Digger -
- DAutoTest -
ae.sys.d, web server
- btdu - utility functions, duration parsing
- monocre - image processing
- Community WormNET services for Worms Armageddon (web snooper, community server, HostingBuddy)
- Most of my D projects
- Find more uses on GitHub
The best way to get started with this library is to:
- Play with the demo programs (in the
- Look at open-source projects using this library (see above)
- Use your editor's "go to definition" feature to navigate the implementation.
You may also peruse the documentation generated from DDoc on ae.dpldocs.info, though please note that documenting and adding examples to all public symbols is a work in progress.
Using this library
If you are using Dub, simply add a dependency to
ae(or a subpackage) in your project.
The main package has no additional dependencies, with the rest of the library being split out into sub-packages which have additional dependencies (such as OpenSSL).
If you are not using Dub, note that this library has multiple entry points and many optional dependencies, so compiling and linking all
*.dfiles into a single library will not work. In this circumstance, the best way is to simply use recursive compilation (
You can achieve strong versioning and avoid configuring compiler import paths by setting it up as a git submodule in your project's root, as seen here.
There are currently no stable/development branches, and versioning is done only according to the number of commits in
Breaking changes are prefixed with
[BREAKING] in the commit message.
Each such commit includes a rationale and instructions for updating affected code.
Tags are created regularly for the benefit of Dub packages (e.g. Digger).
The bleeding-edge version can be found in the
next branch (which may be regularly force-pushed).
Most of this library is licensed under the Mozilla Public License, v. 2.0. (Approximate summary: you only need to publish the source code of the files from this library that you edited.)
Modules under licenses other than MPL are:
ae.utils.digest_murmurhash3- D port of a C MurmurHash3 implementation. Public Domain.
ae.utils.graphics.fonts.font8x8- Data for an 8x8 bitmap font created by Daniel Hepper. Public Domain.
ae.utils.graphics.hls- Code to convert between RGB and HLS. Ported from a Microsoft Knowledge Base article. License unclear.
ae.utils.text.parsefp- Parse floating-point values from strings. Adapted from Phobos. Boost License 1.0.