On 9 Dec 2021, at 7:25, fo...@univ-mlv.fr wrote:

We may do something like that in a possible future, but i think it's more important to make the semantics of B3 visible front and center.

If you can only say one thing in such an explicit no-arg constructor (true initially and maybe forever) then it surely is strange that the silly thing has a body. So that leads to some un-bodied presentation like `class P { public default P(); }`, which could be made more expressive later (or never, probably).

But that, in turn, hits near to one of the places where Java *already set the default* (rightly or wrongly). Java defines, under some circumstances, the no-arg constructor for a class implicitly. Arguably this precedent applies (though not exactly) to the current case, of default construction of the default value.

I think, in the end, making a new primitive (as opposed to a new value class) is going to be an activity for library experts, not end users. Maybe the IDEs (not the JLS) can help them avoid pitfalls, but primitives are inherently tricky things to define. This means either that (a) it’s OK to force the experts to do the extra ceremony’s or (b) it’s OK to assume they know the rules of that game, and the ceremony won’t add anything. I incline towards (b).

The vision I’m assuming here is that a _bare primitive_ is something inherently loosely assembled. It’s really just a bundle of scalar values. If you want a class wrapped around that bundle, you should be declaring your value as a _primitive reference_ (assuming the option for the bare primitive must also be provided) or declaring your type as a true _value class_ (if the option for the bare primitive is not so important).

P.S. A friend kindly helped me update my metaphor firmware. I meant to say that pushing the feature under discussion would lead us along a path of pain, with various experiences along the way. But obviously not existential Jacksonian pain. And that’s all I want to say here about that.

Reply via email to