3 ms·
Do you not make such a tacit assumption every time you index into an array (which in almost all languages throws an exception on bounds failure)? You always hav
by LegionMammal978 10mo ago
Do you not make such a tacit assumption every time you index into an array (which in almost all languages throws an exception on bounds failure)? You always have to make assumptions that things stay consistent from one statement to the next, at least locally. Unless you use formal verification, but hardly anyone has the time and resources for that.
- skydhash 10mo agoIf such an error happens, that would be a compiler bug. Why? Because I usually do checks against the length of the array or have it done as part of the standard functions like `map`. I don't write such assumptions unless I'm really sure about the statements, and even then I don't.
- tosapple 10mo agoHow does one defend against cosmic rays? Keep two copies or three like RAID? Edit: ECC ram helps for sure, but what else?
- well_ackshually 10mo ago>How does one defend against cosmic rays? Unless you are in the extremely small minority of people who would actually be affected by it (in which case your company would already have bought ECC ram and made you work with three isolated processes that need to agree to proceed): you don't. You eat shit, crash and restart.
- tosapple 10mo agoWell, bitflip errors are more of a vulnerability for longer lived values. This could effect fukushima style robots or even medical equipment. ECC implemented outside of ram would save vs triplicate but it was just a question related to the-above idea of an array access being assumed as in+bounds. Thank you.
- JonChesterfield 10mo agoYou run equivalent or equal calculations simultaneously on N computers and take majority wins, aircraft control or distributed filesystem style.
- LegionMammal978 10mo ago> or have it done as part of the standard functions like `map`. Which are all well and good when they are applicable, which is not always 100% of the time. > Because I usually do checks against the length of the array And what do you have your code do if such "checks" fail? Throw an assertion error? Which is my whole point, I'm advocating in favor of sanity-check exceptions. Or does calling them "checks" instead of "assumptions" magically make them less brittle from surrounding code changes?
- skydhash 10mo agoA comment have no semantic value to the code. Having code that check for stuff is different from writing comments as they are executed by the machine. Not read by other humans.
- LegionMammal978 10mo agoOf course you should put down a real assertion when you have a condition that can be cheaply checked (or even an assert(false) when the language syntax dictates an unreachable path). I'm not trying to argue against that, and I don't think anyone else here is either. I was mainly responding to TFA, which states "How many times did you leave a comment on some branch of code stating 'this CANNOT happen' and thrown an exception" (emphasis mine), i.e., an assertion error alongside the comment. The author argues that you should use error values rather than exceptions. But for such sanity checks, there's typically no useful way to handle such an error value.
- awesome_dude 10mo agoDo you really have code that's if array.Len > 2 { X = Y[1] } For every CRUD to that array? That seems... not ideal
- skydhash 10mo agoYes. Unless there’s some statement earlier that verify that the array has 2 items. It’s quick to do, so why not do it?
- lmm 10mo ago> Do you not make such a tacit assumption every time you index into an array (which in almost all languages throws an exception on bounds failure)? Yes, which is one reason why decent code generally avoids doing that.
- MobiusHorizons 10mo agoAre you saying decent code avoids indexing into arrays? Or are you saying it avoids doing so without certainty the bounds checks will succeed?
- lmm 10mo agoDecent code generally avoids indexing into arrays at all; if it does so then it does so in ways where the bound checks are so certain to succeed that you can usually explain it to the compiler (e.g. split an array into slices and access those slices).
- MobiusHorizons 10mo agothat is what I thought you were saying, and it doesn't make much sense to me. AFAICT the point of arrays as a data structure is to allow relatively cheap indexing at the cost of more expensive resizing operations. What else would you do with an array other than index into it? > e.g. split an array into slices and access those slices How is this not indexing with a little abstraction? Aren't slices just a way of packaging an array with a length field it a standard way? I'm not aware of many array implementations without a length (and usually also capacity) field somewhere , so this seems like a mostly meaningless distinction (ie all sclices are arrays, right).
- lmm 10mo ago> AFAICT the point of arrays as a data structure is to allow relatively cheap indexing at the cost of more expensive resizing operations. What else would you do with an array other than index into it? The main thing you do with arrays is bulk operations (e.g. multiply it by something), which doesn't require indexing into it. But yeah I think they're a fairly niche datastructure that shouldn't be privileged the way certain languages do. > How is this not indexing with a little abstraction? Aren't slices just a way of packaging an array with a length field it a standard way? Sure (well, offset and length rather than just a length) but the abstraction is safe whereas directly indexing into the array isn't.