March 1, 2026

Borrow Wars: The Place Awakens

How Dada Enables Internal References

Rust’s rival move? New language Dada says “borrow my stuff” and the crowd goes wild… and wary

TLDR: Dada proposes “place-based” permissions so you can bundle data with the parts referencing it, promising simpler code than Rust’s approach. Commenters split: some love the clarity, others demand formal safety proofs and ask how mutation and memory management work, with comparisons to Mojo stirring the pot.

Dada just dropped a spicy blog post: instead of Rust’s famously strict “borrow checker,” it wants “place-based permissions,” meaning you can bundle a big string with the little pieces pointing into it and ship them together. In plain English: Dada lets you pack the cake and all the slices into one box. Fans cheered the promise of simpler, more flexible code — but the comments immediately turned into a courtroom drama. One skeptic shot in with “how sound is it?” demanding the same kind of math-backed safety Rust leans on. Another crowd favorite compared it to Mojo’s origin types, igniting the “who did it first?” subplot. And the pragmatists? They brought receipts: “Great idea,” said one, “but what about classic headaches like linked lists, mutation, and memory cleanup?”

Then the nitpickers pulled on gloves: if a “mutable reference” is laid out like the raw value, how do you actually mutate it from inside a function? Cue popcorn. Between jokes about “borrow checker PTSD” and “Dada vs Rust in a steel cage,” the thread split into two camps: the dreamers who want cleaner mental models, and the auditors demanding proofs before any confetti. The vibe: big ambition, big questions, and a lot of very online energy.

Key Points

  • Dada proposes place-based permissions, tying references to the storage place rather than lifetimes.
  • A Rust example shows that moving an owning String with slices (&str) into a struct is disallowed due to borrow rules.
  • Dada’s type annotations can express references as ref[place] Type, e.g., Vec[ref[list] String].
  • Dada enables defining a class where one field borrows from another field (e.g., items: Vec[ref[self.list] String]).
  • Using give semantics, Dada allows constructing a type that moves the owner while retaining internal references (Message(list.give, items.give)).

Hottest takes

"how sound is it?" — nine_k
"I believe places are a much better model than lifetimes" — armchairhacker
"so how does one mutate it from a function body?..." — amluto
Made with <3 by @siedrix and @shesho from CDMX. Powered by Forge&Hive.