<!DOCTYPE html><html><head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
</head>
<body>
<div class="markdown-here-wrapper" data-md-url="" style="">
<p style="margin: 0px 0px 1.2em !important;">Having a class-wide
feature would certainly help. If a class is strict, I can
imagine us explaing to developers how their long-held assumption
of when are things “really initialized” needs some tweaks. But
if a class allows strict and non-strict fields to co-exist, I
can imagine a lot of confusion to arise as a result.</p>
<p style="margin: 0px 0px 1.2em !important;">E.g.</p>
<pre style="font-size: 0.85em; font-family: Consolas, Inconsolata, Courier, monospace;font-size: 1em; line-height: 1.2em;margin: 1.2em 0px;"><code style="font-size: 0.85em; font-family: Consolas, Inconsolata, Courier, monospace;margin: 0px 0.15em; padding: 0px 0.3em; white-space: pre-wrap; border: 1px solid rgb(234, 234, 234); background-color: rgb(248, 248, 248); border-radius: 3px; display: inline;white-space: pre; overflow: auto; border-radius: 3px; border: 1px solid rgb(204, 204, 204); padding: 0.5em 0.7em; display: block !important;">class Test {
strict int x = 1;
int y = x; // ok
int z = 2;
strict w = z; // error
}
</code></pre>
<p style="margin: 0px 0px 1.2em !important;">Field initialization
order is already fairly complex as it is (I mean remembering
where a field initializer is effectively expanded into by the
compiler). Adding new rules in this area is going to increase
complexity. But if the new rules are confined to “a new kind of
class” (as Brian suggests) then it is (subjectively) more
manageable.</p>
<p style="margin: 0px 0px 1.2em !important;">Maurizio</p>
<p style="margin: 0px 0px 1.2em !important;">On 11/11/2024 12:54,
Brian Goetz wrote:</p>
<p style="margin: 0px 0px 1.2em !important;"></p>
<div class="markdown-here-exclude">
<p></p>
<blockquote type="cite" cite="mid:0373AF59-E7A3-4C29-B380-F025003D2BA2@oracle.com">
I will reiterate my point that I think changing these rules is
something that is more amenable to a strict class, then to a
subset of the fields being strict. I continue to think that we
are missing an abstraction here.
<div><br id="lineBreakAtBeginningOfSignature">
<div dir="ltr">Sent from my iPad</div>
<div dir="ltr"><br>
<blockquote type="cite">On Nov 11, 2024, at 7:06 AM,
Maurizio Cimadamore
<a class="moz-txt-link-rfc2396E" href="mailto:maurizio.cimadamore@oracle.com"><maurizio.cimadamore@oracle.com></a> wrote:<br>
<br>
</blockquote>
</div>
<blockquote type="cite">
<div dir="ltr">
<p>I agree with this conclusion.</p>
<p>The main point here is that whether strict fields are
initialized before/after a super call is a very
low-level detail that we'd like most developers to
happily ignore. But if the distinction surfaces up at
the level of DA/DU and field assignment, this is no
longer strictly true, and it is possible that some
developers might be puzzled as a result, and have to
dig much deeper than they'd comfortable with to find
exactly why that is the case. Preserving the illusion
that all fields are created equal seems kind of nice,
even though it is still an illusion.</p>
<p>Maurizio<br>
</p>
<p><br>
</p>
<div class="moz-cite-prefix">On 08/11/2024 19:59, Dan
Smith wrote:<br>
</div>
<blockquote type="cite" cite="mid:E7C0FCCB-A795-45EC-B409-D3B2E3F761F9@oracle.com">
<pre>Conclusion: I think I'm happy with a DA/DU analysis that treats
initializers as if they run in left-to-right order, before the start of
the constructor. It's not really true, but it detects the errors we need
to detect with less complexity.</pre>
</blockquote>
</div>
</blockquote>
</div>
</blockquote>
<p></p>
</div>
<p style="margin: 0px 0px 1.2em !important;"></p>
<div title="MDH:PHA+SGF2aW5nIGEgY2xhc3Mtd2lkZSBmZWF0dXJlIHdvdWxkIGNlcnRhaW5seSBoZWxwLiBJZiBh
IGNsYXNzIGlzIHN0cmljdCwgSSBjYW4gaW1hZ2luZSB1cyBleHBsYWluZyB0byBkZXZlbG9wZXJz
IGhvdyB0aGVpciBsb25nLWhlbGQgYXNzdW1wdGlvbiBvZiB3aGVuIGFyZSB0aGluZ3MgInJlYWxs
eSBpbml0aWFsaXplZCIgbmVlZHMgc29tZSB0d2Vha3MuIEJ1dCBpZiBhIGNsYXNzIGFsbG93cyBz
dHJpY3QgYW5kIG5vbi1zdHJpY3QgZmllbGRzIHRvIGNvLWV4aXN0LCBJIGNhbiBpbWFnaW5lIGEg
bG90IG9mIGNvbmZ1c2lvbiB0byBhcmlzZSBhcyBhIHJlc3VsdC48L3A+PHA+RS5nLjxicj48L3A+
PHA+YGBgPGJyPmNsYXNzIFRlc3Qgezxicj4mbmJzcDsmbmJzcDsmbmJzcDsgc3RyaWN0IGludCB4
ID0gMTs8YnI+Jm5ic3A7Jm5ic3A7Jm5ic3A7IGludCB5ID0geDsgLy8gb2s8YnI+Jm5ic3A7Jm5i
c3A7Jm5ic3A7IGludCB6ID0gMjs8YnI+Jm5ic3A7Jm5ic3A7Jm5ic3A7IHN0cmljdCB3ID0gejsg
Ly8gZXJyb3I8YnI+fTxicj5gYGA8L3A+PHA+RmllbGQgaW5pdGlhbGl6YXRpb24gb3JkZXIgaXMg
YWxyZWFkeSBmYWlybHkgY29tcGxleCBhcyBpdCBpcyAoSSBtZWFuIHJlbWVtYmVyaW5nIHdoZXJl
IGEgZmllbGQgaW5pdGlhbGl6ZXIgaXMgZWZmZWN0aXZlbHkgZXhwYW5kZWQgaW50byBieSB0aGUg
Y29tcGlsZXIpLiBBZGRpbmcgbmV3IHJ1bGVzIGluIHRoaXMgYXJlYSBpcyBnb2luZyB0byBpbmNy
ZWFzZSBjb21wbGV4aXR5LiBCdXQgaWYgdGhlIG5ldyBydWxlcyBhcmUgY29uZmluZWQgdG8gImEg
bmV3IGtpbmQgb2YgY2xhc3MiIChhcyBCcmlhbiBzdWdnZXN0cykgdGhlbiBpdCBpcyAoc3ViamVj
dGl2ZWx5KSBtb3JlIG1hbmFnZWFibGUuPGJyPjwvcD48cD5NYXVyaXppbzxicj48L3A+PGRpdiBj
bGFzcz0ibW96LWNpdGUtcHJlZml4Ij5PbiAxMS8xMS8yMDI0IDEyOjU0LCBCcmlhbiBHb2V0eiB3
cm90ZTo8YnI+PC9kaXY+PGJsb2NrcXVvdGUgdHlwZT0iY2l0ZSIgY2l0ZT0ibWlkOjAzNzNBRjU5
LUU3QTMtNEMyOS1CMzgwLUYwMjUwMDNEMkJBMkBvcmFjbGUuY29tIj4KPG1ldGEgaHR0cC1lcXVp
dj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7ICI+CgoKSSB3aWxsIHJlaXRlcmF0
ZSBteSBwb2ludCB0aGF0IEkgdGhpbmsgY2hhbmdpbmcgdGhlc2UgcnVsZXMgaXMgc29tZXRoaW5n
IHRoYXQgaXMgbW9yZSBhbWVuYWJsZSB0byBhIHN0cmljdCBjbGFzcywgdGhlbiB0byBhIHN1YnNl
dCBvZiB0aGUgZmllbGRzIGJlaW5nIHN0cmljdC4gSSBjb250aW51ZSB0byB0aGluayB0aGF0IHdl
IGFyZSBtaXNzaW5nIGFuIGFic3RyYWN0aW9uIGhlcmUuCjxkaXY+PGJyIGlkPSJsaW5lQnJlYWtB
dEJlZ2lubmluZ09mU2lnbmF0dXJlIj4KPGRpdiBkaXI9Imx0ciI+U2VudCBmcm9tIG15IGlQYWQ8
L2Rpdj4KPGRpdiBkaXI9Imx0ciI+PGJyPgo8YmxvY2txdW90ZSB0eXBlPSJjaXRlIj5PbiBOb3Yg
MTEsIDIwMjQsIGF0IDc6MDbigK9BTSwgTWF1cml6aW8gQ2ltYWRhbW9yZSAmbHQ7bWF1cml6aW8u
Y2ltYWRhbW9yZUBvcmFjbGUuY29tJmd0OyB3cm90ZTo8YnI+Cjxicj4KPC9ibG9ja3F1b3RlPgo8
L2Rpdj4KPGJsb2NrcXVvdGUgdHlwZT0iY2l0ZSI+CjxkaXYgZGlyPSJsdHIiPu+7vwo8cD5JIGFn
cmVlIHdpdGggdGhpcyBjb25jbHVzaW9uLjwvcD4KPHA+VGhlIG1haW4gcG9pbnQgaGVyZSBpcyB0
aGF0IHdoZXRoZXIgc3RyaWN0IGZpZWxkcyBhcmUgaW5pdGlhbGl6ZWQgYmVmb3JlL2FmdGVyIGEg
c3VwZXIgY2FsbCBpcyBhIHZlcnkgbG93LWxldmVsIGRldGFpbCB0aGF0IHdlJ2QgbGlrZSBtb3N0
IGRldmVsb3BlcnMgdG8gaGFwcGlseSBpZ25vcmUuIEJ1dCBpZiB0aGUgZGlzdGluY3Rpb24gc3Vy
ZmFjZXMgdXAgYXQgdGhlIGxldmVsIG9mIERBL0RVIGFuZCBmaWVsZCBhc3NpZ25tZW50LCB0aGlz
IGlzCiBubyBsb25nZXIgc3RyaWN0bHkgdHJ1ZSwgYW5kIGl0IGlzIHBvc3NpYmxlIHRoYXQgc29t
ZSBkZXZlbG9wZXJzIG1pZ2h0IGJlIHB1enpsZWQgYXMgYSByZXN1bHQsIGFuZCBoYXZlIHRvIGRp
ZyBtdWNoIGRlZXBlciB0aGFuIHRoZXknZCBjb21mb3J0YWJsZSB3aXRoIHRvIGZpbmQgZXhhY3Rs
eSB3aHkgdGhhdCBpcyB0aGUgY2FzZS4gUHJlc2VydmluZyB0aGUgaWxsdXNpb24gdGhhdCBhbGwg
ZmllbGRzIGFyZSBjcmVhdGVkIGVxdWFsIHNlZW1zIGtpbmQKIG9mIG5pY2UsIGV2ZW4gdGhvdWdo
IGl0IGlzIHN0aWxsIGFuIGlsbHVzaW9uLjwvcD4KPHA+TWF1cml6aW88YnI+CjwvcD4KPHA+PGJy
Pgo8L3A+CjxkaXYgY2xhc3M9Im1vei1jaXRlLXByZWZpeCI+T24gMDgvMTEvMjAyNCAxOTo1OSwg
RGFuIFNtaXRoIHdyb3RlOjxicj4KPC9kaXY+CjxibG9ja3F1b3RlIHR5cGU9ImNpdGUiIGNpdGU9
Im1pZDpFN0MwRkNDQi1BNzk1LTQ1RUMtQjQwOS1EM0IyRTNGNzYxRjlAb3JhY2xlLmNvbSI+Cjxw
cmU+Q29uY2x1c2lvbjogSSB0aGluayBJJ20gaGFwcHkgd2l0aCBhIERBL0RVIGFuYWx5c2lzIHRo
YXQgdHJlYXRzIAppbml0aWFsaXplcnMgYXMgaWYgdGhleSBydW4gaW4gbGVmdC10by1yaWdodCBv
cmRlciwgYmVmb3JlIHRoZSBzdGFydCBvZiAKdGhlIGNvbnN0cnVjdG9yLiBJdCdzIG5vdCByZWFs
bHkgdHJ1ZSwgYnV0IGl0IGRldGVjdHMgdGhlIGVycm9ycyB3ZSBuZWVkCiB0byBkZXRlY3Qgd2l0
aCBsZXNzIGNvbXBsZXhpdHkuPC9wcmU+CjwvYmxvY2txdW90ZT4KPC9kaXY+CjwvYmxvY2txdW90
ZT4KPC9kaXY+CgoKPC9ibG9ja3F1b3RlPg==" style="height:0;width:0;max-height:0;max-width:0;overflow:hidden;font-size:0em;padding:0;margin:0;"></div>
</div>
</body>
</html>