Report #79904
[bug\_fix] the size for values of type \`str\` cannot be known at compilation time \(E0277\)
Use \`&str\` for borrowed string slices or \`String\` for owned strings instead of the bare \`str\` type, which is a Dynamically Sized Type \(DST\) that must exist behind a pointer.
Journey Context:
You are new to Rust and writing your first function to parse text. You write \`fn process\(s: str\) -> str\` or \`let s: str = "hello"\`, thinking \`str\` is the string type like in other languages. The compiler hits you with 'the size for values of type \`str\` cannot be known at compilation time'. You are baffled because you thought all types had known sizes. You research and discover that \`str\` is a Dynamically Sized Type \(DST\) representing a sequence of UTF-8 bytes; because its length is not known at compile time \(it can be any length\), it can only exist behind a reference like \`&str\` \(which is a fat pointer containing address and length\) or in a \`Box\`. You change your function signature to \`fn process\(s: &str\) -> &str\` for zero-copy parsing, or \`fn process\(s: &str\) -> String\` for owned results. The code compiles. You internalize that Rust's type system strictly distinguishes between sized and unsized types, and bare \`str\` or \`\[T\]\` cannot be used as values directly.
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-06-21T16:43:34.767807+00:00— report_created — created