<html><head><meta http-equiv="Content-Type" content="text/html charset=windows-1252"></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;"><div><br></div><div>The most backwards-compatible way to do this would surely be:</div><div><br></div><div>behaviour_info(callbacks) -></div><div>    [{foo, 2}, {bar, 4}];</div><div>behaviour_info(optional_callbacks) -></div><div>    [{bar, 3}, {boo, 14}];</div><div>behaviour_info(_) -></div><div>   undefined.</div><div><br></div><div>Presumably, having behaviour_info/1 together with -callback specs was disallowed because the compiler would have to check consistency between them, and to partial evaluation of the behaviour_info/1 code?</div><div><br></div><div>In this respect, -callbacks/1 and -optional_callbacks/1 are better since they can be understood directly after parsing. But they introduce some uncertainties:</div><div><br></div><div>- are multiple -callbacks/1 attributes allowed? If not explicitly disallowed, they would have to be unioned together.</div><div>- should the compiler produce a default -callbacks/1 directive including all specified callbacks? (except for those represented in -optional_callbacks/1?)</div><div><br></div><div>I think the most consistent and clear alternative is to introduce -optional_callback specs, given the path we’re already on.</div><div><br></div><div>BR,</div><div>Ulf W</div><br><div><div>On 28 Sep 2014, at 09:11, Robert Virding <<a href="mailto:rvirding@gmail.com">rvirding@gmail.com</a>> wrote:</div><br class="Apple-interchange-newline"><blockquote type="cite"><div dir="ltr"><div><div><div><div><div><div><div><div>Just to throw something completely different and definitely not backwards compatible I would prefer something like:<br><br></div>-callback([foo/2,bar/4]).<br></div>-optional_callback([bar/3,boo/14]).<br><br></div>foo(...) -> ... .<br></div>bar(...) -> ... .<br></div>baz(...) -> ... .<br></div>boo(...) -> ... .<br><br></div>This because it mirrors how -export(). behaves and does not push the information down into the actual definition. I think not seeing it at the start of the module is a bad option as it means I have to step down into the module to see what it exports and, in this case, what are the callbacks. You have to delve down into the module to find this "global" information. I find it very annoying with languages that do this, which is why I purposely followed erlang when doing LFE.<br><br></div><div>Yes, I know it is too late to change it. Is it? Maybe a parse transform to get it right?<br><br></div>Robert<br><br></div><div class="gmail_extra"><br><div class="gmail_quote">On 25 September 2014 05:38, Loïc Hoguin <span dir="ltr"><<a href="mailto:essen@ninenines.eu" target="_blank">essen@ninenines.eu</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><span class="">On 09/25/2014 03:01 PM, Hans Bolinder wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
[Loïc Hoguin:]<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
I didn't get any reply on my previous question almost 2 years ago here:<br>
<a href="http://erlang.org/pipermail/erlang-questions/2013-January/071763.html" target="_blank">http://erlang.org/pipermail/<u></u>erlang-questions/2013-January/<u></u>071763.html</a><br>
</blockquote>
<br>
I missed your original question, otherwise I would have replied to it.<br>
</blockquote>
<br></span>
No worries. :)<span class=""><br>
<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
There is an implementation in Erlang/OTP 18, see commit 683a293, using<br>
the second syntax suggested by Kostis, -optional_callbacks/1.<br>
</blockquote>
<br></span>
Woot!<br>
<br>
This looks great. I guess I'll just have to wait now and play with it a few weeks before 18 gets released.<br>
<br>
Thanks for the heads up!<span class="im HOEnZb"><br>
<br>
-- <br>
Loïc Hoguin<br>
<a href="http://ninenines.eu/" target="_blank">http://ninenines.eu</a><br></span><div class="HOEnZb"><div class="h5">
______________________________<u></u>_________________<br>
erlang-questions mailing list<br>
<a href="mailto:erlang-questions@erlang.org" target="_blank">erlang-questions@erlang.org</a><br>
<a href="http://erlang.org/mailman/listinfo/erlang-questions" target="_blank">http://erlang.org/mailman/<u></u>listinfo/erlang-questions</a><br>
</div></div></blockquote></div><br></div>
_______________________________________________<br>erlang-questions mailing list<br><a href="mailto:erlang-questions@erlang.org">erlang-questions@erlang.org</a><br>http://erlang.org/mailman/listinfo/erlang-questions<br></blockquote></div><br><div apple-content-edited="true">
<span class="Apple-style-span" style="border-collapse: separate; color: rgb(0, 0, 0); font-family: Helvetica; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-align: -webkit-auto; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; -webkit-text-decorations-in-effect: none; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px;  "><div><div>Ulf Wiger, Co-founder & Developer Advocate, Feuerlabs Inc.</div><div><a href="http://feuerlabs.com">http://feuerlabs.com</a></div></div><div><br></div></span><br class="Apple-interchange-newline">

</div>
<br></body></html>