<div dir="ltr">For the consideration of Robby et al:<div><div><br></div><div>The clearest run-time errors I ever received were dumped out of SmallEiffel / SmartEiffel in response to contract violations.</div><div><br></div>

<div>These were stack-traces that -- critically -- included parameter values and local state information for each stack frame.  Blame for pre- and post-condition violations were easy to read off, down to the line / column.</div>

<div><br></div><div>Example from <a href="http://www.minimalprogramming.org/proglang.pdf">http://www.minimalprogramming.org/proglang.pdf</a> pp177-:</div><div><br></div><blockquote style="margin:0px 0px 0px 40px;border:none;padding:0px">

<div><div>*** Error at Run Time ***: Require Assertion Violated.</div></div><div><div>*** Error at Run Time ***: consistent_balance</div></div><div><div>3 frames in current stack.</div></div><div><div>===== Bottom of run-time stack =====</div>

</div><div><div>System root.</div></div><div><div>Current = TEST#0x8061a60</div></div><div><div>line 4 column 2 file ./test.e</div></div><div><div>======================================</div></div><div><div>make TEST</div>

</div><div><div>Current = TEST#0x8061a60</div></div><div><div>account = Void</div></div><div><div>line 8 column 4 file ./test.e</div></div><div><div>======================================</div></div><div><div>make ACCOUNT</div>

</div><div><div>Current = ACCOUNT#0x8061a88</div></div></blockquote><blockquote style="margin:0px 0px 0px 40px;border:none;padding:0px"><blockquote style="margin:0px 0px 0px 40px;border:none;padding:0px"><div><div>  [ minimal_balance = 0.000000</div>

</div></blockquote><blockquote style="margin:0px 0px 0px 40px;border:none;padding:0px"><div><div>    balance = 0.000000</div></div></blockquote><blockquote style="margin:0px 0px 0px 40px;border:none;padding:0px"><div><div>

  ]</div></div></blockquote></blockquote><blockquote style="margin:0px 0px 0px 40px;border:none;padding:0px"><div><div>a_minimal_balance = 100.000000</div></div><div><div>initial_balance = 10.000000</div></div><div><div>
line 7 column 42 file ./account.e</div>
</div><div><div>===== Top of run-time stack =====</div></div><div><div>*** Error at Run Time ***: Require Assertion Violated.</div></div><div><div>*** Error at Run Time ***: consistent_balance</div></div></blockquote><div>

<br></div><div>The author remarks, &quot;That’s what I call a comprehensive error description. Not only do we get the name of the violated condition and the values of the parameters passed to the constructor method, but also the state of the account object in question.&quot;</div>

<div><br></div><div>This could be improved further.  When I rolled my own contracts for C# (pre-MS code contracts) I captured and reprocessed the stack trace to included a &quot;-----&gt;&quot; to point at the line/column reference to the calling code (for a pre-condition violation) or the supplying code (for a post-condition violation).  I also reversed the direction of the trace so that errors would appear at the top, thereby avoiding having to read down a long trace when the error was usually apparent from the the top.  </div>

<div><br></div><div>But those aspects are sugar, although pedagogically usefully and practically very convenient.  Frustratingly, what I couldn&#39;t do, was dump out parameters (and state) automatically, necessitating manual annotation in the contract violation messages (which then became a risk/reward trade-off).<br>

</div><div><br></div><div>Cheers</div><div><br></div><div>Dan</div><div><br></div></div><div class="gmail_extra"><br><div class="gmail_quote">On Sun, Sep 8, 2013 at 11:40 PM, Robby Findler <span dir="ltr">&lt;<a href="mailto:robby@eecs.northwestern.edu" target="_blank">robby@eecs.northwestern.edu</a>&gt;</span> wrote:<br>

<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr">You are not the only one to complain :). We&#39;ve been having an internal discussion about this, actually.<div>

<br></div><div>In this particular, case, I think that you are using provide/contract, right? If so, the blame really lies with the entire file edf.rkt. So there really isn&#39;t anything more specific to say.</div><span class="HOEnZb"><font color="#888888">
<div><br></div><div>Robby</div><div><br></div></font></span></div><div class="HOEnZb"><div class="h5"><div class="gmail_extra"><br><br><div class="gmail_quote">On Sun, Sep 8, 2013 at 4:20 AM, antoine <span dir="ltr">&lt;<a href="mailto:antoine597@gmail.com" target="_blank">antoine597@gmail.com</a>&gt;</span> wrote:<br>


<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Hello,<br>
<br>
I have just start using contracts in racket, but i am a bit disapointed by the<br>
error message they give to me.<br>
<br>
example contract error:<br>
<br>
 add-number: contract violation<br>
 expected: number?<br>
 given: &quot;1&quot;<br>
 in: the 2nd argument of<br>
      (-&gt; number? number? number?)<br>
 contract from: abc.rkt<br>
 blaming: edf.rkt<br>
 at: abc.rkt:5.3<br>
<br>
I would have expected to have the line and column number in the blaming line<br>
like what you could get from a stacktrace.<br>
<br>
Is it possible in contracts?<br>
Am i the only one to complain? :)<br>
<br>
Thanks you in advance.<br>
____________________<br>
 Racket Users list:<br>
 <a href="http://lists.racket-lang.org/users" target="_blank">http://lists.racket-lang.org/<u></u>users</a><br>
</blockquote></div><br></div>
</div></div><br>____________________<br>
  Racket Users list:<br>
  <a href="http://lists.racket-lang.org/users" target="_blank">http://lists.racket-lang.org/users</a><br>
<br></blockquote></div><br><br clear="all"><div><br></div>-- <br><div dir="ltr"><div style="font-family:arial;font-size:small"><b>Daniel Prager</b></div><div style="font-family:arial;font-size:small">Agile/Lean Coaching, Software Development and Leadership</div>

<div style="font-family:arial;font-size:small"><font color="#999999">Twitter:</font> <a href="https://twitter.com/agilejitsu" style="color:rgb(17,85,204)" target="_blank">@agilejitsu</a> </div><div style="font-family:arial;font-size:small">

<font color="#999999">Blog:</font> <a href="http://agile-jitsu.blogspot.com/" style="color:rgb(17,85,204)" target="_blank">agile-jitsu.blogspot.com</a></div></div>
</div></div>