<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Nicolas Mamán</title>
    <description>The latest articles on DEV Community by Nicolas Mamán (@nicolasmd).</description>
    <link>https://dev.to/nicolasmd</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3110526%2F1bd19910-e6f3-4205-bbdf-29a0158a020c.png</url>
      <title>DEV Community: Nicolas Mamán</title>
      <link>https://dev.to/nicolasmd</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/nicolasmd"/>
    <language>en</language>
    <item>
      <title>Why My Programming Language Compiles to Readable C (Not LLVM IR)</title>
      <dc:creator>Nicolas Mamán</dc:creator>
      <pubDate>Mon, 30 Mar 2026 04:20:52 +0000</pubDate>
      <link>https://dev.to/nicolasmd/why-my-programming-language-compiles-to-readable-c-not-llvm-ir-56k9</link>
      <guid>https://dev.to/nicolasmd/why-my-programming-language-compiles-to-readable-c-not-llvm-ir-56k9</guid>
      <description>&lt;p&gt;I've been solo-building a programming language called Aether. It has actors, pattern matching, type inference  - the usual wish list for a modern systems language. But the decision that defined the whole project was this: compile to C, not LLVM IR.&lt;/p&gt;

&lt;p&gt;Here's why, and what I gained and lost.&lt;/p&gt;

&lt;h2&gt;
  
  
  The generated code is debuggable
&lt;/h2&gt;

&lt;p&gt;When Aether compiles your program, it produces a .c file you can open and read. Function names map to your source. Structs map to your types. If something crashes, gdb points at code that makes sense.&lt;/p&gt;

&lt;p&gt;With LLVM IR, you get a wall of SSA instructions. For a solo developer building a language from scratch, readable output was non-negotiable  - I needed to see what my compiler was actually doing.&lt;/p&gt;

&lt;h2&gt;
  
  
  C interop comes free
&lt;/h2&gt;

&lt;p&gt;Since the output is just C, calling into existing C libraries is trivial. Use the extern keyword and call it. No FFI bindings, no marshaling. The generated code links against your .h files directly.&lt;/p&gt;

&lt;p&gt;This turned out to be one of the biggest practical advantages. The entire C ecosystem is immediately available.&lt;/p&gt;

&lt;h2&gt;
  
  
  The tradeoff: no LLVM optimization passes
&lt;/h2&gt;

&lt;p&gt;This is the real cost. No auto-vectorization, no loop unrolling beyond what gcc/clang does on their own, no polyhedral analysis.&lt;/p&gt;

&lt;p&gt;For Aether's use case  - concurrent actor systems where the bottleneck is usually message passing, not arithmetic  - this is an acceptable tradeoff. For a language targeting HPC or numerical computing, it would be a dealbreaker.&lt;/p&gt;

&lt;h2&gt;
  
  
  What the compiler does optimize
&lt;/h2&gt;

&lt;p&gt;Even without LLVM, the Aether compiler handles constant folding, dead code elimination, and tail recursion optimization. It also does something I haven't seen in other compilers: arithmetic series loop collapse  - replacing counter-summing loops with O(1) closed-form expressions using the triangular number formula.&lt;/p&gt;

&lt;p&gt;Not groundbreaking, but a neat trick that fell out of the constant folding pass.&lt;/p&gt;

&lt;h2&gt;
  
  
  The actor runtime
&lt;/h2&gt;

&lt;p&gt;The real performance work is in the runtime: lock-free SPSC ring buffers for message passing, thread-local payload pools (256 pre-allocated buffers per thread), adaptive batch processing (64-1024 messages per cycle), and NUMA-aware actor placement.&lt;/p&gt;

&lt;p&gt;This is where Aether lives or dies  - and compiling to C actually helps here, because the runtime itself is C and there's zero boundary between language runtime and generated code.&lt;/p&gt;

&lt;h2&gt;
  
  
  Current state
&lt;/h2&gt;

&lt;p&gt;Aether is at v0.31. 347 commits, 261 tests, a CLI with init/compile/test/run/build commands, REPL, LSP, and VS Code support. It cross-compiles to WebAssembly and embedded ARM. Benchmarked against 11 languages including C, Go, Rust, Erlang, and Pony.&lt;/p&gt;

&lt;p&gt;Still missing closures, a proper package registry, and a source formatter. Building in the open.&lt;/p&gt;

&lt;p&gt;If any of this sounds interesting: &lt;a href="https://github.com/nicolasmd87/aether" rel="noopener noreferrer"&gt;https://github.com/nicolasmd87/aether&lt;/a&gt;&lt;/p&gt;

</description>
      <category>c</category>
      <category>programming</category>
      <category>opensource</category>
      <category>performance</category>
    </item>
    <item>
      <title>Aether: A Compiled Actor-Based Language for High-Performance Concurrency</title>
      <dc:creator>Nicolas Mamán</dc:creator>
      <pubDate>Wed, 25 Feb 2026 17:28:27 +0000</pubDate>
      <link>https://dev.to/nicolasmd/aether-a-compiled-actor-based-language-for-high-performance-concurrency-1kl2</link>
      <guid>https://dev.to/nicolasmd/aether-a-compiled-actor-based-language-for-high-performance-concurrency-1kl2</guid>
      <description>&lt;p&gt;Hi everyone,&lt;/p&gt;

&lt;p&gt;This has been a long path. Releasing this makes me both happy and anxious.&lt;/p&gt;

&lt;p&gt;Today I’m introducing &lt;strong&gt;Aether&lt;/strong&gt;, a compiled programming language built around the actor model and designed for high-performance concurrent systems.&lt;/p&gt;

&lt;h2&gt;
  
  
  Repository
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://github.com/nicolasmd87/aether" rel="noopener noreferrer"&gt;https://github.com/nicolasmd87/aether&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Documentation
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://github.com/nicolasmd87/aether/tree/main/docs" rel="noopener noreferrer"&gt;https://github.com/nicolasmd87/aether/tree/main/docs&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Aether is open source and available on GitHub.&lt;/p&gt;




&lt;h2&gt;
  
  
  Overview
&lt;/h2&gt;

&lt;p&gt;Aether treats concurrency as a &lt;strong&gt;core language concern&lt;/strong&gt; rather than a library feature.&lt;/p&gt;

&lt;p&gt;The programming model is based on &lt;strong&gt;actors and message passing&lt;/strong&gt;, with isolation enforced at the language level. Developers do not manage threads or locks directly — the runtime handles scheduling, message delivery, and multi-core execution.&lt;/p&gt;

&lt;p&gt;The compiler targets &lt;strong&gt;readable C code&lt;/strong&gt;, which:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Keeps the toolchain portable
&lt;/li&gt;
&lt;li&gt;Allows straightforward interoperability with existing C libraries
&lt;/li&gt;
&lt;li&gt;Makes the generated output fully inspectable
&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Runtime Architecture
&lt;/h2&gt;

&lt;p&gt;The runtime is designed with scalability and low contention in mind. It includes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Lock-free SPSC (single-producer, single-consumer) queues for actor communication
&lt;/li&gt;
&lt;li&gt;Per-core actor queues to minimize synchronization overhead
&lt;/li&gt;
&lt;li&gt;Work-stealing fallback scheduling for load balancing
&lt;/li&gt;
&lt;li&gt;Adaptive batching of messages under load
&lt;/li&gt;
&lt;li&gt;Zero-copy messaging where possible
&lt;/li&gt;
&lt;li&gt;NUMA-aware allocation strategies
&lt;/li&gt;
&lt;li&gt;Arena allocators and memory pools
&lt;/li&gt;
&lt;li&gt;Built-in benchmarking tools for measuring actor and message throughput
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The objective is to scale concurrent workloads across cores &lt;strong&gt;without exposing low-level synchronization primitives&lt;/strong&gt; to the developer.&lt;/p&gt;




&lt;h2&gt;
  
  
  Language and Tooling
&lt;/h2&gt;

&lt;p&gt;Aether supports &lt;strong&gt;type inference with optional annotations&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;The CLI toolchain provides integrated:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Project management
&lt;/li&gt;
&lt;li&gt;Build
&lt;/li&gt;
&lt;li&gt;Run
&lt;/li&gt;
&lt;li&gt;Test
&lt;/li&gt;
&lt;li&gt;Package
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;All as part of the standard distribution.&lt;/p&gt;

&lt;p&gt;The documentation covers:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Language semantics
&lt;/li&gt;
&lt;li&gt;Compiler design
&lt;/li&gt;
&lt;li&gt;Runtime internals
&lt;/li&gt;
&lt;li&gt;Architectural decisions
&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Current Status
&lt;/h2&gt;

&lt;p&gt;Aether is actively evolving.&lt;/p&gt;

&lt;p&gt;The compiler, runtime, and CLI are functional and suitable for experimentation and systems-oriented development.&lt;/p&gt;

&lt;p&gt;Current work focuses on:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Refining the concurrency model
&lt;/li&gt;
&lt;li&gt;Validating performance characteristics
&lt;/li&gt;
&lt;li&gt;Improving ergonomics
&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Feedback Welcome
&lt;/h2&gt;

&lt;p&gt;I would greatly appreciate feedback on:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The language design
&lt;/li&gt;
&lt;li&gt;Actor semantics
&lt;/li&gt;
&lt;li&gt;Runtime architecture (queue design, scheduling strategy)
&lt;/li&gt;
&lt;li&gt;Overall usability
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Thank you for taking the time to read.&lt;/p&gt;

</description>
      <category>c</category>
      <category>programming</category>
      <category>opensource</category>
    </item>
  </channel>
</rss>
