<?xml version="1.0" encoding="UTF-8"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
    <title>lucasvresende</title>
    <subtitle>A space for my programming projects, experiments, and thoughts.</subtitle>
    <link rel="self" type="application/atom+xml" href="https://lucasvresende.com/atom.xml"/>
    <link rel="alternate" type="text/html" href="https://lucasvresende.com"/>
    <generator uri="https://www.getzola.org/">Zola</generator>
    <updated>2026-09-14T00:00:00+00:00</updated>
    <id>https://lucasvresende.com/atom.xml</id>
    <entry xml:lang="en">
        <title>Rust: The Ultimate Language For Vibe Coding?</title>
        <published>2026-09-14T00:00:00+00:00</published>
        <updated>2026-09-14T00:00:00+00:00</updated>
        
        <author>
          <name>Lucas Resende</name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://lucasvresende.com/blog/rust-the-ultimate-language-for-vibe-coding/"/>
        <id>https://lucasvresende.com/blog/rust-the-ultimate-language-for-vibe-coding/</id>
        
        <content type="html" xml:base="https://lucasvresende.com/blog/rust-the-ultimate-language-for-vibe-coding/">&lt;p&gt;I&#39;ve been playing around with the &lt;a rel=&quot;external&quot; href=&quot;https://rust-lang.org/&quot;&gt;Rust programming language&lt;/a&gt; lately and am getting an idea as to why it&#39;s been consistently ranking as the &lt;a rel=&quot;external&quot; href=&quot;https://survey.stackoverflow.co/2025/technology&quot;&gt;most admired language among developers&lt;/a&gt;. Rust allows you to get the speed of C without manual memory management, the power of C++ without being a complete mess, simple dependency management via &lt;a rel=&quot;external&quot; href=&quot;https://doc.rust-lang.org/cargo/&quot;&gt;Cargo&lt;/a&gt;, and a modern syntax that makes it feel like a higher-level language without the need for a garbage collector. All of this often translates into programs that are &lt;strong&gt;tens of times more performant than Python/JS&lt;/strong&gt; with a tiny fraction of the memory usage.&lt;/p&gt;
&lt;p&gt;As someone who comes from a Python background, using AI to write code can sometimes be painful. A naive prompt often results in inconsistent styling and formatting across the codebase, as well as code that contains several bugs if you do not include a large number of tests. You end up having to add a lot of external tools like &lt;a rel=&quot;external&quot; href=&quot;https://github.com/microsoft/pyright&quot;&gt;type-checkers&lt;/a&gt;, and &lt;a rel=&quot;external&quot; href=&quot;https://docs.astral.sh/ruff/&quot;&gt;linters/formatters&lt;/a&gt; to catch even some of these issues. Besides, different libraries often impose very different patterns that make your project feel very inconsistent. Even dependency managing can be a pain in Python if you don&#39;t use resources like &lt;a rel=&quot;external&quot; href=&quot;https://docs.astral.sh/uv/&quot;&gt;uv&lt;/a&gt; (which are not standardized).&lt;/p&gt;
&lt;p&gt;The truth is that &lt;strong&gt;languages like JavaScript, Python, PHP&lt;/strong&gt;, and interpreted languages in general are great for prototyping and development freedom, but &lt;strong&gt;were not originally designed for large production systems&lt;/strong&gt;. More often than not, using them in that way is only feasible after a lot of band-aids (e.g. &lt;a rel=&quot;external&quot; href=&quot;https://docs.python.org/3/library/typing.html&quot;&gt;Python&#39;s type hinting system&lt;/a&gt; or JavaScript&#39;s superset TypeScript) and external dependencies. As far as I&#39;m concerned, this looks a lot like an attempt to &lt;strong&gt;de-abstract the abstractions of the language itself&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;Rust, on the other hand, was carefully designed to make use of patterns that make it idiomatic to write maintainable, safe, and efficient code. Aside from catching a lot of errors in compile time, it also features well-defined styling/formatting conventions, and external crates that generally follow the language&#39;s idioms. Rust eliminates entire classes of bugs by forcing the programmer/coding agent to properly handle errors, which can sometimes drastically reduce the required test suite.&lt;/p&gt;
&lt;p&gt;Now, a fact about LLMs is that they do not work well with ambiguity, excessive abstractions and many different ways of doing the same thing. Rather, what they need is strict rules, and simple declarative syntax. What all of this means is that &lt;strong&gt;with Rust, you get much of the LLM-friendly functionality most programming languages lack right out of the box&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;Additionally, a lot of the hurdles that traditionally come with writing compiled languages are just simply gone in the age of AI. &lt;strong&gt;Compiler errors that may take a lot of effort for a human to understand and debug are actually a feature for coding agents&lt;/strong&gt;, allowing them to easily iterate and fix issues.&lt;/p&gt;
&lt;p&gt;In an age where LLMs are already writing much of the code for you, why would you choose a slow language that requires several outside tools to constrain the coding process into rules more adequate for AI generation? In that sense, Rust&#39;s great defaults, strictness, and quickly growing ecosystem, are making for a potentially ideal solution.&lt;/p&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>Building This Site with Zola</title>
        <published>2026-08-12T00:00:00+00:00</published>
        <updated>2026-08-12T00:00:00+00:00</updated>
        
        <author>
          <name>Lucas Resende</name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://lucasvresende.com/blog/building-this-site/"/>
        <id>https://lucasvresende.com/blog/building-this-site/</id>
        
        <content type="html" xml:base="https://lucasvresende.com/blog/building-this-site/">&lt;p&gt;This demonstration post exercises the content features used throughout the blog: colocated images, syntax-highlighted code, tables, and tags.&lt;/p&gt;
&lt;h2 id=&quot;colocated-images&quot;&gt;Colocated images&lt;/h2&gt;
&lt;p&gt;Images that belong to one post live beside its &lt;code&gt;index.md&lt;/code&gt; file and use ordinary relative Markdown paths.&lt;/p&gt;
&lt;figure&gt;
      &lt;picture&gt;
        &lt;source type=&quot;image/avif&quot; srcset=&quot;https://lucasvresende.com/processed_images/architecture.57c40fbddffe298f.avif 640w, https://lucasvresende.com/processed_images/architecture.fcc3b25c1f67e9c1.avif 960w&quot; sizes=&quot;(min-width: 896px) 896px, 100vw&quot;&gt;
        &lt;source type=&quot;image/webp&quot; srcset=&quot;https://lucasvresende.com/processed_images/architecture.a6924a1d63bb11ec.webp 640w, https://lucasvresende.com/processed_images/architecture.7b9aa236b1d4b6c2.webp 960w&quot; sizes=&quot;(min-width: 896px) 896px, 100vw&quot;&gt;
        &lt;img src=&quot;https://lucasvresende.com/blog/building-this-site/architecture.png&quot; alt=&quot;A diagram showing content flowing through templates into a static website&quot; width=&quot;960&quot; height=&quot;360&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot;&gt;
      &lt;/picture&gt;
      &lt;figcaption&gt;Markdown and Tera flow through Zola to produce the static site.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;h2 id=&quot;syntax-highlighted-code&quot;&gt;Syntax-highlighted code&lt;/h2&gt;
&lt;p&gt;Fenced code blocks declare their language so Zola can highlight them during the build.&lt;/p&gt;
&lt;pre class=&quot;giallo z-l-code z-d-code&quot; &gt;&lt;code data-lang=&quot;rust&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-8 z-d-10&quot;&gt;fn&lt;/span&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt; main&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-8 z-d-10&quot;&gt;    let&lt;/span&gt;&lt;span&gt; generator&lt;/span&gt;&lt;span class=&quot;z-l-8 z-d-10&quot;&gt; =&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; &amp;quot;&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;Zola&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt;    println!&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;Built with &lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;generator&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&quot;markdown-tables&quot;&gt;Markdown tables&lt;/h2&gt;
&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Layer&lt;/th&gt;&lt;th&gt;Responsibility&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td&gt;Markdown&lt;/td&gt;&lt;td&gt;Content and frontmatter&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;Tera&lt;/td&gt;&lt;td&gt;Page structure and reusable components&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;Tailwind CSS&lt;/td&gt;&lt;td&gt;Layout and low-level utilities&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;daisyUI&lt;/td&gt;&lt;td&gt;Theme-aware interface components&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;Keeping these responsibilities separate makes the generated site easier to maintain.&lt;/p&gt;
</content>
        
    </entry>
</feed>
