<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Rust on Devcartes</title>
    <link>https://devcartes.de/tags/rust/</link>
    <description>Recent content in Rust on Devcartes</description>
    <generator>Hugo -- gohugo.io</generator>
    <language>de</language>
    <lastBuildDate>Wed, 11 Mar 2026 00:00:00 +0100</lastBuildDate><atom:link href="https://devcartes.de/tags/rust/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>Rusty Bytes #1 - Traits, Monomorphisierung und Dynamic Dispatch</title>
      <link>https://devcartes.de/posts/rusty-bytes/traits/</link>
      <pubDate>Wed, 11 Mar 2026 00:00:00 +0100</pubDate>
      
      <guid>https://devcartes.de/posts/rusty-bytes/traits/</guid>
      <description>
&lt;h2 class=&#34;relative group&#34;&gt;Was sind Traits?
    &lt;div id=&#34;was-sind-traits&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;
    
    &lt;span
        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none&#34;&gt;
        &lt;a class=&#34;text-primary-300 dark:text-neutral-700 !no-underline&#34; href=&#34;#was-sind-traits&#34; aria-label=&#34;Anker&#34;&gt;#&lt;/a&gt;
    &lt;/span&gt;
    
&lt;/h2&gt;
&lt;p&gt;Traits sind Rusts Version von Interfaces.
Ein Trait definiert eine Schnittstelle, eine Menge von Methoden, die ein Typ implementieren muss, außer es gibt eine Standardimplementierung.
Wer schon mit Interfaces aus C#, Java oder Kotlin gearbeitet hat, kennt das Konzept.&lt;/p&gt;
&lt;div class=&#34;highlight-wrapper&#34;&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-rust&#34; data-lang=&#34;rust&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;trait&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Greet&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;fn&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;hello&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;amp;&lt;/span&gt;&lt;span class=&#34;bp&#34;&gt;self&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-&amp;gt; &lt;span class=&#34;nb&#34;&gt;String&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;struct&lt;/span&gt; &lt;span class=&#34;nc&#34;&gt;German&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;struct&lt;/span&gt; &lt;span class=&#34;nc&#34;&gt;English&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;impl&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Greet&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;for&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;German&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;fn&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;hello&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;amp;&lt;/span&gt;&lt;span class=&#34;bp&#34;&gt;self&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-&amp;gt; &lt;span class=&#34;nb&#34;&gt;String&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;String&lt;/span&gt;::&lt;span class=&#34;n&#34;&gt;from&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;Hallo!&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;impl&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Greet&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;for&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;English&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;fn&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;hello&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;amp;&lt;/span&gt;&lt;span class=&#34;bp&#34;&gt;self&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-&amp;gt; &lt;span class=&#34;nb&#34;&gt;String&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;String&lt;/span&gt;::&lt;span class=&#34;n&#34;&gt;from&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;Hello!&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;Traits können auch eine &lt;strong&gt;Standardimplementierung&lt;/strong&gt; mitbringen, die ein Typ überschreiben kann aber nicht muss:&lt;/p&gt;
&lt;div class=&#34;highlight-wrapper&#34;&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-rust&#34; data-lang=&#34;rust&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;trait&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Greet&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;fn&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;hello&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;amp;&lt;/span&gt;&lt;span class=&#34;bp&#34;&gt;self&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-&amp;gt; &lt;span class=&#34;nb&#34;&gt;String&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;String&lt;/span&gt;::&lt;span class=&#34;n&#34;&gt;from&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;Hi!&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;So weit, so bekannt.&lt;/p&gt;
&lt;p&gt;Interessant wird es, wenn man Traits als Parameter verwendet, denn da beginnt die eigentliche Frage:
Was passiert dann zur Compile-Zeit und welche Auswirkungen hat es auf die Laufzeit?&lt;/p&gt;
&lt;hr&gt;

&lt;h2 class=&#34;relative group&#34;&gt;Monomorphisierung – Polymorphismus zur Compile-Zeit
    &lt;div id=&#34;monomorphisierung--polymorphismus-zur-compile-zeit&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;
    
    &lt;span
        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none&#34;&gt;
        &lt;a class=&#34;text-primary-300 dark:text-neutral-700 !no-underline&#34; href=&#34;#monomorphisierung--polymorphismus-zur-compile-zeit&#34; aria-label=&#34;Anker&#34;&gt;#&lt;/a&gt;
    &lt;/span&gt;
    
&lt;/h2&gt;
&lt;p&gt;Wenn eine Funktion einen generischen Typ mit Trait-Bound erwartet, erzeugt der Rust-Compiler für jeden konkreten Typ, mit dem die Funktion aufgerufen wird, eine eigene spezialisierte Version.
Das nennt sich &lt;strong&gt;Monomorphisierung&lt;/strong&gt;.&lt;/p&gt;
&lt;div class=&#34;highlight-wrapper&#34;&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-rust&#34; data-lang=&#34;rust&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;fn&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;greet&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;T&lt;/span&gt;: &lt;span class=&#34;nc&#34;&gt;Greet&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;g&lt;/span&gt;: &lt;span class=&#34;kp&#34;&gt;&amp;amp;&lt;/span&gt;&lt;span class=&#34;nc&#34;&gt;T&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;fm&#34;&gt;println!&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;{}&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;g&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;hello&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;());&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;Der Compiler sieht, dass &lt;code&gt;greet&lt;/code&gt; mit &lt;code&gt;German&lt;/code&gt; und &lt;code&gt;English&lt;/code&gt; aufgerufen wird, und erzeugt intern je eine Funktion für Englisch und eine für Deutsch:&lt;/p&gt;
&lt;div class=&#34;highlight-wrapper&#34;&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-rust&#34; data-lang=&#34;rust&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;fn&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;greet_german&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;g&lt;/span&gt;: &lt;span class=&#34;kp&#34;&gt;&amp;amp;&lt;/span&gt;&lt;span class=&#34;nc&#34;&gt;German&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;fm&#34;&gt;println!&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;{}&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;g&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;hello&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;());&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;fn&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;greet_english&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;g&lt;/span&gt;: &lt;span class=&#34;kp&#34;&gt;&amp;amp;&lt;/span&gt;&lt;span class=&#34;nc&#34;&gt;English&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;fm&#34;&gt;println!&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;{}&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;g&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;hello&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;());&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;Das ist gleichbedeutend mit dem &lt;code&gt;impl Trait&lt;/code&gt;-Syntax, der etwas lesbarer ist:&lt;/p&gt;
&lt;div class=&#34;highlight-wrapper&#34;&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-rust&#34; data-lang=&#34;rust&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;fn&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;greet&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;g&lt;/span&gt;: &lt;span class=&#34;kp&#34;&gt;&amp;amp;&lt;/span&gt;&lt;span class=&#34;nc&#34;&gt;impl&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Greet&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;fm&#34;&gt;println!&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;{}&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;g&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;hello&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;());&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;Vorteil:&lt;/strong&gt;&lt;br&gt;
Zur Laufzeit gibt es keinen Overhead. Der Compiler kennt den konkreten Typ, kann ihn inline optimieren und direkt den richtigen Funktionsaufruf einsetzen.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Nachteil:&lt;/strong&gt;&lt;br&gt;
Die Binärgröße wächst, denn für jeden Typ, mit dem die Funktion genutzt wird, landet eine eigene Kopie im kompilierten Code.&lt;/p&gt;
&lt;hr&gt;

&lt;h2 class=&#34;relative group&#34;&gt;Dynamic Dispatch – Polymorphismus zur Laufzeit
    &lt;div id=&#34;dynamic-dispatch--polymorphismus-zur-laufzeit&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;
    
    &lt;span
        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none&#34;&gt;
        &lt;a class=&#34;text-primary-300 dark:text-neutral-700 !no-underline&#34; href=&#34;#dynamic-dispatch--polymorphismus-zur-laufzeit&#34; aria-label=&#34;Anker&#34;&gt;#&lt;/a&gt;
    &lt;/span&gt;
    
&lt;/h2&gt;
&lt;p&gt;Manchmal ist der konkrete Typ erst zur Laufzeit bekannt, so zum Beispiel wenn verschiedene Typen in einer Liste gesammelt werden sollen.&lt;/p&gt;
&lt;p&gt;Hier kommt &lt;code&gt;dyn Trait&lt;/code&gt; ins Spiel.&lt;/p&gt;
&lt;div class=&#34;highlight-wrapper&#34;&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-rust&#34; data-lang=&#34;rust&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;fn&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;greet&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;g&lt;/span&gt;: &lt;span class=&#34;kp&#34;&gt;&amp;amp;&lt;/span&gt;&lt;span class=&#34;nc&#34;&gt;dyn&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Greet&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;fm&#34;&gt;println!&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;{}&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;g&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;hello&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;());&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;Statt einer spezialisierten Funktion pro Typ erzeugt der Compiler ein &lt;strong&gt;Trait Object&lt;/strong&gt;.
Das ist ein sogenannter &lt;strong&gt;Fat Pointer&lt;/strong&gt;, der aus zwei Teilen besteht, einem Zeiger auf die Daten und einem Zeiger auf eine &lt;strong&gt;vtable&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;Die vtable wiederum ist eine Tabelle mit Funktionszeigern für alle Methoden des Traits, wo zur Laufzeit die richtige Implementierung nachgeschlagen und aufgerufen wird.&lt;/p&gt;
&lt;div class=&#34;highlight-wrapper&#34;&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-rust&#34; data-lang=&#34;rust&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kd&#34;&gt;let&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;greeters&lt;/span&gt;: &lt;span class=&#34;nb&#34;&gt;Vec&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;Box&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;dyn&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Greet&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&amp;gt;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;fm&#34;&gt;vec!&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;Box&lt;/span&gt;::&lt;span class=&#34;n&#34;&gt;new&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;German&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;),&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;Box&lt;/span&gt;::&lt;span class=&#34;n&#34;&gt;new&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;English&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;),&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;];&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;for&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;g&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;in&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;amp;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;greeters&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;fm&#34;&gt;println!&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;{}&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;g&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;hello&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;());&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;Das wäre mit Monomorphisierung nicht möglich, da der Compiler den Typ jedes Eintrags zur Compile-Zeit kennen müsste.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Vorteil:&lt;/strong&gt;&lt;br&gt;
Flexibel, kleinere Binärgröße, heterogene Collections möglich.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Nachteil:&lt;/strong&gt;&lt;br&gt;
Laufzeit-Overhead durch den vtable-Lookup, keine Inlining-Optimierungen möglich.&lt;/p&gt;
&lt;hr&gt;

&lt;h2 class=&#34;relative group&#34;&gt;Wann was?
    &lt;div id=&#34;wann-was&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;
    
    &lt;span
        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none&#34;&gt;
        &lt;a class=&#34;text-primary-300 dark:text-neutral-700 !no-underline&#34; href=&#34;#wann-was&#34; aria-label=&#34;Anker&#34;&gt;#&lt;/a&gt;
    &lt;/span&gt;
    
&lt;/h2&gt;
&lt;table&gt;
  &lt;thead&gt;
      &lt;tr&gt;
          &lt;th&gt;&lt;/th&gt;
          &lt;th&gt;&lt;code&gt;impl Trait&lt;/code&gt; / Generics&lt;/th&gt;
          &lt;th&gt;&lt;code&gt;dyn Trait&lt;/code&gt;&lt;/th&gt;
      &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;strong&gt;Auflösung&lt;/strong&gt;&lt;/td&gt;
          &lt;td&gt;Compile-Zeit&lt;/td&gt;
          &lt;td&gt;Laufzeit&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;strong&gt;Performance&lt;/strong&gt;&lt;/td&gt;
          &lt;td&gt;Höher&lt;/td&gt;
          &lt;td&gt;Etwas geringer&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;strong&gt;Binärgröße&lt;/strong&gt;&lt;/td&gt;
          &lt;td&gt;Wächst pro Typ&lt;/td&gt;
          &lt;td&gt;Konstant&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;strong&gt;Heterogene Collections&lt;/strong&gt;&lt;/td&gt;
          &lt;td&gt;✗&lt;/td&gt;
          &lt;td&gt;✓&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;strong&gt;Typinformation&lt;/strong&gt;&lt;/td&gt;
          &lt;td&gt;Vollständig bekannt&lt;/td&gt;
          &lt;td&gt;Zur Compile-Zeit nicht bekannt&lt;/td&gt;
      &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Als Faustregel gilt:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;impl Trait&lt;/code&gt; ist der Standard&lt;/li&gt;
&lt;li&gt;&lt;code&gt;dyn Trait&lt;/code&gt; kommt zum Einsatz wenn der Typ erst zur Laufzeit bekannt ist oder eine heterogene Collection benötigt wird.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;

&lt;h2 class=&#34;relative group&#34;&gt;Fazit
    &lt;div id=&#34;fazit&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;
    
    &lt;span
        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none&#34;&gt;
        &lt;a class=&#34;text-primary-300 dark:text-neutral-700 !no-underline&#34; href=&#34;#fazit&#34; aria-label=&#34;Anker&#34;&gt;#&lt;/a&gt;
    &lt;/span&gt;
    
&lt;/h2&gt;
&lt;p&gt;Traits sind mehr als nur Interfaces.
Die Entscheidung zwischen Monomorphisierung und Dynamic Dispatch ist eine Entscheidung zwischen Compile-Zeit-Garantien und Laufzeit-Flexibilität.&lt;/p&gt;
&lt;p&gt;Im Vergleich zu Java oder C#, wo jeder Methodenaufruf über eine virtuelle Tabelle aufgelöst wird, gibt Rust einem die Wahl – und macht sie sichtbar.&lt;/p&gt;
&lt;p&gt;Das ist typisch Rust. &lt;strong&gt;Explizit&lt;/strong&gt;, &lt;strong&gt;kontrolliert&lt;/strong&gt; und &lt;strong&gt;ohne versteckten Overhead&lt;/strong&gt;, aber mit einer etwas steileren Lernkurve.&lt;/p&gt;
&lt;hr&gt;

&lt;h2 class=&#34;relative group&#34;&gt;Vorschaubild
    &lt;div id=&#34;vorschaubild&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;
    
    &lt;span
        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none&#34;&gt;
        &lt;a class=&#34;text-primary-300 dark:text-neutral-700 !no-underline&#34; href=&#34;#vorschaubild&#34; aria-label=&#34;Anker&#34;&gt;#&lt;/a&gt;
    &lt;/span&gt;
    
&lt;/h2&gt;
&lt;p&gt;Erstellt mit &lt;a href=&#34;https://chatgpt.com&#34;  target=&#34;_blank&#34; rel=&#34;noreferrer&#34;&gt;ChatGPT&lt;/a&gt;.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Quelltext #3 - Linux, Ladybird und Rust</title>
      <link>https://devcartes.de/posts/source/linux-ladybird-rust/</link>
      <pubDate>Wed, 04 Mar 2026 00:00:00 +0100</pubDate>
      
      <guid>https://devcartes.de/posts/source/linux-ladybird-rust/</guid>
      <description>
&lt;h2 class=&#34;relative group&#34;&gt;Quelltext #3
    &lt;div id=&#34;quelltext-3&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;
    
    &lt;span
        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none&#34;&gt;
        &lt;a class=&#34;text-primary-300 dark:text-neutral-700 !no-underline&#34; href=&#34;#quelltext-3&#34; aria-label=&#34;Anker&#34;&gt;#&lt;/a&gt;
    &lt;/span&gt;
    
&lt;/h2&gt;
&lt;p&gt;Auch diese Woche möchte ich dir wieder von Projekten und Neuigkeiten berichten, die mich erstaunt, bewegt und verwundert haben.&lt;/p&gt;

&lt;h2 class=&#34;relative group&#34;&gt;Linux Kernel
    &lt;div id=&#34;linux-kernel&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;
    
    &lt;span
        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none&#34;&gt;
        &lt;a class=&#34;text-primary-300 dark:text-neutral-700 !no-underline&#34; href=&#34;#linux-kernel&#34; aria-label=&#34;Anker&#34;&gt;#&lt;/a&gt;
    &lt;/span&gt;
    
&lt;/h2&gt;
&lt;p&gt;Zum Linux Kernel gibt es gleich zwei spannende Neuigkeiten.&lt;/p&gt;

&lt;h3 class=&#34;relative group&#34;&gt;Extended LTS
    &lt;div id=&#34;extended-lts&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;
    
    &lt;span
        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none&#34;&gt;
        &lt;a class=&#34;text-primary-300 dark:text-neutral-700 !no-underline&#34; href=&#34;#extended-lts&#34; aria-label=&#34;Anker&#34;&gt;#&lt;/a&gt;
    &lt;/span&gt;
    
&lt;/h3&gt;
&lt;p&gt;Die Kernel Versionen 6.18, 6.12 und 6.6 bekommen nun offiziell verlängerten Support &lt;sup id=&#34;fnref:1&#34;&gt;&lt;a href=&#34;#fn:1&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;1&lt;/a&gt;&lt;/sup&gt;.&lt;/p&gt;
&lt;table&gt;
  &lt;thead&gt;
      &lt;tr&gt;
          &lt;th&gt;Version&lt;/th&gt;
          &lt;th&gt;Supportende (jetzt)&lt;/th&gt;
          &lt;th&gt;Supportende (bisher)&lt;/th&gt;
          &lt;th&gt;Released&lt;/th&gt;
      &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;strong&gt;6.18&lt;/strong&gt;&lt;/td&gt;
          &lt;td&gt;&lt;strong&gt;Dezember 2028&lt;/strong&gt;&lt;/td&gt;
          &lt;td&gt;Dezember 2027&lt;/td&gt;
          &lt;td&gt;2025-11-30&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;strong&gt;6.12&lt;/strong&gt;&lt;/td&gt;
          &lt;td&gt;&lt;strong&gt;Dezember 2028&lt;/strong&gt;&lt;/td&gt;
          &lt;td&gt;Dezember 2026&lt;/td&gt;
          &lt;td&gt;2024-11-17&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;strong&gt;6.6&lt;/strong&gt;&lt;/td&gt;
          &lt;td&gt;&lt;strong&gt;Dezember 2027&lt;/strong&gt;&lt;/td&gt;
          &lt;td&gt;Dezember 2026&lt;/td&gt;
          &lt;td&gt;2023-10-29&lt;/td&gt;
      &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;

&lt;h3 class=&#34;relative group&#34;&gt;Version 7.0
    &lt;div id=&#34;version-70&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;
    
    &lt;span
        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none&#34;&gt;
        &lt;a class=&#34;text-primary-300 dark:text-neutral-700 !no-underline&#34; href=&#34;#version-70&#34; aria-label=&#34;Anker&#34;&gt;#&lt;/a&gt;
    &lt;/span&gt;
    
&lt;/h3&gt;
&lt;p&gt;Mit dem Release von Linux 6.19 am 8. Februar hat Linus Torvalds eine große Ankündigung gemacht:
Die nächste Kernel Version wird &lt;strong&gt;Linux 7.0&lt;/strong&gt; heißen.&lt;sup id=&#34;fnref:2&#34;&gt;&lt;a href=&#34;#fn:2&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;2&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;
&lt;p&gt;Torvalds betont ausdrücklich, dass es kein großes &amp;ldquo;Breaking Change&amp;rdquo; Release ist, sondern wie immer &lt;strong&gt;„solid progress&amp;quot;&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;Das Merge-Window für 7.0 öffnete am 9. Februar, der erste Release Candidate erschien am 22. Februar.
Die finale Veröffentlichung wird für Mitte April erwartet.&lt;/p&gt;
&lt;p&gt;Rust-Support im Kernel gilt nun als &lt;strong&gt;stabil&lt;/strong&gt; und ist nicht mehr als experimentell markiert.&lt;/p&gt;
&lt;p&gt;Für Gamer interessant: Der neue TIP Time Slice Extension-Mechanismus erlaubt es Anwendungen, kurzzeitig mehr CPU-Zeit anzufordern, was sich positiv auf 1%-Low-FPS auswirken könnte.&lt;/p&gt;
&lt;p&gt;Außerdem kommen ein Live Update Orchestrator für unterbrechungsfreie Kernel-Upgrades unter laufenden VMs, Direct I/O für Btrfs bei Blockgrößen über der Page Size, autonomes Self-Healing für XFS sowie Unterstützung für ML-DSA Post-Quantum-Signaturen.&lt;/p&gt;

&lt;h3 class=&#34;relative group&#34;&gt;Meine Meinung
    &lt;div id=&#34;meine-meinung&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;
    
    &lt;span
        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none&#34;&gt;
        &lt;a class=&#34;text-primary-300 dark:text-neutral-700 !no-underline&#34; href=&#34;#meine-meinung&#34; aria-label=&#34;Anker&#34;&gt;#&lt;/a&gt;
    &lt;/span&gt;
    
&lt;/h3&gt;
&lt;p&gt;Längere Unterstützung von Kernel Versionen ist vor allem für Serverbetreibende interessant, da ein Kernel-Update immer ein gewisses Risiko birgt.&lt;/p&gt;
&lt;p&gt;Eine neue Kernel Version ist immer spannend.
Und wenn auch keine großen &amp;ldquo;Breaking Changes&amp;rdquo; kommen, so bin ich doch sehr gespannt auf den neuen TIP Time Slice Extension-Mechanismus.
Außerdem freut mich das langfristige Commitment zu Rust, da es meiner Meinung nach wieder frischen Wind in die Linux-Entwicklung bringt.&lt;/p&gt;

&lt;h2 class=&#34;relative group&#34;&gt;Pop!_OS Upgrade 24.04 LTS
    &lt;div id=&#34;pop_os-upgrade-2404-lts&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;
    
    &lt;span
        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none&#34;&gt;
        &lt;a class=&#34;text-primary-300 dark:text-neutral-700 !no-underline&#34; href=&#34;#pop_os-upgrade-2404-lts&#34; aria-label=&#34;Anker&#34;&gt;#&lt;/a&gt;
    &lt;/span&gt;
    
&lt;/h2&gt;
&lt;p&gt;Pop!_OS bekommt das sehr lang ersehnte Upgrade von der Version 22.04 auf die Version 24.04&lt;sup id=&#34;fnref:3&#34;&gt;&lt;a href=&#34;#fn:3&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;3&lt;/a&gt;&lt;/sup&gt;.
Die Entwickler von System76 hatten sich entschieden, das Upgrade nach hinten zu verschieben, um sich auf die Entwicklung der neuen Desktopumgebung konzentrieren zu können.&lt;/p&gt;
&lt;p&gt;Die neue Version kommt nun auch offiziell mit dem COSMIC Desktop als Standard.&lt;/p&gt;

&lt;h3 class=&#34;relative group&#34;&gt;Meine Meinung
    &lt;div id=&#34;meine-meinung-1&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;
    
    &lt;span
        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none&#34;&gt;
        &lt;a class=&#34;text-primary-300 dark:text-neutral-700 !no-underline&#34; href=&#34;#meine-meinung-1&#34; aria-label=&#34;Anker&#34;&gt;#&lt;/a&gt;
    &lt;/span&gt;
    
&lt;/h3&gt;
&lt;p&gt;Auch wenn ich mittlerweile glücklich bei EndeavourOS bin, habe ich Pop!_OS lange Zeit verwendet und nutze es noch heute auf einem älteren Laptop.
Daher freue ich mich sehr, dass dieses Upgrade nun endlich kommt, gerade weil es in der Community in letzter Zeit immer Unmut darüber gab, dass System76 das Upgrade so lange herausgezögert hat.&lt;/p&gt;

&lt;h2 class=&#34;relative group&#34;&gt;Ladybird Browser wechselt zu Rust
    &lt;div id=&#34;ladybird-browser-wechselt-zu-rust&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;
    
    &lt;span
        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none&#34;&gt;
        &lt;a class=&#34;text-primary-300 dark:text-neutral-700 !no-underline&#34; href=&#34;#ladybird-browser-wechselt-zu-rust&#34; aria-label=&#34;Anker&#34;&gt;#&lt;/a&gt;
    &lt;/span&gt;
    
&lt;/h2&gt;
&lt;p&gt;Das Ladybird-Projekt, das mit großem Ehrgeiz einen unabhängigen Browser-Engine von Grund auf neu schreibt, hat einen bemerkenswerten Kurswechsel vollzogen:&lt;/p&gt;
&lt;p&gt;Nach dem gescheiterten Versuch mit Swift setzt Gründer Andreas Kling nun auf &lt;strong&gt;Rust&lt;/strong&gt; als Nachfolger für C++.&lt;sup id=&#34;fnref:4&#34;&gt;&lt;a href=&#34;#fn:4&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;4&lt;/a&gt;&lt;/sup&gt;
Kling kündigt aber auch an, dass der Wechsel sukzessive durchgeführt wird und somit noch eine Weile in C++ und Rust parallel entwickelt wird.&lt;/p&gt;
&lt;p&gt;Swift hatte Probleme mit der C++-Interoperabilität und begrenztem Platform-Support außerhalb des Apple-Ökosystems. Rust bringt beides mit und hat dazu ein reifes Ökosystem sowie viele bestehende Contributor, die die Sprache bereits kennen.&lt;/p&gt;

&lt;h3 class=&#34;relative group&#34;&gt;Meine Meinung
    &lt;div id=&#34;meine-meinung-2&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;
    
    &lt;span
        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none&#34;&gt;
        &lt;a class=&#34;text-primary-300 dark:text-neutral-700 !no-underline&#34; href=&#34;#meine-meinung-2&#34; aria-label=&#34;Anker&#34;&gt;#&lt;/a&gt;
    &lt;/span&gt;
    
&lt;/h3&gt;
&lt;p&gt;Die schnellen Wechsel von C++ auf Swift und dann zu Rust hinterlassen bei mir einen etwas unangenehmen Beigeschmack, der Unbeständigkeit.
Andererseits ist Ladybird noch ein junges Projekt und da gehören Fehlentscheidungen und schnelle Änderungen noch dazu.
Den Wechsel zu Swift konnte ich allerdings von Anfang an nicht ganz nachvollziehen.&lt;/p&gt;
&lt;p&gt;Als passionierter Rust-Entwickler freue ich mich natürlich über die Wahl von Rust als Programmiersprache, da ich mich zum einen selbst als Contributor beteiligen kann aber auch, weil es dem Rust-Universum noch mehr Vielfalt schenkt.
Da Rust seine Wurzeln bei Mozilla hat, ist es meiner Meinung nach eine naheliegende Wahl für einen Browser.&lt;/p&gt;

&lt;h2 class=&#34;relative group&#34;&gt;Rust
    &lt;div id=&#34;rust&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;
    
    &lt;span
        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none&#34;&gt;
        &lt;a class=&#34;text-primary-300 dark:text-neutral-700 !no-underline&#34; href=&#34;#rust&#34; aria-label=&#34;Anker&#34;&gt;#&lt;/a&gt;
    &lt;/span&gt;
    
&lt;/h2&gt;

&lt;h3 class=&#34;relative group&#34;&gt;State of Rust Survey 2025
    &lt;div id=&#34;state-of-rust-survey-2025&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;
    
    &lt;span
        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none&#34;&gt;
        &lt;a class=&#34;text-primary-300 dark:text-neutral-700 !no-underline&#34; href=&#34;#state-of-rust-survey-2025&#34; aria-label=&#34;Anker&#34;&gt;#&lt;/a&gt;
    &lt;/span&gt;
    
&lt;/h3&gt;
&lt;p&gt;Die Ergebnisse der diesjährigen Umfrage sind da: 7.156 Antworten und damit etwas weniger als im Vorjahr &lt;sup id=&#34;fnref:5&#34;&gt;&lt;a href=&#34;#fn:5&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;5&lt;/a&gt;&lt;/sup&gt;.&lt;/p&gt;
&lt;p&gt;Inhaltlich gibt es wenig Überraschung.
Langsame Compile-Zeiten und hoher Speicherverbrauch bleiben die meistgenannten Kritikpunkte.&lt;br&gt;
Positiv fiel auf, dass lang ersehnte Features wie Let Chains und Async Closures gut ankommen.&lt;/p&gt;
&lt;p&gt;Ganz oben auf der Wunschliste stehen: Generic Const Expressions und verbesserte Trait-Methoden.&lt;/p&gt;

&lt;h3 class=&#34;relative group&#34;&gt;Debugging Survey 2026
    &lt;div id=&#34;debugging-survey-2026&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;
    
    &lt;span
        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none&#34;&gt;
        &lt;a class=&#34;text-primary-300 dark:text-neutral-700 !no-underline&#34; href=&#34;#debugging-survey-2026&#34; aria-label=&#34;Anker&#34;&gt;#&lt;/a&gt;
    &lt;/span&gt;
    
&lt;/h3&gt;
&lt;p&gt;Direkt aus den Ergebnissen der State of Rust Survey heraus hat das Compiler Team nachgehakt. &lt;sup id=&#34;fnref:6&#34;&gt;&lt;a href=&#34;#fn:6&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;6&lt;/a&gt;&lt;/sup&gt;
Debugging taucht regelmäßig als eines der größten Ärgernisse auf.&lt;/p&gt;
&lt;p&gt;Von inkonsistenter Unterstützung über verschiedene Debugger (GDB, LLDB, CDB) und Betriebssysteme bis hin zu fehlendem First-Class-Support für Async-Code.&lt;/p&gt;
&lt;p&gt;Die Umfrage läuft bis 13. März, wer also Rust aktiv nutzt und einen Einfluß auf dessen Zukunft nehmen möchte, sollte teilnehmen.&lt;/p&gt;

&lt;h3 class=&#34;relative group&#34;&gt;Meine Meinung
    &lt;div id=&#34;meine-meinung-3&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;
    
    &lt;span
        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none&#34;&gt;
        &lt;a class=&#34;text-primary-300 dark:text-neutral-700 !no-underline&#34; href=&#34;#meine-meinung-3&#34; aria-label=&#34;Anker&#34;&gt;#&lt;/a&gt;
    &lt;/span&gt;
    
&lt;/h3&gt;
&lt;p&gt;Rust zieht sich durch diese Ausgabe des Quelltext wie ein rostroter Faden.&lt;/p&gt;
&lt;p&gt;Es freut mich zu sehen, dass Rust in so vielen Projekten ein fester Bestandteil geworden ist und die Rust Foundation regelmäßige Umfragen veranstaltet und daraus auch echte Konsequenzen zieht.
Das schafft meiner Meinung nach Vertrauen und sichert Rust eine hoffentlich lange Zukunft.&lt;/p&gt;
&lt;hr&gt;

&lt;h2 class=&#34;relative group&#34;&gt;Vorschaubild
    &lt;div id=&#34;vorschaubild&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;
    
    &lt;span
        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none&#34;&gt;
        &lt;a class=&#34;text-primary-300 dark:text-neutral-700 !no-underline&#34; href=&#34;#vorschaubild&#34; aria-label=&#34;Anker&#34;&gt;#&lt;/a&gt;
    &lt;/span&gt;
    
&lt;/h2&gt;
&lt;p&gt;Erstellt mit &lt;a href=&#34;https://chatgpt.com&#34;  target=&#34;_blank&#34; rel=&#34;noreferrer&#34;&gt;ChatGPT&lt;/a&gt;&lt;/p&gt;
&lt;div class=&#34;footnotes&#34; role=&#34;doc-endnotes&#34;&gt;
&lt;hr&gt;
&lt;ol&gt;
&lt;li id=&#34;fn:1&#34;&gt;
&lt;p&gt;&lt;a href=&#34;https://git.kernel.org/pub/scm/docs/kernel/website.git/commit/content/releases.rst?id=d04587da86a3464881e0c97aabddd2c271105698&#34;  target=&#34;_blank&#34; rel=&#34;noreferrer&#34;&gt;Commit von Greg Kroah-Hartman&lt;/a&gt;&amp;#160;&lt;a href=&#34;#fnref:1&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id=&#34;fn:2&#34;&gt;
&lt;p&gt;&lt;a href=&#34;https://lkml.org/lkml/2026/2/22/297&#34;  target=&#34;_blank&#34; rel=&#34;noreferrer&#34;&gt;Linus Torvalds Ankündigung der neuen Kernel Version&lt;/a&gt;&amp;#160;&lt;a href=&#34;#fnref:2&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id=&#34;fn:3&#34;&gt;
&lt;p&gt;&lt;a href=&#34;https://blog.system76.com/post/pop-24-04-lts-upgrade&#34;  target=&#34;_blank&#34; rel=&#34;noreferrer&#34;&gt;Ankündigung des Upgrades im System76 Blog&lt;/a&gt;&amp;#160;&lt;a href=&#34;#fnref:3&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id=&#34;fn:4&#34;&gt;
&lt;p&gt;&lt;a href=&#34;https://ladybird.org/posts/adopting-rust/&#34;  target=&#34;_blank&#34; rel=&#34;noreferrer&#34;&gt;Ladybird Blog Artikel zum Umstieg auf Rust&lt;/a&gt;&amp;#160;&lt;a href=&#34;#fnref:4&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id=&#34;fn:5&#34;&gt;
&lt;p&gt;&lt;a href=&#34;https://blog.rust-lang.org/2026/03/02/2025-State-Of-Rust-Survey-results/&#34;  target=&#34;_blank&#34; rel=&#34;noreferrer&#34;&gt;Rust Blog: State of Rust Survey&lt;/a&gt;&amp;#160;&lt;a href=&#34;#fnref:5&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id=&#34;fn:6&#34;&gt;
&lt;p&gt;&lt;a href=&#34;https://blog.rust-lang.org/2026/02/23/rust-debugging-survey-2026/&#34;  target=&#34;_blank&#34; rel=&#34;noreferrer&#34;&gt;Rust Blog: Debugging Survey&lt;/a&gt;&amp;#160;&lt;a href=&#34;#fnref:6&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;
</description>
    </item>
    
    <item>
      <title>Empfehlungen: Rustlings</title>
      <link>https://devcartes.de/posts/recommendations/rustlings/</link>
      <pubDate>Mon, 02 Mar 2026 00:00:00 +0000</pubDate>
      
      <guid>https://devcartes.de/posts/recommendations/rustlings/</guid>
      <description>
&lt;h2 class=&#34;relative group&#34;&gt;Quick Facts
    &lt;div id=&#34;quick-facts&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;
    
    &lt;span
        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none&#34;&gt;
        &lt;a class=&#34;text-primary-300 dark:text-neutral-700 !no-underline&#34; href=&#34;#quick-facts&#34; aria-label=&#34;Anker&#34;&gt;#&lt;/a&gt;
    &lt;/span&gt;
    
&lt;/h2&gt;
&lt;table&gt;
  &lt;thead&gt;
      &lt;tr&gt;
          &lt;th&gt;&lt;/th&gt;
          &lt;th&gt;&lt;/th&gt;
      &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;strong&gt;Name&lt;/strong&gt;&lt;/td&gt;
          &lt;td&gt;Rustlings&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;strong&gt;Typ&lt;/strong&gt;&lt;/td&gt;
          &lt;td&gt;Interaktives Terminal-Lernprogramm&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;strong&gt;Sprache&lt;/strong&gt;&lt;/td&gt;
          &lt;td&gt;Englisch&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;strong&gt;Preis&lt;/strong&gt;&lt;/td&gt;
          &lt;td&gt;Kostenlos, Open Source (MIT)&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;strong&gt;Übungen&lt;/strong&gt;&lt;/td&gt;
          &lt;td&gt;~100&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;strong&gt;Zeitaufwand&lt;/strong&gt;&lt;/td&gt;
          &lt;td&gt;ca. 10–15 Stunden gesamt&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;strong&gt;Voraussetzungen&lt;/strong&gt;&lt;/td&gt;
          &lt;td&gt;Grundlegende Programmierkenntnisse&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;strong&gt;Link&lt;/strong&gt;&lt;/td&gt;
          &lt;td&gt;&lt;a href=&#34;https://rustlings.rust-lang.org&#34;  target=&#34;_blank&#34; rel=&#34;noreferrer&#34;&gt;rustlings.rust-lang.org&lt;/a&gt;&lt;/td&gt;
      &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;

&lt;h2 class=&#34;relative group&#34;&gt;Worum geht es
    &lt;div id=&#34;worum-geht-es&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;
    
    &lt;span
        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none&#34;&gt;
        &lt;a class=&#34;text-primary-300 dark:text-neutral-700 !no-underline&#34; href=&#34;#worum-geht-es&#34; aria-label=&#34;Anker&#34;&gt;#&lt;/a&gt;
    &lt;/span&gt;
    
&lt;/h2&gt;
&lt;p&gt;Rustlings ist eine Sammlung kleiner Übungsaufgaben, die direkt im Terminal läuft.&lt;/p&gt;
&lt;p&gt;Das Konzept ist einfach. Du bekommst Übungsdateien, die entweder nicht kompilieren oder einen Test nicht bestehen.
Deine Aufgabe ist es, den Fehler zu finden und zu beheben.
Rustlings beobachtet dabei die Datei und gibt dir Feedback, sobald du speicherst.&lt;/p&gt;
&lt;p&gt;Das Programm ist ein offizielles Rust-Foundation-Projekt und eng mit dem &lt;a href=&#34;https://doc.rust-lang.org/book/&#34;  target=&#34;_blank&#34; rel=&#34;noreferrer&#34;&gt;offiziellen Rust-Buch&lt;/a&gt; verbunden.
Das Buch erklärt die Konzepte und Rustlings gibt dir die Möglichkeit sie direkt zu üben.&lt;/p&gt;

&lt;h2 class=&#34;relative group&#34;&gt;Für wen ist es geeignet
    &lt;div id=&#34;für-wen-ist-es-geeignet&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;
    
    &lt;span
        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none&#34;&gt;
        &lt;a class=&#34;text-primary-300 dark:text-neutral-700 !no-underline&#34; href=&#34;#f%c3%bcr-wen-ist-es-geeignet&#34; aria-label=&#34;Anker&#34;&gt;#&lt;/a&gt;
    &lt;/span&gt;
    
&lt;/h2&gt;
&lt;p&gt;Reine Anfänger ohne Vorerfahrung werden vermutlich schnell überfordert sein.
Nicht wegen der Aufgaben selbst, sondern weil Konzepte wie Ownership oder das Typsystem vorausgesetzt werden, ohne sie vollständig herzuleiten.&lt;/p&gt;
&lt;p&gt;Rustlings richtet sich an Entwickler*innen, die bereits eine Programmiersprache kennen und Rust von Grund auf lernen möchten.
Auch als Auffrischung funktioniert Rustlings gut. Wer Rust eine Weile nicht aktiv genutzt hat und wieder einsteigen möchte, kann sich gezielt einzelne Kapitel vorknöpfen, ohne von vorne anfangen zu müssen.&lt;/p&gt;

&lt;h2 class=&#34;relative group&#34;&gt;Welche Themen werden behandelt
    &lt;div id=&#34;welche-themen-werden-behandelt&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;
    
    &lt;span
        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none&#34;&gt;
        &lt;a class=&#34;text-primary-300 dark:text-neutral-700 !no-underline&#34; href=&#34;#welche-themen-werden-behandelt&#34; aria-label=&#34;Anker&#34;&gt;#&lt;/a&gt;
    &lt;/span&gt;
    
&lt;/h2&gt;
&lt;p&gt;Rustlings deckt den Großteil der Rust-Grundlagen ab.
Zu jeder Übung gibt es eine oder mehrere Stellen im Buch, die tiefere Erklärungen bieten.&lt;/p&gt;
&lt;table&gt;
  &lt;thead&gt;
      &lt;tr&gt;
          &lt;th&gt;Aufgaben&lt;/th&gt;
          &lt;th&gt;Kapitel im Buch&lt;/th&gt;
      &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
      &lt;tr&gt;
          &lt;td&gt;variables&lt;/td&gt;
          &lt;td&gt;§3.1&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;functions&lt;/td&gt;
          &lt;td&gt;§3.3&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;if&lt;/td&gt;
          &lt;td&gt;§3.5&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;primitive_types&lt;/td&gt;
          &lt;td&gt;§3.2, §4.3&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;vecs&lt;/td&gt;
          &lt;td&gt;§8.1&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;move_semantics&lt;/td&gt;
          &lt;td&gt;§4.1-2&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;structs&lt;/td&gt;
          &lt;td&gt;§5.1, §5.3&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;enums&lt;/td&gt;
          &lt;td&gt;§6, §19.3&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;strings&lt;/td&gt;
          &lt;td&gt;§8.2&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;modules&lt;/td&gt;
          &lt;td&gt;§7&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;hashmaps&lt;/td&gt;
          &lt;td&gt;§8.3&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;options&lt;/td&gt;
          &lt;td&gt;§10.1&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;error_handling&lt;/td&gt;
          &lt;td&gt;§9&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;generics&lt;/td&gt;
          &lt;td&gt;§10&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;traits&lt;/td&gt;
          &lt;td&gt;§10.2&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;lifetimes&lt;/td&gt;
          &lt;td&gt;§10.3&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;tests&lt;/td&gt;
          &lt;td&gt;§11.1&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;iterators&lt;/td&gt;
          &lt;td&gt;§13.2-4&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;smart_pointers&lt;/td&gt;
          &lt;td&gt;§15, §16.3&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;threads&lt;/td&gt;
          &lt;td&gt;§16.1-3&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;macros&lt;/td&gt;
          &lt;td&gt;§20.5&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;clippy&lt;/td&gt;
          &lt;td&gt;Appendix D&lt;/td&gt;
      &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;em&gt;Quelle: &lt;a href=&#34;https://github.com/rust-lang/rustlings/blob/main/exercises/README.md&#34;  target=&#34;_blank&#34; rel=&#34;noreferrer&#34;&gt;Rustlings Github Repository&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

&lt;h2 class=&#34;relative group&#34;&gt;Wie lernt man am besten damit
    &lt;div id=&#34;wie-lernt-man-am-besten-damit&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;
    
    &lt;span
        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none&#34;&gt;
        &lt;a class=&#34;text-primary-300 dark:text-neutral-700 !no-underline&#34; href=&#34;#wie-lernt-man-am-besten-damit&#34; aria-label=&#34;Anker&#34;&gt;#&lt;/a&gt;
    &lt;/span&gt;
    
&lt;/h2&gt;
&lt;p&gt;Der klassische Ansatz, den auch das offizielle Rust-Buch empfiehlt, ist eine Kombination aus beiden Ressourcen parallel:
Kapitel lesen, passende Rustlings-Aufgaben lösen, weiterlesen.
Das Buch erklärt das jeweilige Konzept, Rustlings lässt einen es direkt umsetzen.&lt;/p&gt;
&lt;p&gt;Wer lieber hands-on lernen möchte, kann auch direkt mit Rustlings beginnen und bei Bedarf im Buch oder in der Dokumentation nachschlagen.
Das ist für erfahrene Entwicklerinnen und Entwickler oft der schnellere Weg.&lt;/p&gt;
&lt;p&gt;Meine Empfehlung, nicht gleich die Musterlösung öffnen, sonst nimmt man sich selbst etwas weg.&lt;/p&gt;

&lt;h2 class=&#34;relative group&#34;&gt;Persönliches Highlight
    &lt;div id=&#34;persönliches-highlight&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;
    
    &lt;span
        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none&#34;&gt;
        &lt;a class=&#34;text-primary-300 dark:text-neutral-700 !no-underline&#34; href=&#34;#pers%c3%b6nliches-highlight&#34; aria-label=&#34;Anker&#34;&gt;#&lt;/a&gt;
    &lt;/span&gt;
    
&lt;/h2&gt;
&lt;p&gt;Was mich an Rustlings am meisten überzeugt, ist der schnelle Feedback-Loop.
Man spart sich das Aufsetzen eines Projekts, das Schreiben von Boilerplate und das Navigieren durch Compiler-Fehler in fremdem Code.&lt;/p&gt;
&lt;p&gt;Man macht einfach auf, liest den Fehler, denkt nach und schreibt Code.&lt;br&gt;
Oder auch nicht, aber dann weiß man zumindest genau, woran es hängt.&lt;/p&gt;
&lt;p&gt;Außerdem zeigt Rustlings nach jeder gelösten Aufgabe die empfohlene Musterlösung.
Man lernt also nicht nur, den Code zum Laufen zu bringen, sondern auch, wie idiomatisches Rust aussieht.
Und das kann deutlich vom eigenen ersten Ansatz abweichen.&lt;/p&gt;

&lt;h2 class=&#34;relative group&#34;&gt;Zum Schluss
    &lt;div id=&#34;zum-schluss&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;
    
    &lt;span
        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none&#34;&gt;
        &lt;a class=&#34;text-primary-300 dark:text-neutral-700 !no-underline&#34; href=&#34;#zum-schluss&#34; aria-label=&#34;Anker&#34;&gt;#&lt;/a&gt;
    &lt;/span&gt;
    
&lt;/h2&gt;
&lt;p&gt;Rustlings ist kein vollständiger Kurs, ersetzt nicht das eigene Lesen oder gar einen erfahrenen Mentor, aber das will es auch nicht.
Es ist einfach ein wirklich gutes Werkzeug zum Üben.&lt;/p&gt;
&lt;p&gt;Wer Rust lernen möchte und schon etwas Programmiererfahrung hat, findet hier einen schnellen und fundierten Einstieg in die Sprache.
Ich habe es bereits durchgearbeitet und dabei genau das gefunden, was ich gesucht hatte: einen schnellen Wiedereinstieg in Rust.&lt;/p&gt;
&lt;hr&gt;

&lt;h2 class=&#34;relative group&#34;&gt;Vorschaubild
    &lt;div id=&#34;vorschaubild&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;
    
    &lt;span
        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none&#34;&gt;
        &lt;a class=&#34;text-primary-300 dark:text-neutral-700 !no-underline&#34; href=&#34;#vorschaubild&#34; aria-label=&#34;Anker&#34;&gt;#&lt;/a&gt;
    &lt;/span&gt;
    
&lt;/h2&gt;
&lt;p&gt;Erstellt mit &lt;a href=&#34;https://chatgpt.com&#34;  target=&#34;_blank&#34; rel=&#34;noreferrer&#34;&gt;ChatGPT&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Basierend auf „Ferris the Crab“ von Karen Rustad Tölva (Public Domain).&lt;/p&gt;
</description>
    </item>
    
  </channel>
</rss>