<div dir="ltr"><div class="gmail_extra"><br><div class="gmail_quote">On Sat, Jun 21, 2014 at 4:07 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="">On 21/06/14 06:54 PM, Jerry Morrison wrote:<br>

> I agree with Vadim that the world will inevitably become<br>
> security-conscious -- also safety-conscious. We will live to see it<br>
> unless such a bug causes nuclear war or power grid meltdown.<br>
><br>
</div>> When the sea change happens, Rust will either be (A)/ the attractive<br>
> choice for systems programming/ or (B) /obsolete/. Rust already has the<br>
<div class="">> leading position in memory safety for systems programming, so it's lined<br>
> up to go.<br>
<br>
</div>No one will use Rust if it's slow. If it uses checked arithmetic, it<br>
will be slow. There's nothing subjective about that.<br></blockquote><div><br></div><div>Surely there's a way to make the language and libraries ready for overflow safety while able to perform without it in the short term.</div>
<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 class=""><br>
> The world desperately needs a C++ replacement for real-time,<br>
> safety-critical software before that ever-more-complicated language<br>
> causes big disasters. Rust is the only candidate around for that. (Or<br>
> maybe D, if its real-time threads can avoid GC pauses.) CACM's recent<br>
</div>> /Mars Code/ article<br>
> <<a href="http://cacm.acm.org/magazines/2014/2/171689-mars-code/fulltext" target="_blank">http://cacm.acm.org/magazines/2014/2/171689-mars-code/fulltext</a>> shows<br>
<div class="">> the extremes that JPL has to do to program reliable space probes.<br>
> Smaller companies writing automobile engine control systems<br>
</div>> <<a href="http://www.edn.com/design/automotive/4423428/Toyota-s-killer-firmware--Bad-design-and-its-consequences" target="_blank">http://www.edn.com/design/automotive/4423428/Toyota-s-killer-firmware--Bad-design-and-its-consequences</a>><br>

<div class="">> and such will soon be looking for a more cost effective approach.<br>
<br>
</div>Trapping on overflow doesn't turn the overflow into a non-bug. It<br>
prevents it from being exploited as a security vulnerability, but it<br>
would bring down a safety critical system.<br></blockquote><div><br></div><div>A safety critical system needs to catch and recover from thread failures, e.g. by restarting it, or failing over, or gracefully shutting down. The first requirement is to keep the problem from causing collateral damage and opening exploitable holes. Systems like phone switches written in Erlang are good at the recovery part.</div>
<div><br></div><div>(And by "smaller companies" I meant "smaller, less funded teams.")</div><div><br></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 class="">> Companies like Intel see so much existing C/C++ software getting by<br>
> without overflow safety and conclude it doesn't matter. Let's not let<br>
> their rear-view mirror thinking keep us stuck. Eventually customers will<br>
> demand better security whether there's a speed penalty or not.<br>
><br>
> CPU designers could say they've given us so much instruction speed that<br>
> we can afford to spend some of it on overflow checking. Fair point. When<br>
> the software folks have demonstrated the broad need, Intel can speed it<br>
> up, whether by optimizing certain instruction sequences or adding new<br>
> instructions.<br>
<br>
</div>Overflow checking means a branch on every integer arithmetic operation.<br>
<br>
It means every arithmetic operation is impure (unwinding) so LLVM won't<br>
be able to hoist stuff out of loops unless it proves that there's no<br>
overflow, which is rare. For example, this prevents it from hoisting a<br>
bounds check out of a loop by introducing a second kind of impure<br>
failure condition.<br>
<br>
It also prevents auto-vectorization, which is increasingly important. A<br>
language without good auto-vectorization is not going to be an<br>
interesting systems language down the road.<br></blockquote><div><br></div><div>How about propagating the overflow info downstream like a NaN by a limited distance, rather than throwing an immediate exception?</div><div>
<br></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 class="">> The Mill CPU architecture handles overflow nicely and promises much<br>
> higher performance, like extending DSP abilities into ordinary software<br>
> loops like strncpy(). Whether this one takes off or not is hard to say.<br>
> That little company could use a big partner.<br>
<br>
</div>It has to exist before it can succeed or fail.<br>
<br>
</blockquote></div><br>Yea.<br clear="all"><div><br></div>-- <br>   Jerry
</div></div>