<html><head></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space; "><div><br></div><div>Max,</div><div><br></div><div>Yes, records are awkward for sharing across interfaces for this reason.</div><div><br></div><div>When I wrote the Diameter application (which is now part of OTP), I tried to mitigate the problem in two ways:</div><div><br></div><div>- Allow the user to pass a proplist as an alternative to the record. This requires a conversion step, and some slight overhead.</div><div>- Use 'exprecs' (part of <a href="http://github.com/esl/parse_trans">http://github.com/esl/parse_trans</a>, although the Diameter app has its own version), to generate accessor functions similar to what you describe. The notation is perhaps not the most beautiful, but you get used to it.</div><div><br></div><div>Exprecs actually also has some upgrade support, where you can specify different versions of the same record:</div><div><br></div><div><a href="http://erlang.2086793.n4.nabble.com/RFC-exprecs-and-record-versions-td2114178.html">http://erlang.2086793.n4.nabble.com/RFC-exprecs-and-record-versions-td2114178.html</a></div><div><br></div><div>I don't know if anyone has ever used it; I've never received comments on it, as far as I recall.</div><div><br></div><div>BR,</div><div>Ulf W</div><br><div><div>On 27 Jul 2011, at 22:36, Max Lapshin wrote:</div><br class="Apple-interchange-newline"><blockquote type="cite"><div>Ulf. There maybe many speculations about "most convenient language" or<br>"best garbage collection", but one serious problem is really<br>mentioned.<br><br>It is lack of data structure, which can survive upgrade of only one<br>part of software.<br><br>I can't create redistributable plugins for erlyvideo that can use<br>headers with record description, I have to write such things:<br>ems_media:get(Media, last_dts)<br>and frankly speaking I don't understand how do other people live without this.<br><br>I understand, that C language has the same problem, but maybe there<br>are some ideas to make some delayed instantiation of record usage in<br>modules?<br>I.e. add "record_get(Record, name)" instruction to beam, which should<br>be translated to "element(Record, N)" on loading?<br></div></blockquote></div><br><div>
<div>Ulf Wiger, CTO, Erlang Solutions, Ltd.</div><div><a href="http://erlang-solutions.com">http://erlang-solutions.com</a></div><div><br></div><br class="Apple-interchange-newline">
</div>
<br></body></html>