5,692 karma · joined October 28, 2014
Note that these safety bugs are really different from most other kinds of bugs in that their potential impact is unbounded: they can cause the program to behave in arbitrary ways. Logic errors, even stuff like non-UB integer overflow, have impact that is still constrained by the expected semantics of the programming language.
Given that uncertainty, it makes sense to take precautions. If you have cheap tools to eliminate those bugs, do it just in case. That might even be cheaper than trying to figure out ahead of time how important those bugs are going to be over the lifetime of the software (which is often an impossible task anyway).
It doesn't need to be completely free to have a positive net benefit.
What I'm looking forward to is formalisms and tools to pick the "low hanging fruit" --- as I said, verifying the correctness of small libraries that use 'unsafe'. In small libraries, in general, and invariants and proofs are smaller and proof automation is correspondingly more effective.
On the cost side: we don't know yet how hard it will be to formally verify small Rust libraries that wrap unsafe code in safe abstractions. That's partly because we don't even know exactly what the specification is that unsafe Rust code has to satisfy. But once we've settled on that and built good proof assistant tools, I think the work will usually be pretty easy, because most of these libraries are fundamentally quite simple and small, even including all their dependencies.
You correctly identified compositionality as a key issue. Fortunately, verifying correct use of 'unsafe' is inherently compositional: knowing nothing but the code of the library and its dependencies, we must prove that the necessary safety properties hold in all possible contexts.
On the benefit side: proving that libraries do not undermine Rust's safety guarantees is important, and the importance grows with the popularity of the library. And of course those guarantees aren't just "memory safety" but data-race-freedom and the general "mutable-xor-shared" property --- the importance of which is the subject of the OP here!
Of course, one's mileage can vary. Most of our system is designed to be stateless at the top level, which helps.
A person could have a well-founded belief in God without seeing him as Abraham did. What if someone in the early church had seen apostolic miracles and talked to an eyewitness of the resurrected Jesus? Would it still be a "leap of faith" for them to believe in God and his promises? I would say not. So I don't think verse 6 "requires some kind of leap of faith" in the sense you're using it.
I think such a person would still need faith, per verse 6, to put their justified belief into action in critical moments, e.g. at a moment when they're facing persecution for following Jesus.
Now, how much of a "leap of faith" is required given the evidence really available to believers then and now... that's the big question about which we presumably disagree.
Abraham is in that list, and is elsewhere described as the paragon of faith. Yet in Genesis 18/19 Abraham is said to have met and talked with God, and discussed the destruction of Sodom, which Abraham then witnessed immediately. Abraham's faith was not a belief in a God he had never seen.
Likewise Cain, Abel and Noah are in the Hebrews 11 list but Genesis says they spoke with God before they exercised their faith.
In Hebrews 11 the "things unseen" are elaborated as the creation of the universe and the future fulfillment of God's promises (almost entirely the latter). They're unseen not because there is no evidence for them, but simply because the faithful people did not live to see them fulfilled.
"Faith is belief without evidence" is a trope widely believed by Christians and atheists, but that's not the faith being promoted in Hebrews.
I'd like to know more about what the embedded tools do. I see SourcePoint supports multicore x86, but the data volume looks high so I suspect they can't handle workloads that run for minutes or hours. Also it's not clear to me which of these tools can reproduce the state of memory at every point in the past.
Basically I don't think you can do low-overhead record and replay without hardware support like Intel's QuickRec project. "Capture all memory traffic" is not going to scale.
It all depends on what exactly you mean by those other threats, of course. I'm a natural pessimist and I see threats everywhere, but I've also learned I can overestimate them. I've been worried about nuclear proliferation for the last 40 years, and I'm more worried about it than ever, but we haven't had another nuclear war yet.
This is not the time to risk it all.
So you believe that most Ukrainians actually want to surrender to Russia?
To be clear: I've never heard of any such thing. I happen to work for Google, but I'm open the possibility that this happened and I didn't hear about it.
Another example: Linux developers thinking that managing patches by email is the best approach ever, because Linux is dominant.
[Disclaimer: I work at Google.]