[Development] Redesigning QML value types

Yuya Nishihara yuya at tcha.org
Wed Sep 21 17:59:13 CEST 2022

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


More information about the Development mailing list