<div dir="ltr"><div class="markdown-here-wrapper" style=""><p style="margin:0px 0px 1.2em!important"><a href="https://github.com/Anton3/swift-evolution/blob/master/proposals/NNNN-rename-mirror.md">https://github.com/Anton3/swift-evolution/blob/master/proposals/NNNN-rename-mirror.md</a></p>
<h1 id="rename-mirror-" style="margin:1.3em 0px 1em;padding:0px;font-weight:bold;font-size:1.6em;border-bottom-width:1px;border-bottom-style:solid;border-bottom-color:rgb(221,221,221)">Rename <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);border-radius:3px;display:inline;background-color:rgb(248,248,248)">Mirror</code></h1>
<ul style="margin:1.2em 0px;padding-left:2em">
<li style="margin:0.5em 0px">Proposal: <a href="http://NNNN-filename.md">SE-NNNN</a></li>
<li style="margin:0.5em 0px">Author: <a href="https://github.com/Anton3">Anton Zhilin</a>, <a href="https://github.com/DevAndArtist">Adrian Zubarev</a></li>
<li style="margin:0.5em 0px">Status: <strong>Awaiting review</strong></li>
<li style="margin:0.5em 0px">Review manager: TBD</li>
</ul>
<h2 id="introduction" style="margin:1.3em 0px 1em;padding:0px;font-weight:bold;font-size:1.4em;border-bottom-width:1px;border-bottom-style:solid;border-bottom-color:rgb(238,238,238)">Introduction</h2>
<p style="margin:0px 0px 1.2em!important">Rename <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);border-radius:3px;display:inline;background-color:rgb(248,248,248)">Mirror</code> to <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);border-radius:3px;display:inline;background-color:rgb(248,248,248)">DebugRepresentation</code> and <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);border-radius:3px;display:inline;background-color:rgb(248,248,248)">CustomReflectable</code> to <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);border-radius:3px;display:inline;background-color:rgb(248,248,248)">CustomDebugRepresentable</code>.</p>
<h2 id="motivation" style="margin:1.3em 0px 1em;padding:0px;font-weight:bold;font-size:1.4em;border-bottom-width:1px;border-bottom-style:solid;border-bottom-color:rgb(238,238,238)">Motivation</h2>
<p style="margin:0px 0px 1.2em!important">Name of <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);border-radius:3px;display:inline;background-color:rgb(248,248,248)">Mirror</code> does not reflect (no pun) what it is intended to do, i.e. providing full featured reflection, which we want to see in Swift 4. Other than that, it is only intended to serve for debugging purposes, e.g. building trees for selected objects. Some evidence to that:</p>
<ul style="margin:1.2em 0px;padding-left:2em">
<li style="margin:0.5em 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);border-radius:3px;display:inline;background-color:rgb(248,248,248)">Mirror.DisplayStyle</code> contains <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);border-radius:3px;display:inline;background-color:rgb(248,248,248)">optional</code> and <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);border-radius:3px;display:inline;background-color:rgb(248,248,248)">set</code> as special cases, but does not contain <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);border-radius:3px;display:inline;background-color:rgb(248,248,248)">function</code></li>
<li style="margin:0.5em 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);border-radius:3px;display:inline;background-color:rgb(248,248,248)">Mirror</code> collects all information possible at initialization, while for true reflection we want laziness</li>
<li style="margin:0.5em 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);border-radius:3px;display:inline;background-color:rgb(248,248,248)">Mirror</code> allows customization. For example, <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);border-radius:3px;display:inline;background-color:rgb(248,248,248)">Array&lt;T&gt;</code> is represented with a field for each of its elements. Do we want this for “true” reflection we want to add in the future?</li>
</ul>
<h2 id="proposed-solution" style="margin:1.3em 0px 1em;padding:0px;font-weight:bold;font-size:1.4em;border-bottom-width:1px;border-bottom-style:solid;border-bottom-color:rgb(238,238,238)">Proposed solution</h2>
<ul style="margin:1.2em 0px;padding-left:2em">
<li style="margin:0.5em 0px">Rename struct <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);border-radius:3px;display:inline;background-color:rgb(248,248,248)">Mirror</code> to <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);border-radius:3px;display:inline;background-color:rgb(248,248,248)">DebugRepresentation</code></li>
<li style="margin:0.5em 0px">Rename protocol <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);border-radius:3px;display:inline;background-color:rgb(248,248,248)">CustomReflectable</code> to <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);border-radius:3px;display:inline;background-color:rgb(248,248,248)">CustomDebugRepresentable</code></li>
<li style="margin:0.5em 0px">Rename property <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);border-radius:3px;display:inline;background-color:rgb(248,248,248)">customMirror</code> to <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);border-radius:3px;display:inline;background-color:rgb(248,248,248)">customDebugRepresentation</code></li>
<li style="margin:0.5em 0px">Hope that one day we will get a real <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);border-radius:3px;display:inline;background-color:rgb(248,248,248)">Mirror</code> with full reflection capabilities</li>
</ul>
<h2 id="impact-on-existing-code" style="margin:1.3em 0px 1em;padding:0px;font-weight:bold;font-size:1.4em;border-bottom-width:1px;border-bottom-style:solid;border-bottom-color:rgb(238,238,238)">Impact on existing code</h2>
<p style="margin:0px 0px 1.2em!important">This is a breaking change; easy automated migration possible.</p>
<div title="MDH:PGRpdj5odHRwczovL2dpdGh1Yi5jb20vQW50b24zL3N3aWZ0LWV2b2x1dGlvbi9ibG9iL21hc3Rl
ci9wcm9wb3NhbHMvTk5OTi1yZW5hbWUtbWlycm9yLm1kPGJyPjwvZGl2PjxkaXY+PGJyPjwvZGl2
PjxkaXY+IyBSZW5hbWUgYE1pcnJvcmA8L2Rpdj48ZGl2Pjxicj48L2Rpdj48ZGl2PiogUHJvcG9z
YWw6IFtTRS1OTk5OXShOTk5OLWZpbGVuYW1lLm1kKTwvZGl2PjxkaXY+KiBBdXRob3I6IFtBbnRv
biBaaGlsaW5dKGh0dHBzOi8vZ2l0aHViLmNvbS9BbnRvbjMpLCBbQWRyaWFuIFp1YmFyZXZdKGh0
dHBzOi8vZ2l0aHViLmNvbS9EZXZBbmRBcnRpc3QpPC9kaXY+PGRpdj4qIFN0YXR1czogKipBd2Fp
dGluZyByZXZpZXcqKjwvZGl2PjxkaXY+KiBSZXZpZXcgbWFuYWdlcjogVEJEPC9kaXY+PGRpdj48
YnI+PC9kaXY+PGRpdj4jIyBJbnRyb2R1Y3Rpb248L2Rpdj48ZGl2Pjxicj48L2Rpdj48ZGl2PlJl
bmFtZSBgTWlycm9yYCB0byBgRGVidWdSZXByZXNlbnRhdGlvbmAgYW5kIGBDdXN0b21SZWZsZWN0
YWJsZWAgdG8gYEN1c3RvbURlYnVnUmVwcmVzZW50YWJsZWAuPC9kaXY+PGRpdj48YnI+PC9kaXY+
PGRpdj4jIyBNb3RpdmF0aW9uPC9kaXY+PGRpdj48YnI+PC9kaXY+PGRpdj5OYW1lIG9mIGBNaXJy
b3JgIGRvZXMgbm90IHJlZmxlY3QgKG5vIHB1bikgd2hhdCBpdCBpcyBpbnRlbmRlZCB0byBkbywg
aS5lLiBwcm92aWRpbmcgZnVsbCBmZWF0dXJlZCByZWZsZWN0aW9uLCB3aGljaCB3ZSB3YW50IHRv
IHNlZSBpbiBTd2lmdCA0LiBPdGhlciB0aGFuIHRoYXQsIGl0IGlzIG9ubHkgaW50ZW5kZWQgdG8g
c2VydmUgZm9yIGRlYnVnZ2luZyBwdXJwb3NlcywgZS5nLiBidWlsZGluZyB0cmVlcyBmb3Igc2Vs
ZWN0ZWQgb2JqZWN0cy4gU29tZSBldmlkZW5jZSB0byB0aGF0OjwvZGl2PjxkaXY+PGJyPjwvZGl2
PjxkaXY+KiBgTWlycm9yLkRpc3BsYXlTdHlsZWAgY29udGFpbnMgYG9wdGlvbmFsYCBhbmQgYHNl
dGAgYXMgc3BlY2lhbCBjYXNlcywgYnV0IGRvZXMgbm90IGNvbnRhaW4gYGZ1bmN0aW9uYDwvZGl2
PjxkaXY+KiBgTWlycm9yYCBjb2xsZWN0cyBhbGwgaW5mb3JtYXRpb24gcG9zc2libGUgYXQgaW5p
dGlhbGl6YXRpb24sIHdoaWxlIGZvciB0cnVlIHJlZmxlY3Rpb24gd2Ugd2FudCBsYXppbmVzczwv
ZGl2PjxkaXY+KiBgTWlycm9yYCBhbGxvd3MgY3VzdG9taXphdGlvbi4gRm9yIGV4YW1wbGUsIGBB
cnJheSZsdDtUJmd0O2AgaXMgcmVwcmVzZW50ZWQgd2l0aCBhIGZpZWxkIGZvciBlYWNoIG9mIGl0
cyBlbGVtZW50cy4gRG8gd2Ugd2FudCB0aGlzIGZvciAidHJ1ZSIgcmVmbGVjdGlvbiB3ZSB3YW50
IHRvIGFkZCBpbiB0aGUgZnV0dXJlPzwvZGl2PjxkaXY+PGJyPjwvZGl2PjxkaXY+IyMgUHJvcG9z
ZWQgc29sdXRpb248L2Rpdj48ZGl2Pjxicj48L2Rpdj48ZGl2PiogUmVuYW1lIHN0cnVjdCBgTWly
cm9yYCB0byBgRGVidWdSZXByZXNlbnRhdGlvbmA8L2Rpdj48ZGl2PiogUmVuYW1lIHByb3RvY29s
IGBDdXN0b21SZWZsZWN0YWJsZWAgdG8gYEN1c3RvbURlYnVnUmVwcmVzZW50YWJsZWA8L2Rpdj48
ZGl2PiogUmVuYW1lIHByb3BlcnR5IGBjdXN0b21NaXJyb3JgIHRvIGBjdXN0b21EZWJ1Z1JlcHJl
c2VudGF0aW9uYDwvZGl2PjxkaXY+KiBIb3BlIHRoYXQgb25lIGRheSB3ZSB3aWxsIGdldCBhIHJl
YWwgYE1pcnJvcmAgd2l0aCBmdWxsIHJlZmxlY3Rpb24gY2FwYWJpbGl0aWVzPC9kaXY+PGRpdj48
YnI+PC9kaXY+PGRpdj4jIyBJbXBhY3Qgb24gZXhpc3RpbmcgY29kZTwvZGl2PjxkaXY+PGJyPjwv
ZGl2PjxkaXY+VGhpcyBpcyBhIGJyZWFraW5nIGNoYW5nZTsgZWFzeSBhdXRvbWF0ZWQgbWlncmF0
aW9uIHBvc3NpYmxlLjwvZGl2Pg==" style="height:0;width:0;max-height:0;max-width:0;overflow:hidden;font-size:0em;padding:0;margin:0">​</div></div></div>