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)).