It’s because it’s a struct (not object); it’s just how it is (and I imagine UnityScript was working around this through boxing or something, so you weren’t doing yourself any favours anyway there). When you “get” position, you’re really getting a copy of it (so the compiler warns you that you’re modifying a copy and it’d be thrown away… albeit with a somewhat cryptic message)
Honestly though, because the vectors are such light structs, I don’t think you need to worry about performance.
EDIT: I doubt dart’s method will work. As Vector3 is a struct, and passed back as a copy via a getter, you can’t get a direct reference to the underlying field.