<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<style type="text/css" style="display:none;"><!-- P {margin-top:0;margin-bottom:0;} --></style>
</head>
<body dir="ltr">
<div id="divtagdefaultwrapper" style="font-size:12pt;color:#000000;font-family:Calibri,Helvetica,sans-serif;" dir="ltr">
<div id="divtagdefaultwrapper" style="font-size: 12pt; color: rgb(0, 0, 0); font-family: Calibri, Helvetica, sans-serif, EmojiFont, "Apple Color Emoji", "Segoe UI Emoji", NotoColorEmoji, "Segoe UI Symbol", "Android Emoji", EmojiSymbols;" dir="ltr">
<p>> <span style="font-size: 12pt;">ModificationForbidden is resumable like a Warning, and unlike most Errors.  Perhaps it should be a Warning.</span></p>
<div><br>
</div>
<p></p>
<p>-1. :-) Warnings are Notifications, and Notifications are characterized by their property not to have any side-effects on the core operation unless handled by any caller. (A second type of Notification is used for requesting some value that can be answered
 by any handler, but the overall effect is the same.) See Notification >> #defaultAction and its class comment.</p>
<p>If a ModificationForbidden exception is resumed, the object keeps unmodified, so this is a kinda dangerous resumption. That's also why <span style="font-size: 12pt;">the defaultAction of a MF is not to resume the execution but </span><span style="font-size: 12pt;">to
 raise an UnhandledError instead, which, IMHO, </span><span style="font-size: 12pt;">is
</span><span style="font-size: 12pt;">the (only) </span><span style="font-size: 12pt;">right way to handle the event that a low-level operation could not be executed as
</span><span style="font-size: 12pt;">you would have expected</span><span style="font-size: 12pt;">.</span></p>
<p><br>
</p>
<p>I would never expect the following to evaluate to 0 because any far-away caller could resume every possible MF:</p>
</div>
<blockquote style="margin: 0 0 0 40px; border: none; padding: 0px;">
<div style="font-size: 12pt; color: rgb(0, 0, 0); font-family: Calibri, Helvetica, sans-serif, EmojiFont, "Apple Color Emoji", "Segoe UI Emoji", NotoColorEmoji, "Segoe UI Symbol", "Android Emoji", EmojiSymbols;" dir="ltr">
<p><span>#(0) at: 1 put: 1; first</span></p>
</div>
</blockquote>
<div style="font-size: 12pt; color: rgb(0, 0, 0); font-family: Calibri, Helvetica, sans-serif, EmojiFont, "Apple Color Emoji", "Segoe UI Emoji", NotoColorEmoji, "Segoe UI Symbol", "Android Emoji", EmojiSymbols;" dir="ltr">
<p>How could you write reliable code if you had to make such assumptions? I believe that this would lead us to crazy shambles where you had to question every obvious fact.</p>
<p><br>
</p>
<p>Warnings say: You shouldn't do this, or maybe you don't actually want to do this, but it is possible to continue doing so, so we won't stop you from doing so until you decide otherwise.</p>
<p>Errors say: You can't do this, and we won't permit that attempt, so <span style="font-family: Calibri, Helvetica, sans-serif, EmojiFont, "Apple Color Emoji", "Segoe UI Emoji", NotoColorEmoji, "Segoe UI Symbol", "Android Emoji", EmojiSymbols; font-size: 16px;">
you can </span>either decide to actively ignore this error and skip to the next statement, or we'll blow up the execution (and almost ever open a Debugger).</p>
<div style="font-size: 12pt; color: rgb(0, 0, 0); font-family: Calibri, Helvetica, sans-serif, EmojiFont, "Apple Color Emoji", "Segoe UI Emoji", NotoColorEmoji, "Segoe UI Symbol", "Android Emoji", EmojiSymbols;" dir="ltr">
<br>
</div>
<div style="font-size: 12pt; color: rgb(0, 0, 0); font-family: Calibri, Helvetica, sans-serif, EmojiFont, "Apple Color Emoji", "Segoe UI Emoji", NotoColorEmoji, "Segoe UI Symbol", "Android Emoji", EmojiSymbols;" dir="ltr">
At least this is what I could learn from Squeak's exception framework until now. As always, I'm open for new perspectives :-)</div>
<div style="font-size: 12pt; color: rgb(0, 0, 0); font-family: Calibri, Helvetica, sans-serif, EmojiFont, "Apple Color Emoji", "Segoe UI Emoji", NotoColorEmoji, "Segoe UI Symbol", "Android Emoji", EmojiSymbols;" dir="ltr">
<br>
</div>
<div style="font-size: 12pt; color: rgb(0, 0, 0); font-family: Calibri, Helvetica, sans-serif, EmojiFont, "Apple Color Emoji", "Segoe UI Emoji", NotoColorEmoji, "Segoe UI Symbol", "Android Emoji", EmojiSymbols;" dir="ltr">
Best,</div>
<div style="font-size: 12pt; color: rgb(0, 0, 0); font-family: Calibri, Helvetica, sans-serif, EmojiFont, "Apple Color Emoji", "Segoe UI Emoji", NotoColorEmoji, "Segoe UI Symbol", "Android Emoji", EmojiSymbols;" dir="ltr">
Christoph</div>
<br>
<div style="color: rgb(0, 0, 0);">
<hr tabindex="-1" style="display:inline-block; width:98%">
<div id="divRplyFwdMsg" dir="ltr"><font face="Calibri, sans-serif" color="#000000" style="font-size:11pt"><b>Von:</b> Squeak-dev <squeak-dev-bounces@lists.squeakfoundation.org> im Auftrag von Chris Muller <asqueaker@gmail.com><br>
<b>Gesendet:</b> Freitag, 10. April 2020 00:15 Uhr<br>
<b>An:</b> The general-purpose Squeak developers list<br>
<b>Betreff:</b> Re: [squeak-dev] Why is ModificationForbidden not an Error?</font>
<div> </div>
</div>
<div>
<div dir="ltr">
<div>ModificationForbidden is resumable like a Warning, and unlike most Errors.  Perhaps it should be a Warning.<br>
</div>
<div><br>
</div>
<div>Proper signaling and handling are independent of each other.  Please evaluate your decision from the handling side too -- whether it'd be better for TestRunner's handling to include ModificationForbidden.
<div></div>
</div>
<div><br>
</div>
<div> - Chris</div>
</div>
<br>
<div class="gmail_quote">
<div dir="ltr" class="gmail_attr">On Thu, Apr 9, 2020 at 12:44 PM Thiede, Christoph <<a href="mailto:Christoph.Thiede@student.hpi.uni-potsdam.de" target="_blank">Christoph.Thiede@student.hpi.uni-potsdam.de</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="auto">
<div id="gmail-m_5874301768949943328gmail-m_-7324575958580540449gmail-m_2757329192839109014gmail-m_-3634851521700033divtagdefaultwrapper" dir="ltr" style="font-size: 12pt; color: rgb(0, 0, 0); font-family: Calibri, Helvetica, sans-serif, EmojiFont, "Apple Color Emoji", "Segoe UI Emoji", NotoColorEmoji, "Segoe UI Symbol", "Android Emoji", EmojiSymbols;">
<p>Thanks for the fast feedback, I am going to commit this to the Inbox!</p>
<div id="gmail-m_5874301768949943328gmail-m_-7324575958580540449gmail-m_2757329192839109014gmail-m_-3634851521700033Signature">
<div id="gmail-m_5874301768949943328gmail-m_-7324575958580540449gmail-m_2757329192839109014gmail-m_-3634851521700033divtagdefaultwrapper" dir="ltr" style="font-size:12pt; color:rgb(0,0,0); font-family:Calibri,Helvetica,sans-serif,EmojiFont,"Apple Color Emoji","Segoe UI Emoji",NotoColorEmoji,"Segoe UI Symbol","Android Emoji",EmojiSymbols">
<div name="divtagdefaultwrapper">
<div>
<div id="gmail-m_5874301768949943328gmail-m_-7324575958580540449gmail-m_2757329192839109014gmail-m_-3634851521700033Item.MessagePartBody">
<div id="gmail-m_5874301768949943328gmail-m_-7324575958580540449gmail-m_2757329192839109014gmail-m_-3634851521700033Item.MessageUniqueBody" style="font-family:wf_segoe-ui_normal,"Segoe UI","Segoe WP",Tahoma,Arial,sans-serif,serif,EmojiFont">
<div dir="ltr">
<div id="gmail-m_5874301768949943328gmail-m_-7324575958580540449gmail-m_2757329192839109014gmail-m_-3634851521700033divtagdefaultwrapper">
<font face="Calibri,Helvetica,sans-serif,EmojiFont,Apple Color Emoji,Segoe UI Emoji,NotoColorEmoji,Segoe UI Symbol,Android Emoji,EmojiSymbols">
<div id="gmail-m_5874301768949943328gmail-m_-7324575958580540449gmail-m_2757329192839109014gmail-m_-3634851521700033Signature">
<div style="margin:0px"><font style="font-family:Calibri,Arial,Helvetica,sans-serif,serif,EmojiFont">
<div><font size="3" color="black"><span style="font-size:12pt"><a href="http://www.hpi.de/" rel="noopener noreferrer" id="gmail-m_5874301768949943328gmail-m_-7324575958580540449gmail-m_2757329192839109014gmail-m_-3634851521700033LPNoLP" target="_blank"><font size="2"><span id="gmail-m_5874301768949943328gmail-m_-7324575958580540449gmail-m_2757329192839109014gmail-m_-3634851521700033LPlnk909538"><font color="#757B80"></font></span></font></a></span></font></div>
</font></div>
</div>
</font></div>
</div>
</div>
</div>
<div id="gmail-m_5874301768949943328gmail-m_-7324575958580540449gmail-m_2757329192839109014gmail-m_-3634851521700033Item.MessagePartBody">
<br>
</div>
<div id="gmail-m_5874301768949943328gmail-m_-7324575958580540449gmail-m_2757329192839109014gmail-m_-3634851521700033Item.MessagePartBody">
> <span style="font-size:12pt">Making it an error might also make smalltalkCI (through SUnit) catch it to continue. Failing the tests rather than halting the run.</span>
<div><br>
</div>
<div>Exactly, that was also my original motivation to ask this question :-)</div>
<div><br>
</div>
<div>Best,</div>
<div>Christoph</div>
</div>
</div>
<div><font size="2" color="#808080"></font></div>
</div>
</div>
</div>
</div>
<hr style="display:inline-block; width:98%">
<div id="gmail-m_5874301768949943328gmail-m_-7324575958580540449gmail-m_2757329192839109014gmail-m_-3634851521700033divRplyFwdMsg" dir="ltr">
<font face="Calibri, sans-serif" color="#000000" style="font-size:11pt"><b>Von:</b> Squeak-dev <<a href="mailto:squeak-dev-bounces@lists.squeakfoundation.org" target="_blank">squeak-dev-bounces@lists.squeakfoundation.org</a>> im Auftrag von Eliot Miranda <<a href="mailto:eliot.miranda@gmail.com" target="_blank">eliot.miranda@gmail.com</a>><br>
<b>Gesendet:</b> Donnerstag, 9. April 2020 17:03:59<br>
<b>An:</b> The general-purpose Squeak developers list<br>
<b>Betreff:</b> Re: [squeak-dev] Why is ModificationForbidden not an Error?</font>
<div> </div>
</div>
<div>Hi Christoph,<br>
<div dir="ltr"><br>
</div>
<div dir="ltr"><br>
<blockquote type="cite">On Apr 9, 2020, at 7:01 AM, Thiede, Christoph <<a href="mailto:Christoph.Thiede@student.hpi.uni-potsdam.de" target="_blank">Christoph.Thiede@student.hpi.uni-potsdam.de</a>> wrote:<br>
<br>
</blockquote>
</div>
<blockquote type="cite">
<div dir="ltr">
<div id="gmail-m_5874301768949943328gmail-m_-7324575958580540449gmail-m_2757329192839109014gmail-m_-3634851521700033divtagdefaultwrapper" dir="ltr" style="font-size: 12pt; color: rgb(0, 0, 0); font-family: Calibri, Helvetica, sans-serif, EmojiFont, "Apple Color Emoji", "Segoe UI Emoji", NotoColorEmoji, "Segoe UI Symbol", "Android Emoji", EmojiSymbols;">
<p>Hi all,</p>
<p><br>
</p>
<p>please take a short look at this behavior:</p>
<p><br>
</p>
<blockquote style="margin:0px 0px 0px 40px; border:none; padding:0px">
<p><span>TestRunner openForSuite: MorphicUIManagerTest suite. "Run Selected"</span></p>
</blockquote>
<div id="gmail-m_5874301768949943328gmail-m_-7324575958580540449gmail-m_2757329192839109014gmail-m_-3634851521700033Signature">
<div id="gmail-m_5874301768949943328gmail-m_-7324575958580540449gmail-m_2757329192839109014gmail-m_-3634851521700033divtagdefaultwrapper" dir="ltr" style="color:rgb(0,0,0); font-family:Calibri,Helvetica,sans-serif,EmojiFont,"Apple Color Emoji","Segoe UI Emoji",NotoColorEmoji,"Segoe UI Symbol","Android Emoji",EmojiSymbols">
<div name="divtagdefaultwrapper" style="font-family:Calibri,Arial,Helvetica,sans-serif; margin:0px">
<div>
<div id="gmail-m_5874301768949943328gmail-m_-7324575958580540449gmail-m_2757329192839109014gmail-m_-3634851521700033Item.MessagePartBody" style="font-size:12pt">
<div id="gmail-m_5874301768949943328gmail-m_-7324575958580540449gmail-m_2757329192839109014gmail-m_-3634851521700033Item.MessageUniqueBody" style="font-family:wf_segoe-ui_normal,"Segoe UI","Segoe WP",Tahoma,Arial,sans-serif,serif,EmojiFont">
<div dir="ltr">
<div id="gmail-m_5874301768949943328gmail-m_-7324575958580540449gmail-m_2757329192839109014gmail-m_-3634851521700033divtagdefaultwrapper">
<font face="Calibri,Helvetica,sans-serif,EmojiFont,Apple Color Emoji,Segoe UI Emoji,NotoColorEmoji,Segoe UI Symbol,Android Emoji,EmojiSymbols">
<div id="gmail-m_5874301768949943328gmail-m_-7324575958580540449gmail-m_2757329192839109014gmail-m_-3634851521700033Signature">
<div style="margin:0px"><font style="font-family:Calibri,Arial,Helvetica,sans-serif,serif,EmojiFont">
<div><font size="3" color="black"><span style="font-size:12pt"><a href="http://www.hpi.de/" rel="noopener noreferrer" id="gmail-m_5874301768949943328gmail-m_-7324575958580540449gmail-m_2757329192839109014gmail-m_-3634851521700033LPNoLP" target="_blank"><font size="2"><span id="gmail-m_5874301768949943328gmail-m_-7324575958580540449gmail-m_2757329192839109014gmail-m_-3634851521700033LPlnk909538"><font color="#757B80"></font></span></font></a></span></font></div>
</font></div>
</div>
</font></div>
</div>
</div>
</div>
<div id="gmail-m_5874301768949943328gmail-m_-7324575958580540449gmail-m_2757329192839109014gmail-m_-3634851521700033Item.MessagePartBody" style="font-size:12pt">
<br>
</div>
<div id="gmail-m_5874301768949943328gmail-m_-7324575958580540449gmail-m_2757329192839109014gmail-m_-3634851521700033Item.MessagePartBody" style="font-size:12pt">
At the moment (#<span>19541), a bug in FileList2 class >> #<span>endingSpecs (which I'm going to fix ASAP) breaks the test #<span>testShowAllBinParts. But because ModificationForbidden is not an Error, it is not caught by the TestRunner so the whole suite run
 blows up, too.</span></span></span></div>
<div id="gmail-m_5874301768949943328gmail-m_-7324575958580540449gmail-m_2757329192839109014gmail-m_-3634851521700033Item.MessagePartBody">
<span style="font-size:12pt">I could make another example by triggering a ModificationForbidden in a #drawOn: method to destroy the whole image</span><span style="font-size:12pt">, too.</span><br>
<span style="font-size:8pt">(Morph newSubclass </span><span style="font-size:8pt">compile: 'drawOn: x #(1) at: 1 put: 2'; </span><span style="font-size:8pt">new) openInHand)</span></div>
<div id="gmail-m_5874301768949943328gmail-m_-7324575958580540449gmail-m_2757329192839109014gmail-m_-3634851521700033Item.MessagePartBody" style="font-size:12pt">
<span><span><span><br>
</span></span></span></div>
<div id="gmail-m_5874301768949943328gmail-m_-7324575958580540449gmail-m_2757329192839109014gmail-m_-3634851521700033Item.MessagePartBody" style="font-size:12pt">
<span><span><span>So my question is:</span></span></span><span style="font-size:12pt"> Why
</span><span style="font-size:12pt">doesn't </span><span style="font-size:12pt">ModificationForbidden derive from Error? Isn't it actually an error? Similar illegal operations such as "#() at: 0" or "{} at: 1 put: #foo" raise some kind of Error, too. Everything
 I learned so far about Squeak's exception framework tells me that you should have a very good reason if you design an exception neither to derive from Error, nor from Notification. At the moment, we only do have 9 exceptions (bad pun ...) to this rule (and
 I'm not even sure whether <span>MCNoChangesException couldn't be a notification, and Abort does not even have senders in the Trunk)</span>.</span></div>
<div id="gmail-m_5874301768949943328gmail-m_-7324575958580540449gmail-m_2757329192839109014gmail-m_-3634851521700033Item.MessagePartBody" style="font-size:12pt">
<span style="font-size:12pt"><span style="font-family:Calibri,Arial,Helvetica,sans-serif; font-size:16px">I'd be happy if you could give me some </span><span style="font-family:Calibri,Arial,Helvetica,sans-serif; font-size:16px">pointers on why <span style="font-family:Calibri,Arial,Helvetica,sans-serif; font-size:16px">ModificationForbidden
 does not follow this rule. How can we deal with this in order to fix the bugs/unexpected behaviors mentioned above?</span></span><br>
</span></div>
</div>
</div>
</div>
</div>
</div>
</div>
</blockquote>
<div><br>
</div>
I think this is an oversight in my part.  I agree that <span style="font-size:12pt; font-family:Calibri,Arial,Helvetica,sans-serif">ModificationForbidden is an error.  I took the code from Pharo and didn’t notice </span><span style="font-size:12pt; font-family:Calibri,Arial,Helvetica,sans-serif">ModificationForbidden
 was a Notification.</span>
<div><font face="Calibri, Arial, Helvetica, sans-serif" size="3"><br>
</font></div>
<div><font face="Calibri, Arial, Helvetica, sans-serif" size="3">Please feel free to make it an Error.<br>
</font>
<div><font face="Calibri, Arial, Helvetica, sans-serif" size="3"><br>
</font>
<blockquote type="cite">
<div dir="ltr">
<div id="gmail-m_5874301768949943328gmail-m_-7324575958580540449gmail-m_2757329192839109014gmail-m_-3634851521700033divtagdefaultwrapper" dir="ltr" style="font-size: 12pt; color: rgb(0, 0, 0); font-family: Calibri, Helvetica, sans-serif, EmojiFont, "Apple Color Emoji", "Segoe UI Emoji", NotoColorEmoji, "Segoe UI Symbol", "Android Emoji", EmojiSymbols;">
<div id="gmail-m_5874301768949943328gmail-m_-7324575958580540449gmail-m_2757329192839109014gmail-m_-3634851521700033Signature">
<div id="gmail-m_5874301768949943328gmail-m_-7324575958580540449gmail-m_2757329192839109014gmail-m_-3634851521700033divtagdefaultwrapper" dir="ltr" style="color:rgb(0,0,0); font-family:Calibri,Helvetica,sans-serif,EmojiFont,"Apple Color Emoji","Segoe UI Emoji",NotoColorEmoji,"Segoe UI Symbol","Android Emoji",EmojiSymbols">
<div name="divtagdefaultwrapper" style="font-family:Calibri,Arial,Helvetica,sans-serif; margin:0px">
<div>
<div id="gmail-m_5874301768949943328gmail-m_-7324575958580540449gmail-m_2757329192839109014gmail-m_-3634851521700033Item.MessagePartBody" style="font-size:12pt">
<span style="font-size:12pt"></span></div>
<div id="gmail-m_5874301768949943328gmail-m_-7324575958580540449gmail-m_2757329192839109014gmail-m_-3634851521700033Item.MessagePartBody" style="font-size:12pt">
<span><span><span><br>
</span></span></span></div>
<div id="gmail-m_5874301768949943328gmail-m_-7324575958580540449gmail-m_2757329192839109014gmail-m_-3634851521700033Item.MessagePartBody" style="font-size:12pt">
<span><span><span>Possibly related stuff:</span></span></span></div>
<div id="gmail-m_5874301768949943328gmail-m_-7324575958580540449gmail-m_2757329192839109014gmail-m_-3634851521700033Item.MessagePartBody" style="font-size:12pt">
<ul style="margin-bottom:0px; margin-top:0px">
<li><span><span><span><span><a href="http://forum.world.st/Squeak-s-AssertionFailure-vs-SUnit-s-TestFailure-td5106818.html" id="gmail-m_5874301768949943328gmail-m_-7324575958580540449gmail-m_2757329192839109014gmail-m_-3634851521700033LPlnk263411" target="_blank">http://forum.world.st/Squeak-s-AssertionFailure-vs-SUnit-s-TestFailure-td5106818.html</a></span></span></span></span></li><li><span><span><span><a href="http://forum.world.st/The-Trunk-Kernel-eem-1294-mcz-td5112196.html" id="gmail-m_5874301768949943328gmail-m_-7324575958580540449gmail-m_2757329192839109014gmail-m_-3634851521700033LPlnk925125" target="_blank">http://forum.world.st/The-Trunk-Kernel-eem-1294-mcz-td5112196.html</a></span></span></span></li><li><span><span><span><a href="http://forum.world.st/The-Trunk-Kernel-eem-1317-mcz-tp5113273p5113433.html" id="gmail-m_5874301768949943328gmail-m_-7324575958580540449gmail-m_2757329192839109014gmail-m_-3634851521700033LPlnk941283" target="_blank">http://forum.world.st/The-Trunk-Kernel-eem-1317-mcz-tp5113273p5113433.html</a><br>
</span></span></span></li></ul>
<div><br>
</div>
<div>Best,</div>
<div>Christoph</div>
</div>
</div>
<div style="font-size:12pt"><font size="2" color="#808080"></font></div>
</div>
</div>
</div>
</div>
<span></span><br>
</div>
</blockquote>
</div>
</div>
</div>
</div>
<br>
</blockquote>
</div>
</div>
</div>
</div>
</div>
</body>
</html>