<div dir="ltr">Apologies for adding heat to the discussion. The industry needs to make progress on security/safety-critical systems, and Rust does a great deal for that by bringing memory safety to a C/C++ alternative.<div>
<br></div><div>This post about <a href="http://blog.regehr.org/archives/1154">hardware traps for integer overflow</a> is useful, even besides the issue of the full cost of traps. The post and its discussion explore alternatives. It links to this conference article about <a href="http://www.cs.utah.edu/~regehr/papers/overflow12.pdf">Understanding Integer Overflow in C/C++</a>, which studied overflow bugs, vulnerabilities, and some overflow-checking techniques. One technique averaged 44% cost, ranging 0 to 191%. Another averaged 30%, ranging 0 - 95%. They discovered that "intentional uses of wraparound behaviors are more common than expected" but hard to find.</div>
<div><br></div><div>The post also links to Wikipedia on <a href="http://en.wikipedia.org/wiki/Intel_MPX">Intel MPX</a>: Intel is adding x86 extensions to aid memory safety! I think it's for array bounds checking, but the article is unclear.</div>
<div><br></div><div>If the choice is a Rust with inconvenient and often unused overflow safety that kills off C/C++ vs. a Rust with overflow safety that doesn't, I vote for the former.</div><div><div><br></div><div>The open design questions are ergonomics of checked and wraparound arithmetic. It'd be great if uses of wraparound arithmetic were explicit.</div>
<div><br></div><div><br></div><div><br></div><div>On Sun, Jun 22, 2014 at 2:05 PM, Daniel Micay <span dir="ltr"><<a href="mailto:danielmicay@gmail.com" target="_blank">danielmicay@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex">
<div class="">A `Vec<u32>` and `Vec<uw32>` would be entirely distinct types. ...</div></blockquote><div><br></div><div>THAT is a knockout blow for the distinct-types design for wrapping integers.</div></div><div>
<br></div><div>(BTW is there a use for <i>signed</i> wraparound?)<br></div><div><br></div><div><br></div><div>On Sun, Jun 22, 2014 at 2:09 PM, Rick Richardson <span dir="ltr"><<a href="mailto:rick.richardson@gmail.com" target="_blank">rick.richardson@gmail.com</a>></span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex"><div dir="ltr">... I would assume that one would really only care about checked math during testing and dev. </div>
</blockquote></div><div><br></div><div>Alas, that doesn't block security exploits.</div><div><br></div><div><br></div><div>On Sun, Jun 22, 2014 at 2:26 PM, Daniel Micay <span dir="ltr"><<a href="mailto:danielmicay@gmail.com" target="_blank">danielmicay@gmail.com</a>></span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex"><div class="">Rust's design is based on the assumption that performance cannot be<br>
</div>achieved simply by having highly optimized inner loops. It takes a whole<br>program approach to performance by exposing references as first-class<br>values and enforcing safety via type-checked lifetimes.<br><br>You can write an efficient low-level loop in Haskell or Swift, but you<br>
can't build high level safe abstractions without paying a runtime cost.<br><br>If someone isn't interested in this approach, then I have a hard time<br>understanding why they would be using Rust.<br></blockquote></div>
<div><div class="gmail_extra"><br></div><div class="gmail_extra">To move a lot of code from C/C++ to a place that has memory safety and less error-prone 1970's technology with 1960's macro processing and linking.</div>
<div class="gmail_extra"><br></div><div class="gmail_extra">For real-time programs, which need predictable response times whether or not they need high performance (often fixable with faster hardware). Many of these are embedded devices with small memory.</div>
<div class="gmail_extra"><br></div><div class="gmail_extra">Maybe Swift will work there but (1) it'll have to go beyond Apple hardware and OSs, and (2) reference counting has unpredictable delays when freeing a large network of objects.</div>
<div class="gmail_extra"><br></div><div class="gmail_extra"><br><br><div class="gmail_quote">On Sun, Jun 22, 2014 at 2:23 PM, Daniel Micay <span dir="ltr"><<a href="mailto:danielmicay@gmail.com" target="_blank">danielmicay@gmail.com</a>></span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex"><div class="">The set of design compromises made by the language is ill-suited to a<br>
</div>use case where performance isn't critical.</blockquote><div><br></div><div>Is there a web page that lays out Rust's goals, design trade-offs, and intended uses?</div></div></div><div class="gmail_extra"><br>
</div><div class="gmail_extra"><br>On Sun, Jun 22, 2014 at 2:12 PM, Cameron Zwarich <span dir="ltr"><<a href="mailto:zwarich@mozilla.com" target="_blank">zwarich@mozilla.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex">
<div style="word-wrap:break-word"><div>Languages like Ada (and Swift, to a lesser extent), allow for slightly imprecise exceptions in the case of integer overflow. ... the “As Infinitely Ranged” model ...</div></div></blockquote>
<div> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex"><div style="word-wrap:break-word"><div><span style="font-family:arial,sans-serif;font-size:13px">I know that some people don’t want to require new compiler techniques (or are afraid of relying on something outside of the scope of what LLVM can handle today)</span></div>
</div></blockquote><div><br></div><div>From TFA:</div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex"><span style="color:rgb(66,61,62);font-family:HelveticaNeue-Light,'Helvetica Neue Light','Helvetica Neue',Helvetica,Arial,'Lucida Grande',sans-serif;font-size:13px;line-height:18px">AIR integers do not require precise traps and consequently do not break or inhibit most existing optimizations.</span></blockquote>
<div><br></div><div>Hopefully Apple will contribute its Swift compiler to the LLVM source tree. That includes overflow detection. Also if needed, they have the ability to customize their ARM chips and some sway with Intel.</div>
<div><br></div><div><br><div class="gmail_quote">On Sun, Jun 22, 2014 at 2:31 PM, Daniel Micay <span dir="ltr"><<a href="mailto:danielmicay@gmail.com" target="_blank">danielmicay@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex">
<div class="">If we had compiler switches for ... I think even 2 dialects is too much...</div></blockquote><div><br></div><div>Yes. When one C dialect calls another via dynamic loading, bad things happen, and there's no debugger on the robot. (Speaking from experience.)</div>
<div><br></div></div></div><div><br></div>-- <br>   Jerry
</div></div></div></div>