<div dir="ltr">Hi Phil!,<div> it is interesting what you are proposing. I'd like to understand a little bit more the motivation, why you did it that way, etc., so I have a few questions :-)</div><div>1) Do you have a real case scenario for this feature? I'd like to know the use that we could give it. I would like other peoples opinion on this too because it is a change in the core.</div><div>2) Why would not only redefine #compile:... and #removeSelector: for the classes that you need that behavior? (it is related with 1) and I think I know what your answer will be, but I ask just in case :-) )</div><div>3) Why do you signal an error if compilation is not allowed? That is changing the contract of #compile:... and I'm not sure that an exception is what users of #compile... would expect in that case. Also, in the case of not removing a method you do not signal an exception making the behavior of "not doing" kind of "inconsistent" </div><div>4) The redefinition of #isOkToCompile:meta, #isOkToRemove:meta: and #noteRemovalOf:meta: in Object class are not necessary, as far as I can see, why did you redefine them there?</div><div><br></div><div>About your question of #removeSelector:, I don't quite understand you question, I think you are missing the meta class part there. I mean, I you have class XX and it has a class method, let's say #m1 and you want to remove it, you have to do:</div><div>XX class removeSelector: #m1</div><div><br></div><div>The method that will be evaluated for that message send will be the one implemented in ClassDescription, as with a class because Metaclass and Class are subclasses of ClassDescription.</div><div>Does it make sense what I'm saying? or am I not understanding your question?</div><div><br></div><div>Cheers!</div><div>Hernan.</div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Sat, Jan 18, 2020 at 8:08 PM Phil B via Cuis-dev <<a href="mailto:cuis-dev@lists.cuis.st">cuis-dev@lists.cuis.st</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir="ltr">Attached is a first cut of something I've wanted for a while: the ability to capture method changes as they occur with the ability to prevent them from happening if needed at a global level. Basically it's just paired methods of #isOkTo[Compile|Remove]:meta: and #note[Compilation|Removal]Of:meta:.<div><br></div><div>It's always bothered me how central the method structure is yet completely useless from the standpoint of having extensible metadata... if I'm wrong re: extensibility, please let me know what I've overlooked. So barring that, these changes allow for things like helping to keep a separate metadata structure in sync with method changes. The main requirement is to be able to track method adds, changes and deletes to the image globally. Not sure, but I was thinking that this facility might also be useful for refactoring tools.<br><div><br></div><div>One issue / odd thing I noticed: the removal methods only get called instance-side due to ClassDescription #removeSelector: only getting called on instance methods and you have to jump up to the Behavior implementor for class methods. That seems strange to me since method compilation all appears to occur at the level of ClassDescription. Is there a reason removals need to be different from compilation in this way? (Not knowing the answer, I haven't fixed this issue in the attached changeset)</div></div></div>
-- <br>
Cuis-dev mailing list<br>
<a href="mailto:Cuis-dev@lists.cuis.st" target="_blank">Cuis-dev@lists.cuis.st</a><br>
<a href="https://lists.cuis.st/mailman/listinfo/cuis-dev" rel="noreferrer" target="_blank">https://lists.cuis.st/mailman/listinfo/cuis-dev</a><br>
</blockquote></div><br clear="all"><div><br></div>-- <br><div dir="ltr" class="gmail_signature"><div dir="ltr"><div><div dir="ltr"><div dir="ltr"><div dir="ltr"><div dir="ltr"><div dir="ltr"><div dir="ltr"><div dir="ltr"><div dir="ltr"><div><span style="font-family:tahoma,sans-serif;font-size:xx-small;border-collapse:collapse"><strong><span style="font-size:8pt"><span><span style="font-size:small"><font size="2"><span style="font-weight:normal"><span style="font-weight:bold">Hernán Wilkinson</span><br>Agile Software Development, Teaching & Coaching</span></font></span></span></span></strong></span></div><div><span style="font-family:tahoma,sans-serif;font-size:xx-small;border-collapse:collapse"><strong><span style="font-size:8pt"><span><span style="font-size:small"><font size="2"><span style="font-weight:normal">Phone: +54-011</span></font></span></span></span></strong></span><font face="tahoma, sans-serif" size="2">-4893-2057</font></div><div><strong style="font-family:tahoma,sans-serif;font-size:xx-small"><span style="font-size:8pt"><span style="font-size:small"><font size="2"><span style="font-weight:normal">Twitter: @HernanWilkinson</span></font></span></span></strong></div><div><span style="font-family:tahoma,sans-serif;font-size:xx-small;border-collapse:collapse"><strong><span style="font-size:8pt"><span><span style="font-size:small"><font size="2"><span style="font-weight:normal">site: <a href="http://www.10pines.com/" style="color:rgb(17,65,112)" target="_blank">http://www.10Pines.com</a></span></font></span></span></span></strong></span></div><div><font face="tahoma, sans-serif"><span style="border-collapse:collapse">Address: Alem 896</span></font>, Floor 6, Buenos Aires, Argentina</div></div></div></div></div></div></div></div></div></div></div></div>