<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0" xmlns:cc="http://cyber.law.harvard.edu/rss/creativeCommonsRssModule.html">
    <channel>
        <title><![CDATA[Rustaceans - Medium]]></title>
        <description><![CDATA[Insights and Expertise from Rustaceans - Medium]]></description>
        <link>https://medium.com/rustaceans?source=rss----d11aa42eb8ad---4</link>
        <image>
            <url>https://cdn-images-1.medium.com/proxy/1*TGH72Nnw24QL3iV9IOm4VA.png</url>
            <title>Rustaceans - Medium</title>
            <link>https://medium.com/rustaceans?source=rss----d11aa42eb8ad---4</link>
        </image>
        <generator>Medium</generator>
        <lastBuildDate>Fri, 13 Nov 2026 20:45:52 GMT</lastBuildDate>
        <atom:link href="https://medium.com/feed/rustaceans" rel="self" type="application/rss+xml"/>
        <webMaster><![CDATA[yourfriends@medium.com]]></webMaster>
        <atom:link href="http://medium.superfeedr.com" rel="hub"/>
        <item>
            <title><![CDATA[Rust 1.100 Feels Like a Language Growing Up in Public]]></title>
            <link>https://medium.com/rustaceans/rust-1-100-feels-like-a-language-growing-up-in-public-fb4696cd3ce0?source=rss----d11aa42eb8ad---4</link>
            <guid isPermaLink="false">https://medium.com/p/fb4696cd3ce0</guid>
            <category><![CDATA[rust]]></category>
            <category><![CDATA[software-development]]></category>
            <category><![CDATA[rustlang]]></category>
            <category><![CDATA[rust-programming-language]]></category>
            <category><![CDATA[programming]]></category>
            <dc:creator><![CDATA[John Philip]]></dc:creator>
            <pubDate>Fri, 13 Nov 2026 09:46:49 GMT</pubDate>
            <atom:updated>2026-11-13T09:46:49.049Z</atom:updated>
            <content:encoded><![CDATA[<figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*xZTwXiFmIPG81bE_Gm7Cmw.png" /><figcaption>Image: Rust 1.100</figcaption></figure><p>There is a satisfaction in watching a release that is less about flashy new syntax and more about finally shipping the things people have been waiting on for years.</p><p>Rust 1.100 is one of those. The never type, custom allocators, proper dependency cooldowns, and cargo install finally respecting lockfiles by default do not read like marketing copy.</p><p>They read like the accumulated pressure of real production use finally forcing the language and tooling to close long-standing gaps.</p><p>The never type is the clearest signal of maturity.</p><p>An uninhabited type is not glamorous. It is the kind of feature that only becomes urgent once enough people have written enough careful code to feel its absence.</p><p>Being able to express <em>this path cannot produce a value</em> cleanly, and having pattern matching understand that impossibility, is the sort of correctness that compounds.</p><p>It is the difference between hoping the type system will help and knowing it will. The same spirit shows up in the allocator work and the unused-dependency warnings. These are not features that make demos prettier. They are features that make large codebases more honest about what they actually depend on and how they manage memory.</p><p>The supply-chain pieces matter more than most people will admit out loud.</p><p>Minimum publish age and the change to cargo install are direct responses to the last few years of registry attacks and the quiet risk of installing something that resolved differently than the author intended.</p><p>Cooldowns are imperfect. A patient attacker can still wait them out. But the existence of a configurable delay, combined with lockfile fidelity on install, is the language admitting that the ecosystem is now large enough to be a real target.</p><p>That admission is healthier than pretending every new crate version is automatically trustworthy.</p><p>The thread’s other recurring complaints are equally telling. They are the price of the guarantees people actually use.</p><p>The same type system and monomorphization that make the never type and custom allocators useful also generate work the compiler cannot simply ignore.</p><p>People who live in large Rust codebases know this trade-off intimately.</p><p>The fact that the release notes and the conversation still spend energy on incremental compile improvements and disk hygiene shows the project has not stopped caring about the daily friction even while it ships foundational language features.</p><p>What I take from 1.100 is not that Rust has solved its hard problems.</p><p>It is that the hard problems are now the right ones. The language is past the point of needing to prove it can be safe and fast.</p><p>It is in the long middle period where the work is making the safety and speed practical at scale, under real dependency graphs, with real attackers, and with real engineers who still have to wait for the compiler.</p><p>That is less exciting than a shiny 2.0, and more useful.</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=fb4696cd3ce0" width="1" height="1" alt=""><hr><p><a href="https://medium.com/rustaceans/rust-1-100-feels-like-a-language-growing-up-in-public-fb4696cd3ce0">Rust 1.100 Feels Like a Language Growing Up in Public</a> was originally published in <a href="https://medium.com/rustaceans">Rustaceans</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[I Built My Own Rust CLI Using Clap, Miette, and Tracing]]></title>
            <description><![CDATA[<div class="medium-feed-item"><p class="medium-feed-image"><a href="https://medium.com/rustaceans/i-built-my-own-rust-cli-using-clap-miette-and-tracing-d84bff90062b?source=rss----d11aa42eb8ad---4"><img src="https://cdn-images-1.medium.com/max/1408/1*pakX4gxs3kDG5T4JidLyHQ.jpeg" width="1408"></a></p><p class="medium-feed-snippet">I combined three libraries to create a reusable command-line application with structured arguments, readable diagnostic errors, and&#x2026;</p><p class="medium-feed-link"><a href="https://medium.com/rustaceans/i-built-my-own-rust-cli-using-clap-miette-and-tracing-d84bff90062b?source=rss----d11aa42eb8ad---4">Continue reading on Rustaceans »</a></p></div>]]></description>
            <link>https://medium.com/rustaceans/i-built-my-own-rust-cli-using-clap-miette-and-tracing-d84bff90062b?source=rss----d11aa42eb8ad---4</link>
            <guid isPermaLink="false">https://medium.com/p/d84bff90062b</guid>
            <category><![CDATA[cli-tool]]></category>
            <category><![CDATA[libraries]]></category>
            <category><![CDATA[rust]]></category>
            <category><![CDATA[coding]]></category>
            <category><![CDATA[programming]]></category>
            <dc:creator><![CDATA[Dr.Michael]]></dc:creator>
            <pubDate>Fri, 13 Nov 2026 09:30:00 GMT</pubDate>
            <atom:updated>2026-11-13T09:29:58.924Z</atom:updated>
        </item>
        <item>
            <title><![CDATA[Rust’s Type System Is All You Need]]></title>
            <link>https://medium.com/rustaceans/rusts-type-system-is-all-you-need-f9973076033d?source=rss----d11aa42eb8ad---4</link>
            <guid isPermaLink="false">https://medium.com/p/f9973076033d</guid>
            <category><![CDATA[functional-programming]]></category>
            <category><![CDATA[type-systems]]></category>
            <category><![CDATA[satire]]></category>
            <category><![CDATA[rust]]></category>
            <category><![CDATA[recursion]]></category>
            <dc:creator><![CDATA[Ein Monarch]]></dc:creator>
            <pubDate>Wed, 11 Nov 2026 10:17:08 GMT</pubDate>
            <atom:updated>2026-11-11T22:15:59.532Z</atom:updated>
            <content:encoded><![CDATA[<figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*aZmp3QQL-lXQck6URvjLSA.jpeg" /></figure><p>You’ve been programming Rust wrong.</p><p>Writing proper Rust is not a skill everyone has. Don’t worry though — you can still learn. You can write more performant code, yes, but more importantly, <em>cleaner</em> code.</p><p>In general, there are two main types of Rust programmers; both are wrong. Let me demonstrate with an example.</p><h3>What Not to Do</h3><p>We have the task of finding the max depth of a binary tree.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/748/1*iPExMHptIADNEYDJiUiPFQ.png" /></figure><p>The first programmer writes the following:</p><pre>pub fn max_depth(root: Option&lt;Rc&lt;RefCell&lt;TreeNode&gt;&gt;&gt;) -&gt; i32 {<br>    let mut stack = vec![(root, 0)]; //(node, current depth)<br>    let mut max_depth = -1;<br>  <br>    while let Some((node, depth)) = stack.pop() {<br>        match node {<br>            None =&gt; max_depth = std::cmp::max(max_depth, depth),<br>            Some(c) =&gt; {<br>                stack.push((c.borrow().left.clone(), depth+1));<br>                stack.push((c.borrow().right.clone(), depth+1));<br>            }<br>        }<br>    }<br><br>    max_depth<br>}</pre><p>This is not wrong code…but is this clean code?</p><p>Most definitely not. Even with all of Rust’s syntactic sugar —matches and while-lets — it’s still verbose and hard to skim.</p><p>The root of all unreadable code, frequently, is the use of imperative programming. It’s easy to write and easy to execute, but it rarely leads to good-looking code.</p><p>And Rust — with its claim of “supporting multiple paradigms” — does not help. Just because one has access to multiple paradigms doesn’t mean that there isn’t an objectively best paradigm for a task.</p><p>In this case, as in many, that objectively best paradigm is Functional Programming. Just take Haskell as an example: when you’re bound to recursions and first-class functions, you’re forced to write code that reads like English.</p><h3>Let’s Try A Functional Approach</h3><p>Our problem can easily be written as a recursion:<br>MaxDepth(tree) = 1+max(MaxDepth(tree.left), MaxDepth(tree.right))</p><p>We use this to write a functional programming approach:</p><pre>pub fn max_depth(root: Option&lt;Rc&lt;RefCell&lt;TreeNode&gt;&gt;&gt;) -&gt; i32 {<br>    match root {<br>        None =&gt; 0,<br>        Some(r) =&gt; std::cmp::max(<br>            max_depth(r.borrow().left.clone()),<br>            max_depth(r.borrow().right.clone())<br>        ) + 1<br>    }<br>}</pre><p>In fact, this is exactly what the second programmer would write.</p><p>It’s more readable and it’s still performant — time complexity is O(# nodes) and space complexity is O(1) (as long as you don’t think too hard).</p><p>But we can do so much better.</p><p>This…this is not pure functional programming — it’s functional programming <em>inspired</em>, and the readability suffers as a result. I mean, please — can you really say that it’s concise when it repeats max_depth(r.borrow().left.clone()) twice almost word-for-word?</p><p>And it’s not even pure: each call to Rc.clone() has side effects (specifically, incrementing a reference counter).</p><p>So, what do we do?</p><h3>A Real Functional Programming Solution</h3><p>We cannot paint a masterpiece from a faulty canvas. We need to start from scratch to build a perfect solution.</p><p>The problem with Rust is every resource your program relies on comes with bloat. Even something that’s supposed to be lightweight, like an i32 comes packaged with bounds checks and a variety of builtin functions — we are advanced developers; we don’t need training wheels.</p><p>So let’s start with a clean slate: unit structs.</p><pre>struct Zero;<br>struct Succ&lt;N&gt;(N);</pre><p>Unit structs are like ghosts. They disappear on compilation, costing us nothing: Rust’s promised 0-cost abstractions.</p><p>With two lines, we have created numbers:<br>- Zero represents 0<br>- Succ (short for Successor) takes N and returns N + 1</p><p>But wait, something’s wrong, you cry. Structs are types, not functions or values! What are you even saying!?</p><p>I see nothing wrong with that. I mean, does this not look like a number to you?</p><pre>type One = Succ&lt;Zero&gt;;<br>type Two = Succ&lt;One&gt;; //or Succ&lt;Succ&lt;Zero&gt;&gt;</pre><p>But don’t worry yourself too much; after all, in functional programming, are types and functions and values really any different from each other? And what does it matter as long as the code is correct and readable?</p><p>Fair, you say, but still: types only exist until compilation. How are we to get any work done with these “numbers” if they disappear on execution?</p><p>Remember, Rust has a powerful type system.</p><h3>Teaching The Compiler to Compare Two Numbers</h3><p>Sometimes, when explaining Rust, people say traits are like interfaces. This explanation couldn’t be more incorrect.</p><p>No; the developer that truly understands Rust knows that traits are mappings between specific input types and output types — basically functions that take and return types.</p><p>Let me show you by implementing a Max trait that returns the greater of two of our numbers.</p><p>There are 4 cases:<br>- Max(0,0)=0<br>- Max(N+1, 0)=N+1<br>- Max(0, N+1)=N+1<br>- Max(A+1, B+1)=Max(A,B)+1</p><blockquote>This is valid because we have only implemented 0 and Succ; it is impossible to input negative numbers, so A,B,N≥0. Yet again we see the elegance of Rust’s Type System: when we define things ourselves, we have less to deal with.</blockquote><blockquote>You know, I was actually thinking of starting a petition to make Rust’s Type System the 8th Wonder of the World — let me know if you’d be interested in signing.</blockquote><p>The code is simply English decorated with light dressings of syntax:</p><pre>trait Max&lt;A, B&gt; {<br>    type Output;<br>}<br><br>impl Max&lt;Zero,Zero&gt; for () {<br>    type Output = Zero;<br>}<br><br>impl&lt;N&gt; Max&lt;Zero,Succ&lt;N&gt;&gt; for () {<br>    type Output = Succ&lt;N&gt;;<br>}<br><br>impl&lt;N&gt; Max&lt;Succ&lt;N&gt;, Zero&gt; for () {<br>    type Output = Succ&lt;N&gt;;<br>}<br><br>impl&lt;A,B, SubMax&gt; Max&lt;Succ&lt;A&gt;, Succ&lt;B&gt;&gt; for ()<br>where (): Max&lt;A,B, Output=SubMax&gt; {<br>    type Output = Succ&lt;SubMax&gt;;<br>}</pre><p>Beautiful, isn’t it?</p><p>Don’t get distracted, though, we want to find the maximum depth of a tree.<br>For that, we need a tree in the first place.</p><p>So, in just 2 lines, we must declare:</p><h3>Let There Be Trees.</h3><pre>struct Node&lt;L, R&gt;(L, R);<br>struct Nil;</pre><p>Now we have exactly what we need (and only what we need).</p><p>Numbers, trees, and a max function., all without stack allocations, heap allocations, and useless function frames… lightweight and efficient, as all things should be.</p><p>Everything is immutable, so no borrow checker biting at our heels (not like it ever enforced cleaner code in the first place).</p><p>We finally weave everything together into one trait.</p><p>From before,<br>MaxDepth(Tree) = Max(MaxDepth(Tree.Left), MaxDepth(Tree.Right))+1</p><p>The code is child’s play:</p><pre>trait MaxDepth&lt;T&gt; {<br>  type Output;<br>}<br><br>impl MaxDepth&lt;Nil&gt; for () {<br>    type Output = Zero;<br>}<br><br>impl&lt;L, R, LDepth, RDepth, SubDepth&gt; MaxDepth&lt;Node&lt;L, R&gt;&gt; for ()<br>where<br>    (): MaxDepth&lt;L, Output=LDepth&gt;,<br>    (): MaxDepth&lt;R, Output=RDepth&gt;,<br>    (): Max&lt;LDepth, RDepth, Output=SubDepth&gt; {<br>        type Output = Succ&lt;SubDepth&gt;;<br>}</pre><p>That is everything — isn’t it elegant?</p><p>Let us test it:</p><pre>fn main() {<br>    type MyTree = Node&lt;Node&lt;Node&lt;Nil,Nil&gt;,Nil&gt;,Node&lt;Nil,Nil&gt;&gt;;<br><br>    type MaximumDepth = &lt;() as MaxDepth&lt;MyTree&gt;&gt;::Output;<br>    println!(&quot;{}&quot;, type_name::&lt;MaximumDepth&gt;());<br>}</pre><p>Running this, we get:</p><pre> main::Succ&lt;main::Succ&lt;main::Succ&lt;main::Zero&gt;&gt;&gt;</pre><p>Succ&lt;Succ&lt;Succ&lt;Zero&gt;&gt;&gt; is 3, exactly the depth of our tree!</p><p>Not only is our implementation readable and correct, it’s also extremely performant: types are resolved at compile time. The final code simply holds the result as a static string, so runtime performance is O(1) for both time and memory!</p><p>And the best part is the program is self-documenting. If someone doesn’t understand how Max works, they don’t need to parse obscure, out of date documentation on the web — they can just scroll up and read the rules themselves.</p><p>I know, you’re amazed, but you still might have one final question: if Rust resolves types at compile time, we must know the input at compile time. How would we calculate the depth of a tree only known at runtime?</p><h3>The Final Step</h3><p>This is a genuine issue with the Rust language (though I believe there are people working to resolve this disconnect between true Rust and imperfect code).</p><p>For now, all we can do is a helper file—nothing out of the ordinary, really: you know what I’m talking about if you’ve ever seen a professional Rust codebase:</p><pre>use std::fs;<br>use std::process::Command;<br><br>fn replace_line(content: &amp;str, index: usize, text: &amp;str) -&gt; String {<br>    //even if circumstances prevent us from being perfectly pure,<br>    //we can still give our best shot<br>    content.lines()<br>        .enumerate()<br>        .map(|(i, line)| if i == index { text } else { line })<br>        .collect::&lt;Vec&lt;_&gt;&gt;()<br>        .join(&quot;\n&quot;)<br>    }<br><br>fn main() -&gt; Result&lt;(), Box&lt;dyn std::error::Error&gt;&gt; {<br>    let tree = &quot;Node&lt;Nil, Node&lt;Nil, Nil&gt;&gt;&quot;;<br>    <br>    //a good Rust developer knows to wrap impure code in unsafe<br>    //this helps isolate code that could cause errors<br>    unsafe {<br>        let content = fs::read_to_string(&quot;main.rs&quot;)?;<br><br>        //overwrite the previous definition of MyTree, at line 53:<br>        let updated = replace_line(<br>            &amp;content,<br>            53,<br>            &amp;format!(&quot;\ttype MyTree = {};&quot;, tree)<br>        );<br>        <br>        fs::write(&quot;main.rs&quot;, updated)?;<br><br>        let _ = Command::new(&quot;rust/rustc/bin/rustc&quot;)<br>            .arg(&quot;main.rs&quot;)<br>            .output()<br>            .expect(&quot;Missing copy of rustc in /rust/rustc; please install so that the purity of this program can be maintained.&quot;);        <br>        <br>        let output = String::from_utf8_lossy(<br>            &amp;Command::new(&quot;./main&quot;)<br>                .output()<br>                .unwrap()<br>                .stdout<br>            )<br>            .trim_end()<br>            .to_string();<br><br>        println!(&quot;Depth: {}!&quot;, output);<br>    }<br><br>    Ok(())<br>}</pre><p>Some of you may object: this isn’t functionally pure! Running commands and writing to files interact with the operating system, which means side effects!</p><ol><li>We’ll package a separate copy of rustc as part of the program to ensure easy maintainability. rustc is essentially a function applied on files; it’s basically pure.</li><li>Writing to files is impure, yes. It really does make the code ugly. Until they release a fully functionally-pure computer (fingers crossed for 2027) we have no other choice than to properly notate impure code with unsafe.</li></ol><p>So, our program is done.</p><h3>One More Word of Advice</h3><p>With complicated calculations, Rust’s compiler may sometimes return this neat little error message:</p><pre>error[E0275]: overflow evaluating the requirement `(): Max&lt;Zero, Succ&lt;_&gt;&gt;`<br>  --&gt; main.rs:56:32<br>   |<br>56 |     println!(&quot;{}&quot;, type_name::&lt;MaximumDepth&gt;());<br>   |                                ^^^^^^^^^^^^<br>   |<br>   = help: consider increasing the recursion limit by adding a `#![recursion_limit = &quot;256&quot;]` attribute to your crate (`pure_sol`)<br>note: required for `()` to implement `Max&lt;Succ&lt;Zero&gt;, Succ&lt;Succ&lt;_&gt;&gt;&gt;`<br>  --&gt; main.rs:27:19<br>   |<br>27 | impl&lt;A,B, SubMax&gt; Max&lt;Succ&lt;A&gt;, Succ&lt;B&gt;&gt; for ()<br>   |                   ^^^^^^^^^^^^^^^^^^^^^     ^^<br>28 | where (): Max&lt;A,B, Output=SubMax&gt; {<br>   |                    ------------- unsatisfied trait bound introduced here<br>   = note: 125 redundant requirements hidden<br>   = note: required for `()` to implement `Max&lt;Succ&lt;Succ&lt;Succ&lt;Succ&lt;Succ&lt;Succ&lt;Succ&lt;Succ&lt;Succ&lt;Succ&lt;...&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;, ...&gt;`<br>note: required for `()` to implement `MaxDepth&lt;Node&lt;Node&lt;Nil, Nil&gt;, Nil&gt;&gt;`<br>  --&gt; main.rs:44:38<br>   |<br>44 | impl&lt;L, R, LDepth, RDepth, SubDepth&gt; MaxDepth&lt;Node&lt;L, R&gt;&gt; for ()<br>   |                                      ^^^^^^^^^^^^^^^^^^^^     ^^<br>...<br>48 |     (): Max&lt;LDepth, RDepth, Output=SubDepth&gt; {<br>   |                             --------------- unsatisfied trait bound introduced here<br>   = note: 1 redundant requirement hidden<br>   = note: required for `()` to implement `MaxDepth&lt;Node&lt;Node&lt;Node&lt;Nil, Nil&gt;, Nil&gt;, Node&lt;Nil, Nil&gt;&gt;&gt;`<br>   = note: the full name for the type has been written to &#39;main.long-type-1146034684176798783.txt&#39;<br>   = note: consider using `--verbose` to print the full type name to the console</pre><p>For some reason, Rust enforces a recursion limit (why would you ever want less of a good thing?). Luckily for us, though, we can change it to our will. I’d strongly recommend putting</p><pre>![recursion_limit=&quot;18000000000000000000&quot;]</pre><p>before every single program to do away with this nonissue.</p><blockquote>Why stop at 18,000,000,000,000,000,000?</blockquote><blockquote>Any higher and the Rust compiler complains that the “limit is too large” — which surely must be a mistake; I’m planning on submitting an issue to Rust’s GitHub sometime this week.</blockquote><h3>Conclusion</h3><p>This type of programming is not for everyone, but if you’ve made it this far you clearly have potential.</p><p>You know to stop relying on the training wheels — loops, mutation — and you know how to derive the things you need instead using unnecessary bloated alternatives. All that’s left is to go forth and write some production-ready code!</p><p>The article’s code is available <a href="https://www.dropbox.com/scl/fo/tsdqb8llbztrjq3s7uz8v/AIH-KOtEcVzh6T8yTmQabMs?rlkey=klt2z0m3lyu2dwkte7w4exohv&amp;st=lpiyc21a&amp;dl=0">here</a> for reference in your own projects.</p><p>Sincerely,<br>Ein Monarch.</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=f9973076033d" width="1" height="1" alt=""><hr><p><a href="https://medium.com/rustaceans/rusts-type-system-is-all-you-need-f9973076033d">Rust’s Type System Is All You Need</a> was originally published in <a href="https://medium.com/rustaceans">Rustaceans</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[7 Rust Crates I Wish I Had Discovered Earlier as a Developer]]></title>
            <description><![CDATA[<div class="medium-feed-item"><p class="medium-feed-image"><a href="https://medium.com/rustaceans/7-rust-crates-i-wish-i-had-discovered-earlier-as-a-developer-cfe5ec865e57?source=rss----d11aa42eb8ad---4"><img src="https://cdn-images-1.medium.com/max/1408/1*Jhm4s3BREculCm6NfmVMCA.jpeg" width="1408"></a></p><p class="medium-feed-snippet">I explored seven libraries that simplify common engineering problems, covering error handling, serialization, asynchronous execution&#x2026;</p><p class="medium-feed-link"><a href="https://medium.com/rustaceans/7-rust-crates-i-wish-i-had-discovered-earlier-as-a-developer-cfe5ec865e57?source=rss----d11aa42eb8ad---4">Continue reading on Rustaceans »</a></p></div>]]></description>
            <link>https://medium.com/rustaceans/7-rust-crates-i-wish-i-had-discovered-earlier-as-a-developer-cfe5ec865e57?source=rss----d11aa42eb8ad---4</link>
            <guid isPermaLink="false">https://medium.com/p/cfe5ec865e57</guid>
            <category><![CDATA[developer]]></category>
            <category><![CDATA[crate]]></category>
            <category><![CDATA[rust]]></category>
            <category><![CDATA[programming]]></category>
            <category><![CDATA[libraries]]></category>
            <dc:creator><![CDATA[Dr.Michael]]></dc:creator>
            <pubDate>Wed, 11 Nov 2026 10:16:54 GMT</pubDate>
            <atom:updated>2026-11-11T10:16:53.715Z</atom:updated>
        </item>
        <item>
            <title><![CDATA[C Is Based. Rust Is Just Coping]]></title>
            <link>https://medium.com/rustaceans/c-is-based-rust-is-just-coping-9d6c586fc8d2?source=rss----d11aa42eb8ad---4</link>
            <guid isPermaLink="false">https://medium.com/p/9d6c586fc8d2</guid>
            <category><![CDATA[rustlang]]></category>
            <category><![CDATA[rust-programming-language]]></category>
            <category><![CDATA[rust]]></category>
            <category><![CDATA[programming]]></category>
            <category><![CDATA[rust-programming]]></category>
            <dc:creator><![CDATA[John Philip]]></dc:creator>
            <pubDate>Wed, 11 Nov 2026 10:16:30 GMT</pubDate>
            <atom:updated>2026-11-11T10:16:30.707Z</atom:updated>
            <content:encoded><![CDATA[<h4>The Familiar Jab</h4><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*hpkVBIab4w8VBNfDy1Iemw.png" /></figure><p>Every few months the same line appears: Rust is fine, but when you need real performance on bare metal you reach for C, and the people who care about memory safety get predictably loud about it.</p><p>The eye-roll emoji is doing a lot of work. I have written enough of both languages to feel the pull of the claim and the fatigue of the reaction.</p><p>C still wins certain arguments cleanly. The abstract machine is thin. The compiler is a thin translator. You can reason about every load and store without a borrow checker or a runtime intervening.</p><p>On constrained hardware, or in the deepest layers of an operating system, that transparency remains valuable.</p><p>When the problem is literally <em>make this interrupt handler do the absolute minimum work possible,</em> C’s lack of ceremony is not a bug. It is the point.</p><p>Where the statement starts to fray is the word <em>optimal</em>. Optimal for what, measured over what lifetime, and paid for by whom? Peak micro-benchmark numbers are easy to chase.</p><p>The harder numbers are the ones that appear after the code has lived for years: the time spent hunting use-after-free bugs, the security advisories that keep arriving, the quiet tax of undefined behavior that only surfaces under a particular compiler flag or CPU model.</p><p>Rust’s ownership model is not free either.</p><p>It forces decisions earlier and sometimes makes the code uglier. In return it removes entire classes of mistakes that C simply leaves on the table for the programmer to manage forever.</p><p>On bare metal the difference is not theoretical.</p><p>Several production kernels and embedded systems now ship significant amounts of Rust precisely because the performance cost was measured and found acceptable, while the safety benefit was not.</p><p>The <em>great power, great responsibility</em> line is accurate and incomplete at the same time.</p><p>C does give power. The responsibility part is usually paid by someone else later.</p><p>Treating that deferred cost as a badge of seriousness is a cultural habit more than an engineering one.</p><p>The better habit is to decide, for each layer of the stack, whether the power is worth the ongoing cognitive and operational load.</p><p>I still reach for C when the constraints demand it. I reach for Rust when the same constraints can be met without accepting preventable classes of failure.</p><p>The interesting work is knowing which trade-offs you are actually making and being honest about who will pay for them.</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=9d6c586fc8d2" width="1" height="1" alt=""><hr><p><a href="https://medium.com/rustaceans/c-is-based-rust-is-just-coping-9d6c586fc8d2">C Is Based. Rust Is Just Coping</a> was originally published in <a href="https://medium.com/rustaceans">Rustaceans</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[ Systemd Finally Lets Rust In]]></title>
            <link>https://medium.com/rustaceans/systemd-finally-lets-rust-in-e5450c481118?source=rss----d11aa42eb8ad---4</link>
            <guid isPermaLink="false">https://medium.com/p/e5450c481118</guid>
            <category><![CDATA[rust-programming-language]]></category>
            <category><![CDATA[rust]]></category>
            <category><![CDATA[programming]]></category>
            <category><![CDATA[rustlang]]></category>
            <category><![CDATA[software-development]]></category>
            <dc:creator><![CDATA[Rustaceans Editors]]></dc:creator>
            <pubDate>Mon, 09 Nov 2026 18:04:57 GMT</pubDate>
            <atom:updated>2026-11-09T18:04:57.741Z</atom:updated>
            <content:encoded><![CDATA[<h4>Today’s Issue: Rewriting Discord in Rust, Creating Strings the Wrong Way, and Giving Fortran a Rust Migration Plan.</h4><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*qPEgKDD2hdKKnaWmfSHWug.png" /><figcaption>Image: systemd logo on a white background banner</figcaption></figure><p>This is a copy of our weekly Rust email newsletter.</p><p>If you’d like to receive these emails in your inbox, you can subscribe on <a href="https://weeklyrust.substack.com/">Substack</a>.</p><p>Meanwhile, you can read the article through the link down below</p><p><a href="https://weeklyrust.substack.com/p/systemd-finally-lets-rust-in?r=327yzu&amp;utm_campaign=post-expanded-share&amp;utm_medium=web">🦀 Systemd Finally Lets Rust In</a></p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=e5450c481118" width="1" height="1" alt=""><hr><p><a href="https://medium.com/rustaceans/systemd-finally-lets-rust-in-e5450c481118">🦀 Systemd Finally Lets Rust In</a> was originally published in <a href="https://medium.com/rustaceans">Rustaceans</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Axum vs. Actix Web: I Built the Same REST API Using Both Rust Frameworks]]></title>
            <description><![CDATA[<div class="medium-feed-item"><p class="medium-feed-image"><a href="https://medium.com/rustaceans/axum-vs-actix-web-i-built-the-same-rest-api-using-both-rust-frameworks-f45809656456?source=rss----d11aa42eb8ad---4"><img src="https://cdn-images-1.medium.com/max/1408/1*5RgBVDs0sxFPCPQhsX5Brg.jpeg" width="1408"></a></p><p class="medium-feed-snippet">I implemented identical API endpoints, authentication, database access, middleware, and request validation using both frameworks. I&#x2026;</p><p class="medium-feed-link"><a href="https://medium.com/rustaceans/axum-vs-actix-web-i-built-the-same-rest-api-using-both-rust-frameworks-f45809656456?source=rss----d11aa42eb8ad---4">Continue reading on Rustaceans »</a></p></div>]]></description>
            <link>https://medium.com/rustaceans/axum-vs-actix-web-i-built-the-same-rest-api-using-both-rust-frameworks-f45809656456?source=rss----d11aa42eb8ad---4</link>
            <guid isPermaLink="false">https://medium.com/p/f45809656456</guid>
            <category><![CDATA[rust]]></category>
            <category><![CDATA[actix-web]]></category>
            <category><![CDATA[axum]]></category>
            <category><![CDATA[api]]></category>
            <category><![CDATA[programming]]></category>
            <dc:creator><![CDATA[Dr.Michael]]></dc:creator>
            <pubDate>Mon, 09 Nov 2026 11:33:48 GMT</pubDate>
            <atom:updated>2026-11-09T11:33:46.742Z</atom:updated>
        </item>
        <item>
            <title><![CDATA[ What Happens After a Rust Panic]]></title>
            <description><![CDATA[<div class="medium-feed-item"><p class="medium-feed-image"><a href="https://medium.com/rustaceans/what-happens-after-a-rust-panic-c1a2c60bd102?source=rss----d11aa42eb8ad---4"><img src="https://cdn-images-1.medium.com/max/1024/1*oOqzP63T6LQR2i6jhI1T3Q.png" width="1024"></a></p><p class="medium-feed-snippet">Unwinding, landing pads, and the real price of panic=abort</p><p class="medium-feed-link"><a href="https://medium.com/rustaceans/what-happens-after-a-rust-panic-c1a2c60bd102?source=rss----d11aa42eb8ad---4">Continue reading on Rustaceans »</a></p></div>]]></description>
            <link>https://medium.com/rustaceans/what-happens-after-a-rust-panic-c1a2c60bd102?source=rss----d11aa42eb8ad---4</link>
            <guid isPermaLink="false">https://medium.com/p/c1a2c60bd102</guid>
            <category><![CDATA[performance]]></category>
            <category><![CDATA[rust]]></category>
            <category><![CDATA[software-engineering]]></category>
            <category><![CDATA[programming]]></category>
            <category><![CDATA[systems-programming]]></category>
            <dc:creator><![CDATA[Enzo Lombardi]]></dc:creator>
            <pubDate>Sun, 08 Nov 2026 12:05:39 GMT</pubDate>
            <atom:updated>2026-11-08T12:05:40.598Z</atom:updated>
        </item>
        <item>
            <title><![CDATA[Rust is amazing, as long as I’m not the one writing it]]></title>
            <description><![CDATA[<div class="medium-feed-item"><p class="medium-feed-image"><a href="https://medium.com/rustaceans/why-is-rust-so-popular-javascript-developer-9bba4700b4ef?source=rss----d11aa42eb8ad---4"><img src="https://cdn-images-1.medium.com/max/1672/1*Aww_u0bfLYyC-FgjbCFgOA.png" width="1672"></a></p><p class="medium-feed-snippet">The creator of Ruby on Rails says reading Rust is like &#x201C;pouring acid in my eyes.&#x201D; Yet he loves it. I wanted to understand why.</p><p class="medium-feed-link"><a href="https://medium.com/rustaceans/why-is-rust-so-popular-javascript-developer-9bba4700b4ef?source=rss----d11aa42eb8ad---4">Continue reading on Rustaceans »</a></p></div>]]></description>
            <link>https://medium.com/rustaceans/why-is-rust-so-popular-javascript-developer-9bba4700b4ef?source=rss----d11aa42eb8ad---4</link>
            <guid isPermaLink="false">https://medium.com/p/9bba4700b4ef</guid>
            <category><![CDATA[javascript]]></category>
            <category><![CDATA[artificial-intelligence]]></category>
            <category><![CDATA[web-development]]></category>
            <category><![CDATA[programming]]></category>
            <category><![CDATA[rust]]></category>
            <dc:creator><![CDATA[Justice Ekemezie]]></dc:creator>
            <pubDate>Sun, 08 Nov 2026 07:34:38 GMT</pubDate>
            <atom:updated>2026-11-08T07:34:37.567Z</atom:updated>
        </item>
        <item>
            <title><![CDATA[Asahi Linux’s Grind Toward the Mainline]]></title>
            <link>https://medium.com/rustaceans/asahi-linuxs-grind-toward-the-mainline-84859595ece7?source=rss----d11aa42eb8ad---4</link>
            <guid isPermaLink="false">https://medium.com/p/84859595ece7</guid>
            <category><![CDATA[rust-programming-language]]></category>
            <category><![CDATA[programming]]></category>
            <category><![CDATA[rust]]></category>
            <category><![CDATA[rust-programming]]></category>
            <category><![CDATA[rustlang]]></category>
            <dc:creator><![CDATA[John Philip]]></dc:creator>
            <pubDate>Sun, 08 Nov 2026 04:23:45 GMT</pubDate>
            <atom:updated>2026-11-08T04:23:45.036Z</atom:updated>
            <content:encoded><![CDATA[<figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*clqWmxLpAUJSR9an" /><figcaption>Photo by <a href="https://unsplash.com/@freezer_nico?utm_source=medium&amp;utm_medium=referral">Freezer</a> on <a href="https://unsplash.com?utm_source=medium&amp;utm_medium=referral">Unsplash</a></figcaption></figure><p>Reading the Linux 6.14 progress report from the Asahi team feels like watching a group of engineers finally get room to breathe after years of carrying an entire platform on their backs.</p><p>The numbers alone tell the story: more than ninety thousand lines added across twelve hundred and fifty patches, plus the usual constellation of downstream forks for U-Boot, Mesa, virglrenderer, and Flatpak.</p><p>That is a full-time job that never ends, especially when every upstream Rust abstraction merge forces another painful rebase.</p><p>What stands out is the deliberate shift in priorities.</p><p>After the administrative dust settled from the leadership change, the team put the glamorous work on hold and focused on the unglamorous necessity of getting code accepted upstream.</p><p>The ISP driver, the Touchbar controllers, the TAS amplifier extensions, the steady stream of smaller fixes: these are the patches that actually reduce the maintenance tax.</p><p>Anyone who has maintained a long-lived out-of-tree driver knows exactly how corrosive that tax becomes.</p><p>Janne’s ongoing work keeping the patch set alive against an accelerating Rust abstraction cadence is the kind of thankless effort that decides whether a project survives or collapses under its own weight.</p><p>The microphone support is the part that feels most characteristically Asahi.</p><p>Reverse-engineering the Always-On Processor, writing a stub for the Secure Enclave, then building Triforce because three closely spaced PDM microphones are otherwise useless.</p><p>The story of wrestling with immature scientific libraries in Rust, dusting off high-school maths and university statistics, and ending up with something that actually works on the first try is pure engineering satisfaction.</p><p>It is the opposite of the polished demo. It is the messy, iterative reality of making hardware that was never designed for you behave like it belongs.</p><p>Community funding has changed the equation.</p><p>Buying the next Mac no longer means deciding between hardware and rent.</p><p>CI infrastructure that should have existed years ago is finally possible. The project can show up at conferences without financial stress.</p><p>That is the difference between a volunteer effort that burns people out and a sustainable effort that can keep shipping.</p><p>The real measure of progress is the shrinking delta between what Asahi carries and what the mainline kernel already contains.</p><p>Every accepted driver, every cleaned-up abstraction, every bit of maintenance load removed is a step toward the day when Asahi becomes just another set of well-supported Apple Silicon platforms instead of a heroic parallel tree.</p><p>That is the work that matters, and it is the work they are choosing to do first.</p><p>Reference:</p><p><a href="https://asahilinux.org/2025/03/progress-report-6-14/">Progress Report: Linux 6.14 - Asahi Linux</a></p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=84859595ece7" width="1" height="1" alt=""><hr><p><a href="https://medium.com/rustaceans/asahi-linuxs-grind-toward-the-mainline-84859595ece7">Asahi Linux’s Grind Toward the Mainline</a> was originally published in <a href="https://medium.com/rustaceans">Rustaceans</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
    </channel>
</rss>