{"id":45656370,"url":"https://github.com/nicolasmd87/aether","last_synced_at":"2026-04-23T00:01:19.530Z","repository":{"id":340061594,"uuid":"944236568","full_name":"nicolasmd87/aether","owner":"nicolasmd87","description":"A compiled actor-based programming language with type inference, designed for concurrent systems. ","archived":false,"fork":false,"pushed_at":"2026-04-17T20:43:46.000Z","size":25899,"stargazers_count":89,"open_issues_count":4,"forks_count":5,"subscribers_count":2,"default_branch":"main","last_synced_at":"2026-04-17T21:34:35.178Z","etag":null,"topics":["actor-model","c","compiler","concurrency","embedded-c","message-passing","open-source","pattern-matching","programming-language","systems-programming","type-inference","wasm"],"latest_commit_sha":null,"homepage":"","language":"C","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/nicolasmd87.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":"CONTRIBUTING.md","funding":".github/FUNDING.yml","license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null},"funding":{"github":["nicolasmd87"],"patreon":null,"open_collective":null,"ko_fi":null,"tidelift":null,"community_bridge":null,"liberapay":null,"issuehunt":null,"lfx_crowdfunding":null,"polar":null,"buy_me_a_coffee":null,"thanks_dev":null,"custom":null}},"created_at":"2025-03-07T02:23:27.000Z","updated_at":"2026-04-17T20:18:23.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/nicolasmd87/aether","commit_stats":null,"previous_names":["nicolasmd87/aether"],"tags_count":60,"template":false,"template_full_name":null,"purl":"pkg:github/nicolasmd87/aether","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nicolasmd87%2Faether","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nicolasmd87%2Faether/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nicolasmd87%2Faether/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nicolasmd87%2Faether/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/nicolasmd87","download_url":"https://codeload.github.com/nicolasmd87/aether/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nicolasmd87%2Faether/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32159962,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-22T17:06:48.269Z","status":"ssl_error","status_checked_at":"2026-04-22T17:06:19.037Z","response_time":58,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["actor-model","c","compiler","concurrency","embedded-c","message-passing","open-source","pattern-matching","programming-language","systems-programming","type-inference","wasm"],"created_at":"2026-02-24T08:39:03.352Z","updated_at":"2026-04-23T00:01:19.502Z","avatar_url":"https://github.com/nicolasmd87.png","language":"C","funding_links":["https://github.com/sponsors/nicolasmd87"],"categories":["C"],"sub_categories":[],"readme":"# Aether Programming Language\n\n[![CI](https://github.com/nicolasmd87/aether/actions/workflows/ci.yml/badge.svg)](https://github.com/nicolasmd87/aether/actions/workflows/ci.yml)\n[![Windows](https://github.com/nicolasmd87/aether/actions/workflows/windows.yml/badge.svg)](https://github.com/nicolasmd87/aether/actions/workflows/windows.yml)\n[![License](https://img.shields.io/badge/license-MIT-blue.svg)](LICENSE)\n[![Platform](https://img.shields.io/badge/platform-Windows%20%7C%20Linux%20%7C%20macOS%20%7C%20WASM%20%7C%20Embedded-lightgrey)]()\n\nA compiled actor-based programming language with type inference, designed for concurrent systems. Aether compiles to C for native performance and seamless C interoperability.\n\n## Overview\n\nAether is a compiled language that brings actor-based concurrency to systems programming. The compiler generates readable C code, providing portability and interoperability with existing C libraries.\n\n**Core Features:**\n- Actor-based concurrency with automatic multi-core scheduling\n- Type inference with optional annotations\n- Compiles to readable C for portability and C library interop\n- Lock-free message passing with adaptive optimizations\n- Go-style result types: `a, err = func()` with `_` discard\n- Package management: `ae add host/user/repo[@version]` (GitHub, GitLab, Bitbucket, any git host)\n\n## Runtime Features\n\nThe Aether runtime implements a native actor system with optimized message passing:\n\n### Concurrency Model\n- **Multi-core partitioned scheduler** with locality-aware actor placement\n- **Locality-aware spawning** — actors placed on the caller's core for efficient parent-child messaging\n- **Message-driven migration** — communicating actors automatically converge onto the same core\n- **Work-stealing fallback** for idle core balancing\n- **Lock-free SPSC queues** for same-core messaging\n- **Cross-core messaging** with lock-free mailboxes\n\n### Memory Management\n- **Manual by default** — use `defer` for cleanup. All allocations cleaned up explicitly.\n- **Arena allocators** for actor lifetimes\n- **Memory pools** with thread-local allocation\n- **Actor pooling** reducing allocation overhead\n- **Zero-copy message delivery** in single-actor main-thread mode (caller stack passed directly)\n\n### Message Optimization\n- **Sender-side batching** for reduced overhead\n- **Message coalescing** for higher throughput\n- **Adaptive batching** dynamically adjusts batch sizes\n- **Direct send** for same-core actors bypasses queues\n\n### Platform Portability\n- **Compile-time platform detection** via `AETHER_HAS_*` flags (threads, atomics, filesystem, networking, NUMA, SIMD, affinity)\n- **Cooperative scheduler** for single-threaded platforms (WebAssembly, embedded, bare-metal)\n- **Graceful degradation** — stdlib stubs return errors when features are unavailable\n- **`ae build --target wasm`** compiles to WebAssembly via Emscripten\n- **`PLATFORM=wasm|embedded`** Makefile targets for cross-compilation\n- **Docker CI images** for Emscripten (WASM) and ARM (embedded) verification\n\n### Advanced Features\n- **Actor timeouts** — `receive { ... } after N -\u003e { ... }` fires handler if no message arrives within N ms\n- **Cooperative preemption** (opt-in) — `AETHER_PREEMPT=1` breaks long handlers, `--preempt` yields at loop back-edges\n- **Reactor-pattern async I/O** — `net.await_io(fd)` suspends an actor on a file descriptor without blocking any scheduler thread; the runtime's per-core I/O poller (epoll/kqueue/poll) delivers an `IoReady { fd, events }` message when the fd becomes readable\n- **SIMD batch processing** with AVX2 support\n- **NUMA-aware allocation** for multi-socket systems\n- **CPU feature detection** for runtime optimization selection\n- **Performance profiling** with per-core cycle counting\n- **Message tracing** for debugging\n\n### Benchmarks\n\nCross-language benchmark suite based on the [Savina Actor Benchmark Suite](https://dl.acm.org/doi/10.1145/2687357.2687368) — 11 languages × 5 patterns (ping-pong, counting, thread ring, fork-join, skynet). Both the benchmark runner and the visualization server are written in Aether, dogfooding the stdlib.\n\n```bash\nmake benchmark    # Builds runner, runs all 55 benchmarks, opens UI at http://localhost:8080\n```\n\nSee [Performance Benchmarks](docs/performance-benchmarks.md) for methodology and [benchmarks/cross-language/](benchmarks/cross-language/) for source.\n\n## Quick Start\n\n### Install\n\n**Linux / macOS — one-line install:**\n\n```bash\ngit clone https://github.com/nicolasmd87/aether.git\ncd aether\n./install.sh\n```\n\nInstalls to `~/.aether` and adds `ae` to your PATH. Restart your terminal or run `source ~/.bashrc`, `~/.zshrc`, or `~/.bash_profile`.\n\n**Windows — download and run:**\n\n1. Download `aether-*-windows-x86_64.zip` from [Releases](https://github.com/nicolasmd87/aether/releases)\n2. Extract to any folder (e.g. `C:\\aether`)\n3. Add `C:\\aether\\bin` to your PATH\n4. **Restart your terminal** (so PATH takes effect)\n5. Run `ae init hello \u0026\u0026 cd hello \u0026\u0026 ae run`\n\nGCC is downloaded automatically the first time you run a program (~80 MB, one-time) — no MSYS2 or manual toolchain setup required.\n\n**All platforms — manage versions with `ae version`:**\n\n```bash\nae version list              # see all available releases\nae version install v0.25.0   # download and install a specific version\nae version use v0.25.0       # switch to that version\n```\n\n### Your First Program\n\n```bash\n# Create a new project\nae init hello\ncd hello\nae run\n```\n\nOr run a single file directly:\n\n```bash\nae run examples/basics/hello.ae\n```\n\n### Editor Setup (Optional)\n\nInstall syntax highlighting for a better coding experience:\n\n**VS Code / Cursor:**\n```bash\ncd editor/vscode\n./install.sh\n```\n\nThis provides:\n- Syntax highlighting with TextMate grammar\n- Custom \"Aether Erlang\" dark theme\n- `.ae` file icons\n\n### Development Build (without installing)\n\nIf you prefer to build without installing:\n\n```bash\nmake ae\n./build/ae version\n./build/ae run examples/basics/hello.ae\n```\n\n### The `ae` Command\n\n`ae` is the single entry point for everything — like `go` or `cargo`:\n\n```bash\nae init \u003cname\u003e           # Create a new project\nae run [file.ae]         # Compile and run (file or project)\nae build [file.ae]       # Compile to executable\nae check [file.ae]       # Type-check without compiling (~30x faster)\nae test [file|dir]       # Discover and run tests\nae examples [dir]        # Build all example programs\nae add \u003chost/user/repo\u003e  # Add a dependency (any git host)\nae repl                  # Start interactive REPL\nae cache                 # Show build cache info\nae cache clear           # Clear the build cache\nae version               # Show current version\nae version list          # List all available releases\nae version install \u003cv\u003e   # Install a specific version\nae version use \u003cv\u003e       # Switch to an installed version\nae help                  # Show all commands\n```\n\nIn a project directory (with `aether.toml`), `ae run` and `ae build` compile `src/main.ae` as the program entry point. You can also pass `.` as the directory: `ae run .` or `ae build .`.\n\n**Using Make (alternative):**\n\n```bash\nmake compiler                    # Build compiler only\nmake ae                          # Build ae CLI tool\nmake test                        # Run runtime C test suite (166 tests)\nmake test-ae                     # Run .ae source tests (95 tests)\nmake test-all                    # Run all tests\nmake examples                    # Build all examples\nmake -j8                         # Parallel build\nmake help                        # Show all targets\n```\n\n**Windows:** Use the [release binary](https://github.com/nicolasmd87/aether/releases) — no MSYS2 needed. To build from source, use MSYS2 MinGW 64-bit shell; `make ci` runs the full suite (compiler, ae, stdlib, REPL, C tests, .ae tests, examples) with no skips.\n\n## Project Structure\n\n```\naether/\n├── compiler/           # Aether compiler (lexer, parser, codegen)\n│   ├── parser/        # Lexer, parser, tokens\n│   ├── analysis/      # Type checker, type inference\n│   ├── codegen/       # C code generation, optimizer\n│   └── aetherc.c      # Compiler entry point\n├── runtime/           # Runtime system\n│   ├── actors/        # Actor implementation and lock-free mailboxes\n│   ├── config/        # Platform detection, optimization tiers, runtime config\n│   ├── memory/        # Arena allocators, memory pools, batch allocation\n│   ├── scheduler/     # Multi-core scheduler + cooperative single-threaded backend\n│   └── utils/         # CPU detection, SIMD, tracing, thread portability\n├── std/               # Standard library\n│   ├── string/       # String operations\n│   ├── file/         # File operations (open, read, write, delete)\n│   ├── dir/          # Directory operations (create, delete, list)\n│   ├── path/         # Path utilities (join, basename, dirname)\n│   ├── fs/           # Combined file/dir/path module\n│   ├── collections/  # List, HashMap, Vector, Set, PQueue\n│   ├── list/         # Dynamic array (ArrayList)\n│   ├── map/          # Hash map\n│   ├── json/         # JSON parser and builder\n│   ├── http/         # HTTP client and server\n│   ├── tcp/          # TCP client and server\n│   ├── net/          # Combined TCP/HTTP networking module\n│   ├── math/         # Math functions and random numbers\n│   ├── io/           # Console I/O, environment variables\n│   ├── os/           # Shell execution, command capture, env vars\n│   └── log/          # Structured logging\n├── tools/            # Developer tools\n│   ├── ae.c          # Unified CLI tool (ae command)\n│   └── apkg/         # Project tooling, TOML parser\n├── tests/            # Test suite (runtime, syntax, integration)\n├── examples/         # Example programs (.ae files)\n│   ├── basics/       # Hello world, variables, arrays, etc.\n│   ├── actors/       # Actor patterns (ping-pong, pipeline, etc.)\n│   └── applications/ # Complete applications\n├── docs/            # Documentation\n└── docker/          # Docker (CI, dev, WASM, embedded)\n```\n\n## Language Example\n\n```aether\n// Counter actor with message handling\nmessage Increment {}\nmessage Decrement {}\nmessage Reset {}\n\nactor Counter {\n    state count = 0\n\n    receive {\n        Increment() -\u003e {\n            count = count + 1\n        }\n        Decrement() -\u003e {\n            count = count - 1\n        }\n        Reset() -\u003e {\n            count = 0\n        }\n    }\n}\n\nmain() {\n    // Spawn counter actor\n    counter = spawn(Counter())\n\n    // Send messages\n    counter ! Increment {}\n    counter ! Increment {}\n    counter ! Decrement {}\n    counter ! Reset {}\n    counter ! Increment {}\n\n    // Wait for all messages to be processed\n    wait_for_idle()\n\n    println(\"Final count: ${counter.count}\")\n}\n```\n\n## Runtime Configuration\n\nWhen embedding the Aether runtime in a C application, configure optimizations at startup:\n\n```c\n#include \"runtime/aether_runtime.h\"\n\nint main() {\n    // Auto-detect CPU features and enable optimizations\n    aether_runtime_init(4, AETHER_FLAG_AUTO_DETECT);\n\n    // Or manually configure\n    aether_runtime_init(4,\n        AETHER_FLAG_LOCKFREE_MAILBOX |\n        AETHER_FLAG_ENABLE_SIMD |\n        AETHER_FLAG_ENABLE_MWAIT\n    );\n\n    // Your actor system runs here\n\n    return 0;\n}\n```\n\nAvailable flags:\n- `AETHER_FLAG_AUTO_DETECT` - Detect CPU features and enable optimizations\n- `AETHER_FLAG_LOCKFREE_MAILBOX` - Use lock-free SPSC mailboxes\n- `AETHER_FLAG_ENABLE_SIMD` - AVX2 vectorization for batch operations\n- `AETHER_FLAG_ENABLE_MWAIT` - MWAIT-based idle (x86 only)\n- `AETHER_FLAG_VERBOSE` - Print runtime configuration\n\n## Optimization Tiers\n\nThe runtime employs a tiered optimization strategy:\n\n**TIER 0 - Platform Capabilities (compile-time):**\n- `AETHER_HAS_THREADS` — pthreads/Win32 threads (auto-detected; disabled on WASM/embedded)\n- `AETHER_HAS_ATOMICS` — C11 stdatomic (fallback: volatile for single-threaded)\n- `AETHER_HAS_FILESYSTEM` / `AETHER_HAS_NETWORKING` — stdlib feature gates\n- `AETHER_HAS_SIMD` / `AETHER_HAS_NUMA` / `AETHER_HAS_AFFINITY` — hardware feature gates\n- Override any flag with `-DAETHER_NO_\u003cFEATURE\u003e` (e.g. `-DAETHER_NO_THREADING`)\n\n**TIER 1 - Always Enabled:**\n- Actor pooling (reduces allocation overhead)\n- Direct send for same-core actors (bypasses queues)\n- Adaptive batching (adjusts batch size dynamically)\n- Message coalescing (combines small messages)\n- Thread-local message pools\n\n**TIER 2 - Auto-Detected:**\n- SIMD batch processing (requires AVX2/NEON)\n- MWAIT idle (requires x86 MONITOR/MWAIT)\n- CPU core pinning (OS-dependent)\n\n**TIER 3 - Opt-In:**\n- Lock-free mailbox (better under contention)\n- Message deduplication (prevents duplicate processing)\n\n## Documentation\n\n- [Getting Started Guide](docs/getting-started.md) - Installation and first steps\n- [Language Tutorial](docs/tutorial.md) - Learn Aether syntax and concepts\n- [Language Reference](docs/language-reference.md) - Complete language specification\n- [C Interoperability](docs/c-interop.md) - Using C libraries and the `extern` keyword\n- [Architecture Overview](docs/architecture.md) - Runtime and compiler design\n- [Memory Management](docs/memory-management.md) - defer-first manual model, arena allocators\n- [Runtime Optimizations](docs/runtime-optimizations.md) - Performance techniques\n- [Cross-Language Benchmarks](benchmarks/cross-language/README.md) - Comparative performance analysis\n- [Docker Setup](docker/README.md) - Container development environment\n\n## Development\n\n### Running Tests\n\n```bash\n# Runtime C test suite\nmake test\n\n# Aether source tests\nmake test-ae\n\n# All tests\nmake test-all\n\n# Build all examples\nmake examples\n```\n\n### Testing\n\n```bash\n# Full CI suite (8 steps, -Werror) — runs on your current platform\nmake ci\n\n# Unit tests only (166 tests)\nmake test\n\n# Integration tests only (108 .ae tests)\nmake test-ae\n\n# Build all examples (61 programs)\nmake examples\n\n# Full CI + Valgrind + ASan in Docker (Linux)\nmake docker-ci\n```\n\n### Cross-Platform Testing\n\n**CI runs automatically on:** Linux (GCC + Clang), macOS (ARM64 + x86_64), Windows (MinGW/MSYS2)\n\n```bash\n# Cooperative scheduler (no Docker needed)\nmake ci-coop\n\n# Windows cross-compile syntax check (requires mingw-w64 or Docker)\nmake ci-windows              # needs: brew install mingw-w64\nmake docker-ci-windows       # or use Docker\n\n# WebAssembly (requires Docker with Emscripten)\nmake docker-ci-wasm\n\n# ARM embedded syntax check (requires Docker with arm-none-eabi-gcc)\nmake docker-ci-embedded\n\n# All portability checks (coop + WASM + embedded)\nmake ci-portability\n```\n\n**`make ci` tests your current OS only.** No OS can locally test another OS natively — macOS cannot be virtualized on Linux/Windows, Windows build+run requires MSYS2. GitHub Actions CI automatically tests all 5 platform targets (Linux GCC, Linux Clang, macOS ARM64, macOS x86_64, Windows MinGW) on every PR. Docker targets (`docker-ci-windows`, `docker-ci-wasm`, `docker-ci-embedded`) provide cross-compilation syntax checking from any host.\n\nSee [CONTRIBUTING.md](CONTRIBUTING.md) for the full pre-PR checklist.\n\n### Running Benchmarks\n\n```bash\n# Run cross-language benchmark suite with interactive UI\nmake benchmark\n# Open http://localhost:8080 to view results\n\n```\n\nThe benchmark runner is written in Aether (`run_benchmarks.ae`), dogfooding the stdlib. It compiles and runs all 11 languages, parses output, and writes JSON results.\n\n## Status\n\nAether is under active development. The compiler, runtime, and standard library are functional and tested.\n\n**What works today:**\n- Full compiler pipeline with Rust-style diagnostics (file, line, column, source context, caret, hints)\n- Multi-core actor runtime with locality-aware placement, message-driven migration, and work-stealing fallback\n- Main-thread actor mode — single-actor programs bypass the scheduler entirely (zero-overhead path)\n- Batch fan-out send for main-to-many patterns\n- Lock-free message passing with adaptive optimizations\n- Module system with pure Aether modules, export visibility, and namespace-qualified calls\n- Standard library (collections, networking, JSON, file I/O, math, OS/shell)\n- Interactive REPL (`ae repl`) with session persistence and error recovery\n- C embedding via `--emit-header`\n- IDE support (VS Code, Cursor) with syntax highlighting\n- Cross-platform (macOS, Linux, Windows) with cooperative scheduler for WASM and embedded targets\n- Platform portability layer with compile-time feature detection and graceful degradation\n- Docker CI for cross-platform verification (Emscripten WASM, ARM embedded)\n\n**Known Limitations:**\n- Package registry supports any git host but lacks transitive dependency resolution and lock file integrity checking\n- Stdlib still uses `int` returns for error handling (migration to result types planned)\n\n**Roadmap:**\n- Stdlib migration to result types\n- Async I/O (io_uring/kqueue/IOCP)\n- WebAssembly Phase 2 (Web Workers)\n\n## Contributing\n\nContributions are welcome. See [CONTRIBUTING.md](CONTRIBUTING.md) for guidelines.\n\n**Areas of interest:**\n- Runtime optimizations\n- Standard library expansion\n- Documentation and examples\n\n## Supporting Aether\n\nAether is free and open source, built and maintained in personal time. CI runners, cross-platform testing infrastructure, and future project hosting cost real money.\n\nIf Aether is useful to you, consider [sponsoring the project on GitHub](https://github.com/sponsors/nicolasmd87). Every contribution goes directly into development and infrastructure.\n\n[![Sponsor](https://img.shields.io/badge/Sponsor-Aether-blue?logo=github-sponsors)](https://github.com/sponsors/nicolasmd87)\n\n## Acknowledgments\n\nAether draws inspiration from:\n- **Erlang/OTP** — Actor model, message passing semantics\n- **Go** — Pragmatic tooling, simple concurrency primitives\n- **Rust** — Systems programming practices, zero-cost abstractions\n- **Pony** — Actor-based type safety concepts\n\n## License\n\nMIT License. See [LICENSE](LICENSE) for details.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnicolasmd87%2Faether","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fnicolasmd87%2Faether","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnicolasmd87%2Faether/lists"}