Skip to content

Commit 38bd216

Browse files
committed
Add internal links to related blog posts for deeper reading
1 parent a54dcf2 commit 38bd216

14 files changed

Lines changed: 48 additions & 18 deletions

File tree

config.toml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ author = "Matthias Endler"
55

66
compile_sass = true
77
build_search_index = false
8+
ignored_content = ["**/code/**/*.md"]
89
generate_feeds = true
910
feed_filenames = ["atom.xml", "rss.xml"]
1011

content/blog/cpp-rust-interop/index.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -86,6 +86,8 @@ Recognizing that a complete switch from C++ to Rust is not always feasible or de
8686

8787
Tyler wrote a series of blog posts on [Rust and C++ interop](https://tylerjw.dev/posts/rust-cpp-interop/) that go into great detail about integrating Rust into C++ projects, which covers FFI bindings, CMake (a build system generator for C++ projects), Cxx (a code generation tool), Conan (a C++ package manager), and more.
8888

89+
For an up-to-date, step-by-step guide on the tooling and strategies involved in this process, see [How to Introduce Rust into a C++ Codebase](/blog/rust-ffi-incremental-migration/).
90+
8991
It is recommended to start with the most safety-critical or unreliable parts of your codebase:
9092

9193
> What you have to do is think about how important security is at each level of the stack and how to address it in small incremental ways. - [Jeremy Soller in the Rust in Production podcast](https://corrode.dev/podcast/s02e07-system76/?t=47%3A52)

content/blog/defensive-programming/index.md

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,10 @@ reviews = [
99
{ name = "Tyler Stevens", url = "https://www.linkedin.com/in/tpstevens/" },
1010
{ name = "kat", url = "https://www.sakurakat.systems/" },
1111
]
12+
resources = [
13+
"[Making illegal states unrepresentable](/blog/illegal-state/)",
14+
"[Compile-time invariants in Rust](/blog/compile-time-invariants/)",
15+
]
1216
+++
1317

1418
I have a hobby.
@@ -738,4 +742,4 @@ By following these patterns, you can:
738742
It's a skill that doesn't come naturally and it's not covered in most Rust books, but knowing these patterns can make the difference between code that works but is brittle, and code that is robust and maintainable for years to come.
739743

740744
Remember: if you find yourself writing `// this should never happen`, take a step back and ask how the compiler could enforce that invariant for you instead.
741-
The best bug is the one that never compiles in the first place.
745+
The best bug is the one that never compiles in the first place.

content/blog/flattening-rusts-learning-curve/index.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -81,7 +81,7 @@ Don't make it too hard on yourself in the beginning.
8181
Here are some tips:
8282

8383
- Use `String` and `clone()` and `unwrap` generously; you can always refactor later -- and refactoring is the best part about Rust!
84-
I wrote an article on saving yourself time during that phase [here](/blog/prototyping).
84+
I wrote an article on saving yourself time during that phase [here](/blog/prototyping/).
8585
- Use simple if or match statements before starting to learn some of the more idiomatic `.and_then` etc. combinators
8686
- Avoid async Rust in week 1. The additional rules are a tax on people still learning the core ownership model.
8787

@@ -356,7 +356,7 @@ In the long run, finding the right resource saves you time because you will lear
356356
I personally don't like doing toy exercises that others have built out for me.
357357
That's why I don't like Rustlings too much; the exercises are not "fun" and too theoretical. I want more practical exercises.
358358
I found that [Project Euler](https://projecteuler.net/) or [Advent of Code](https://adventofcode.com/) work way better for me.
359-
The question comes up quite often, so I wrote a blog post about [my favorite Rust learning resources](/blog/rust-learning-resources-2026).
359+
The question comes up quite often, so I wrote a blog post about [my favorite Rust learning resources](/blog/rust-learning-resources-2026/).
360360

361361
#### Don't Just Watch YouTube
362362

content/blog/foundational-software/index.md

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ template = "article.html"
88
series = "Rust Insights"
99
+++
1010

11-
Ten years of stable Rust; writing this feels surreal.
11+
Ten years of stable Rust; writing this feels surreal.
1212

1313
It's only been *yesterday* that we all celebrated the 1.0 release of this incredible language.
1414

@@ -49,7 +49,7 @@ The Linux kernel wasn't built in a day.
4949
**People need time to learn.**
5050

5151
The whole idea of Rust is to enable **everyone** to build reliable and efficient software.
52-
To me, it's about breaking down the barriers to entry and making larger parts of the software stack accessible to more people.
52+
To me, it's about breaking down the barriers to entry and making larger parts of the software stack accessible to more people.
5353
You can sit with us.
5454

5555
> We are committed to providing a friendly, safe and welcoming environment for all
@@ -165,7 +165,9 @@ Rust is useful in situations where the ["worse is better" philosophy falls apart
165165
> With the right thing, designers are equally concerned with simplicity, correctness, consistency, and completeness.
166166
167167
I think many companies will choose Rust to build their future platforms on.
168-
As such, it competes with C++ as much as it does with Kotlin or Python.
168+
As such, it competes with C++ as much as it does with Kotlin or Python [^sustainability].
169+
170+
[^sustainability]: This also raises the question: ["Will Rust be alive in 10 years?"](/blog/rust-in-ten-years/) And to me the answer is clear: many large organizations have already bet on it and are building their future on top of it. Rust is here to stay.
169171

170172
I believe that we should shift the focus away from memory safety (which many other languages also offer) and instead focus on the explicitness, expressiveness, and ecosystem of Rust that is highly competitive with these languages.
171173
It is a language for teams which want to build things *right* and are at odds with the "move fast and break things" philosophy of the past.
@@ -202,6 +204,8 @@ There is more to be said about supply-chain security and sustainability in a fut
202204
## Rust Is A Language For Decades
203205

204206
Building foundational systems is rooted in the profound belief that the efforts will pay off in the long run because organizations and society will benefit from them for decades.
207+
([Long-term Rust Project Maintenance](/blog/long-term-rust-maintenance/) covers the day-to-day work of keeping a Rust codebase healthy over years: dependency management, API design, release automation, and more.)
208+
205209
We are building systems that will be used by people who may not even know they are using them, but who will depend on them every day; that's critical infrastructure.
206210

207211
And Rust allows us to do so with great ergonomics.

content/blog/idiomatic-rust-resources/index.md

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,9 +16,18 @@ Here's a curated list of resources to **help you write ergonomic and idiomatic R
1616
The list is open source and [maintained on GitHub](https://github.com/mre/idiomatic-rust), and contributions are always welcome!
1717

1818
Discover a wealth of tutorials, workshops, and articles created by Rust experts, all aimed at helping you become a better Rust programmer. Each resource is peer-reviewed to ensure adherence to Rust best practices. Plus, you can easily filter, sort, and search by tags, year, and difficulty level to find exactly what you need.
19+
<<<<<<< Updated upstream
1920

2021
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.7.1/jquery.min.js"></script>
2122
<script src="https://cdn.datatables.net/1.13.7/js/jquery.dataTables.min.js"></script>
23+
||||||| Stash base
24+
25+
<script src="//ajax.googleapis.com/ajax/libs/jquery/3.7.1/jquery.min.js"></script>
26+
<script src="//cdn.datatables.net/1.13.7/js/jquery.dataTables.min.js"></script>
27+
=======
28+
<script src="//ajax.googleapis.com/ajax/libs/jquery/3.7.1/jquery.min.js"></script>
29+
<script src="//cdn.datatables.net/1.13.7/js/jquery.dataTables.min.js"></script>
30+
>>>>>>> Stashed changes
2231
<script src="dataTables.checkboxes.min.js"></script>
2332
<script src="table.js"></script>
2433

content/blog/iterators/index.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -348,4 +348,4 @@ are and they are a powerful stand-in for those list comprehensions you might
348348
know and love from Python.
349349

350350
I encourage you to explore the iterator API in Rust and see how you can use it
351-
to make your code more expressive and concise.
351+
to make your code more expressive and concise.

content/blog/long-term-rust-maintenance/index.md

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -524,17 +524,18 @@ consistent code style and catch common errors:
524524

525525
Run your CI pipeline on a regular basis to ensure that your codebase is always
526526
in a deployable state. The worst time to find out that something is broken is when
527-
you're trying to deploy a fix.
527+
you're trying to deploy a fix.
528528

529529
Look into [release-plz](https://github.com/MarcoIeni/release-plz) for release
530530
automation. It can create pull requests for new releases, which you can review
531531
and merge when you're ready.
532532

533+
533534
![release-plz](release-plz.png)
534535

535536
If you are afraid of triggering a release, it's a sign that your release process
536-
is too complex. Simplify it until you are confident that you can release at any
537-
time.
537+
is too complex or too slow. Simplify it until you are confident that you can release at any
538+
time and [speed up your Rust CI builds](/blog/tips-for-faster-ci-builds/).
538539

539540
## Invest in the Rust Ecosystem
540541

content/blog/memory-safety/index.md

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -194,6 +194,8 @@ As I wrote in a recent post on [choosing Rust](https://endler.dev/2025/choosing-
194194

195195
Google, Microsoft, Amazon, Meta, Cloudflare, and Discord have all independently arrived at the same conclusion and are investing heavily in Rust for their critical infrastructure. [Microsoft's CTO of Azure stated](https://x.com/markrussinovich/status/1571995117233504257) that new projects should be written in Rust rather than C or C++. Both the [Linux kernel](https://docs.kernel.org/rust/) and the [Windows kernel](https://x.com/markrussinovich/status/1656416376125538304) now contain Rust code.
196196

197+
If you're sceptical about Rust's long-term viability before committing to it, I wrote an [article on the ecosystem maturity, corporate investment, and funding structures that make Rust a sound long-term bet](/blog/rust-in-ten-years/).
198+
197199
## The Cost of Waiting
198200

199201
Some organizations look at this landscape and think: "We'll wait for the regulations to be finalized. We'll act when we have to."
@@ -230,7 +232,7 @@ At a minimum:
230232

231233
1. **An inventory of memory-unsafe code** in your products, prioritized by risk (network-facing code, cryptographic operations, data parsing).
232234
2. **A plan for new development** in a memory-safe language.
233-
3. **A migration strategy** for high-risk existing components, potentially through incremental Rust rewrites using the FFI (Foreign Function Interface).
235+
3. **A migration strategy** for high-risk existing components, potentially through incremental Rust rewrites using the FFI (Foreign Function Interface). See [How to Introduce Rust into a C++ Codebase](/blog/rust-ffi-incremental-migration/) for a deep guide on tooling, build system integration, and migration patterns if you're coming from C++.
234236
4. **Interim mitigations** for code that won't be migrated soon (compiler hardening, fuzzing, static analysis).
235237
5. **Timeline and milestones** showing a credible, prioritized reduction of memory safety vulnerabilities.
236238

content/blog/paradigms/index.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -604,6 +604,7 @@ Here are my personal rules of thumb:
604604
smaller scopes like functions and closures, functional methods such as
605605
mapping, filtering, or reducing can make your code both concise and clear.
606606
Use functional programming when you can phrase your problem as a series of transformations over some data.
607+
607608
* **Use imperative style for granular control.** In scenarios where you're
608609
working close to the hardware, or when you need explicit step-by-step
609610
execution, the imperative style is often a necessity. It allows for precise
@@ -624,3 +625,5 @@ Here are my personal rules of thumb:
624625
Lastly, avoid bias towards any particular paradigm. You can write better code if
625626
you test your assumptions every now and then.
626627

628+
629+

0 commit comments

Comments
 (0)