Use a supported toolchain.
Flyology is an Alire crate and requires Alire 2.1 or newer. The dependency range accepts GNAT 13 through 16. Runtime preparation supports only the host and release pairs listed below.
- macOS / AArch64
- 13.2.2, 14.1.3, 14.2.1, and 16.1.0
- Linux / AArch64
- 13.2.2, 14.1.3, 14.2.1, 15.1.2, 15.3.1, and 16.1.0
- Linux / x86-64
- 13.2.2, 14.1.3, 14.2.1, 15.1.2, 15.3.1, and 16.1.0
Add Flyology to an Alire application.
Flyology is published through a separate organization index. Keep the community index enabled for compiler and third-party dependencies. Add the Flyology index before the community index, then add the crate. Flyology might move to the community index later, but no decision has been made.
alr init --bin flyology_app
cd flyology_app
alr index --reset-community
alr index --add=git+https://github.com/flyology-ada/alire-index.git \
--name=flyology --before=community
alr with flyology
Build with a version-matched runtime.
The first build runs Flyology's Alire post-fetch action. The action copies the active compiler's installed runtime sources into the dependency build output. It then applies the exact patch family, builds the RTS, and exports a GPR configuration. The application links to this prepared RTS instead of the stock tasking runtime.
alr build
The default is native. In this compatibility configuration, undesignated tasks use stock OS-thread execution. No event machinery starts until a lightweight task activates.
FLYOLOGY_LOOP_POOL_SIZE=4 alr run
Continue with Execution groups to change the automatic pool after startup.
Designate one ordinary Ada task.
Use GNAT Task_Info to select the execution model at task creation. Current GNAT emits an obsolete-feature warning for this mechanism. The warning is an artifact of the current design and GNAT's handling of it, not intended Flyology behavior. Flyology projects use -gnatwJ to suppress that warning class while retaining other warnings.
A future design might use another designation mechanism, including an Ada aspect, if GNAT makes one available. Flyology has not selected a replacement.
with Flyology;
package Worker is
task Connection is
pragma Task_Info (Flyology.Lightweight_Task);
end Connection;
end Worker;
Use Flyology.Native_Task and Flyology.Lightweight_Task for explicit task designations. Both are values of Flyology.Execution_Model. Flyology.Project_Default requests the project default explicitly, which is useful on discriminated task types.
alr build
Continue with one focused chapter.
The core path follows the setup above. Each later step has a stable page that you can open or link directly.
Core chapters
- Steps 01–04 · Start here (current page)
- Check the toolchain, add the crate, prepare the runtime, and designate one lightweight task.
- Step 05 · Task stack sizing
- Choose usable stack size and account for guard pages, pool classes, and native-task behavior.
- Step 06 · Task memory
- Control dormant stack reclamation and task-private region lifetimes.
- Step 07 · Execution groups
- Choose automatic placement or a shared or dedicated group. Continue directly to pool growth or pool reduction.
- Step 08 · Task-aware I/O
- Use synchronous calls and choose client ownership or pathname Unix sockets.
- Step 08 continued · Scoped operations
- Start several bounded operations, wait for batches or gates, and finish each retained result.
- Step 09 · Resource budgets
- Bound concurrency, memory, parallelism, and latency. Continue directly to cooperative checkpoints.
- Step 10 · Runtime observability
- Compare snapshots, queue pressure, and memory measurements. Continue directly to event-loop utilization.
- Step 11 · Verification
- Run behavioral tests, proofs, documentation checks, stress campaigns, and showcases.
- Step 12 · Execution constraints
- Choose lightweight, native, or dedicated execution within the current experimental limits.
Topic guides
- Shared-memory segments
- Manage backing, mapping, named extents, descriptor handoff, and teardown.
- Relocatable data structures
- Place bounded arenas, rings, maps, vectors, slabs, and strings in caller-owned storage.
- File watching
- Observe bounded file, directory, and recursive-tree registrations.
- File-to-socket transfers
- Move positional regular-file regions with native and completion-driven paths.
- Native subprocesses
- Create processes from native tasks with bounded capture, deadlines, and cleanup.
- Structured task supervision
- Build typed static trees and bounded dynamic families with explicit recovery policy.
- Process upgrades
- Coordinate listener escrow, canaries, promotion, drain, and reversal across fresh processes.
- Timers and clock changes
- Use relative, monotonic, multi-deadline, and wall-clock waits.
Project tooling
- Flyology CLI
- Install the aggregate command, scaffold binary or library crates, provision agent guidance and website files, and add extension commands.