On Wed, 21 Sep 2022 14:59:08 +0200, Ulf Hermann wrote: > If a function has type annotations, we pass its arguments and return > value by value (if they are value types). Otherwise we pass by > reference. Inside a function, everything is a reference. > > This makes some intuitive sense: The type annotations are QML types, not > JavaScript types. You might expect QML _value_ types to be passed by > value. As long as the arguments and return values (or indeed the locals > on the stack) are untyped, we're firmly in JavaScript land.
I like this idea in general in that it's explicit and backward compatible. Following this type annotation rule, maybe we'll need to consider about explicitly-value-typed vs JS-ish variable? let a: font = f // copy f because a is value-typed? let b = a // copy because a is typed, and b's type is inferred from a? let c = f // ref because f is JS-ish type And it's probably nice to provide an explicit copy/clone function (like the proposed detach()) if untyped value isn't copied by default: let v1 = vec3d.explicit_copy_func(); v1.x = whatever; // don't wanna mutate the original vector Regards, _______________________________________________ Development mailing list Development@qt-project.org https://lists.qt-project.org/listinfo/development