<div dir="ltr"><div class="gmail_extra"><div class="gmail_quote">2018-04-30 13:53 GMT+02:00 Michael Van Canneyt <span dir="ltr"><<a href="mailto:michael@freepascal.org" target="_blank">michael@freepascal.org</a>></span>:<blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
You mean that a constructor call for a program that does not uses pointers/management operators also gets slower ?<br>
<br>
Can we solve this _without_ additional tricks ?<br>
<br>
Because the fact that a feature you do not use slows down your code is not really acceptable in my opinion.<br></blockquote><div><br></div><div>It was discussed some time ago on core so I have no idea why you are asking for this again. The "slower" is too strong word. RTL must to call internal int_initialize in TObject.<span style="color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px;font-style:normal;font-variant-ligatures:normal;font-variant-caps:normal;font-weight:400;letter-spacing:normal;text-align:start;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;background-color:rgb(255,255,255);text-decoration-style:initial;text-decoration-color:initial;float:none;display:inline">InitInstance and this is required for management operators.<span> T</span></span>he similar operation was always executed for destructors in TObject.CleanupInstance: "int_finalize" even without new feature "management operator" for all managed types.</div><div><br></div><div>With FastRTTI additional call to 

<span style="text-align:start;text-indent:0px;background-color:rgb(255,255,255);text-decoration-style:initial;text-decoration-color:initial;float:none;display:inline">int_initialize is omitted when possible. </span>Furthermore with FastRTTI all code is executed faster (much faster than in 3.0.x) because all info about managed fields (for classes, objects and records) is aggregated in single array for faster initialization/finalization. By managed fields I mean all managed types (strings, interfaces, etc.)</div><div><br></div><div>So: no we can't solve this without FastRTTI (or without significant part of FastRTTI) and this is not additional trick but new feature.</div><div><br></div><div>This is the same for any string and interface (or any other managed type) inside classes. Your code is already "slows down" even when you don't use managed types for fields (even in 3.0.x or in any previous version). Nothing new here so probably you should change your opinion.</div><div><br></div><div>This is the price of managed types. <span style="text-align:start;text-indent:0px;background-color:rgb(255,255,255);text-decoration-style:initial;text-decoration-color:initial;float:none;display:inline">FastRTTI is significant step forward for more performant and extensive usage of managed types (also for smart pointers).</span>

<br></div><div><br></div></div>-- <br><div class="gmail_signature"><div dir="ltr"><div>Best regards,<br>Maciej Izak</div></div></div>
</div></div>