> The Extreme Fit has been formally announced, and this dongle-like USB Type-C flash drive is available with up to 1 TB capacity. Sandisk also notes that it delivers USB 3.2 Gen 1 performance, and the starting launch price is $15.99.
What a weasel worded sentence. "1 TB … $16". Of course, it's $110, and yes, I see the qualifiers here. Allegedly journalistic sites should cut out the marketing sleeze before publishing. "Starting at 64 GB for $15 and ranging up to 1 TB for $110" it's not hard to write.
> Naively composing errors out of ADTs does pessimize the happy path. Error objects recursively composed out of enums tend to be big, which inflates size_of<Result<T, E>>, which pushes functions throughout the call stack to “return large structs through memory” ABI. Error virality is key here — just a single large error on however rare code path leads to worse code everywhere.
This isn't true; proof by counter-example: anyhow::Error.
For example, a lot of Rust code uses "anyhow", a crate which provides sort of a catch-all "anyhow::Error" type. Any other error can be put into an anyhow::Error, and an anyhow::Error is not good for much except displaying, and adding additional context to it. (For that reason, anyhow::Error is usually used at a high-level, where you don't care what specifically went wrong, b/c the only thing you'll use it for is propagation & display.)
No matter what error we put into an anyhow::Error, the stack size is 8 B. (Because it's a pointer to the error E, effectively, though in practice "it's a bit more complicated", but not in any way that harms the argument here.) So clearly, here, we can stuff as much context/data/etc. into the error type E without virally infecting the whole stack with a larger Result<T, E>.
(Rust does allow you to make E larger, and that can mean a Result<T, E> gets larger, yes. But you're one pointer away from moving that to the heap & fixing that. Rust, being a low level language, … permits you that / leaves that up to you. The stack space isn't free — as TFA points out, spilling registers has a cost — but nor are heap allocations free. Rust leaves it up to you, effectively.)
My understanding of Zig the other day is that it doesn't permit associated data at all, and errors are just integer error code, effectively, under the hood. This is a pretty sad state of affairs — I hate the classic unix problem where you get something like,
$ mkdir $P
mkdir: no such file or directory
Which I now special path in the neurons in my head so-as to short circuit wandering the desert of "yeah, no such directory … that's why I'm asking you to create it". (And all other variations of this pattern.)
All of that could have been avoided if Unix had the ability to tell us what didn't exist. (And there are so many variants: what exists unexpectedly? what perm did we lack? what device failed I/O?)
(And I suppose you could make Result<T, E> special / known to the compiler, and it could implement stack unwinding specifically. I don't think that leave me with good vibes in the language design dept., and there are other types that have similar stack-propagating behavior to Result (Option, Poll, maybe someday a generator type). What about them?)
> That is the reason why mature error handling libraries hide the error behind a thin pointer, approached pioneered in Rust by failure and deployed across the ecosystem in anyhow. But this requires global allocator, which is also not entirely zero cost.
Oh oops … IDK how I missed that … but also that seems to really undercut the article's own thesis then if they're aware of it.
> But this requires global allocator, which is also not entirely zero cost.
Heap allocs are not free. But then, IDK that the approach of using the unwinding infra is any better. You still have to store the associated data somewhere, & then unwind the stack. That "somewhere" might require a global allocator¹.
(¹Say you put the associated data on the stack, and unwind, and your "recovery point"/catch/etc. site might get a pointer to it. Put what if that recovery point then calls a function, and that function requires more stack depth that exists prior to the object?
I supposed you could put it somewhere, and then move it up the stack into the stack frame of the recovery function, but that's more expensive. That might work, though.
But since C++ impls put it on the heap, that leads me to assume there's a gotcha somewhere here.)
There is a middle ground that I think the post glosses over, which would be to split apart the Result<T,E> value whenever its two cases differ significantly in size. You'd also have to track the discriminant of course.
Basically, supposing T alone fits in a register or two, but E is so big that the union of T and E would spill onto the stack, treat them as two different values instead of one.
Well, give us the argument, then, instead of the mere allegation that history is frowning at us. Why is it not possible to change the law to permit platforms to not be liable for speech of their users, particularly when users are engaging in a platform in the capacity of communicating and exchanging information, (i.e., 230 as it is today) but not permit advertisers from displaying ads which contain blatant fraud, for which the advertising platform is profiting off that fraud?
1. the NATO alphabet. (Alfa, bravo, charlie, delta…) It's surprisingly easy to memorize: it will only take you a few sittings of practice. And it's useful, for when you need to turn letters into words. And then people cutely wonder if you're ex-military.
2. I tie a small ribbon to my luggage. It could be anything: string, tinsel. If you're familiar with wine glass charms, same idea. It makes the bag identifiable from distance, so long as the charm is in line of sight. It does not, remarkably, stop strangers from grabbing the wrong bag, but it does get funny if they insist they recognize their bag when you ask them "you tied sparkly pink ribbon to your bag?"
The NATO alphabet is an uncanny intersection of being highly memorable and having carefully engineered properties across several dimensions. Whoever designed it did a brilliant job.
It is sticky as hell and surprisingly useful. I do assume that people who know it are ex-military but that isn’t entirely reliable in the US. A lot of other people picked it up, in part because it is so easy to learn by osmosis.
I know it from amateur radio, emergency services, and maritime communications, it's "officially" the International Radiotelephony Spelling Alphabet, shorthanded by some as the NATO Alphabet.
Others may know it by virtue of being fans of, or simply exposed to the Bloodhound Gang.
( FWiW I'm neither in nor from middle North America )
Was really helpfull when making international phone call to services like IRS or sometime good providers. Trying to spell out my french name and long adress or some order number with my strong accent was such a pain until then ^^
This was originated (or at least popularized) in an episode of Archer from season 1. It remains maybe my favorite 5 minutes of comedy ever out to screen. It's just so tight!
In my head I also maintain what I call the "adversarial NATO alphabet", which is sadly incomplete, but contains stuff like, "C, as in sea"; "Q, as in cue"; "T, as in tea", "I, as in eye".
An anecdote: I easily remember short-ish (pins, phone numbers) number combinations, learn completely new alphabets of new languages easily enough, just like their words, but I struggle to learn the NATO alphabet: the words have no meaning and I don't perceive them as atomic enough like a letter or number is, so it mostly looks like a large amount of random noise to me, like having to learn pi to 100 digits.
I forced myself to learn the NATO alphabet recently by using some online flashcards. Nothing complex, just shows the letter and I have to recall the word, then click to see if I got it right. Didn't take very long to get it down, and I go through them every few days to verify recall.
On a side note, the NATO alphabet is quite normalised in the Netherlands - most telephone operators will default to it when providing you information and likewise there is an expectation on you to use it when providing spelling sensitive information such as emails.
I have that too, of course! Can't read the name tag from across the baggage claim though, but sparkly ribbon + case design you can, and you can be 100% confident that that's your bag a stranger just grabbed.
My solution was quicker and faster: buy luggage that is not black.
It now is recognizable at 100 yds against a pile of luggage. OK, a minority of luggage is also non-black, but there's a range of colors. Mine is a medium blue, and so false positives are about 1%, and false negatives are nil.
But the cloud compute market is basically centralized into 2.5 companies at this point. The point of paying companies like Azure here is that they've in theory centralized the knowledge and know-how of running multiple, distributed datacenters, so as to be resilient.
But that we keep seeing outages encompassing more than a failure domain, then it should be fair game for engineers / customers to ask "what am I paying for, again?"
Moreover, this seems to be a classic case of large barriers to entry (the huge capital costs associated with building out a datacenter) barring new entrants into the market, coupled with "nobody ever got fired for buying IBM" level thinking. Are outages like these truly factored into the napkin math that says externalizing this is worth it?
Right now it only shows a little bubble in the URL bar saying "Not Secure", I think. (So, that is a "warning", in a sense.) TFA is saying there will now be an interstitial if you attempt an HTTP connection.
HSTS might also interact with this, but I'd expect an HSTS site to just cause Chrome to go for HTTPS (and then that connection would either succeed or fail).
> to force network-level auth flows (which don't always fire correctly when hitting HTTPS)
The whole point of HTTPS is basically that these shouldn't work, essentially. Vendors need to stop implementing weird network-level auths by MitM'ing the connection, and DHCP has an option to signal to someone joining a network that they need to go to a URL to do authentication. These MitM-ers are a scourge, and often cause a litany of poor behavior in applications…
He's sending people to concentration camps & bombing boats in the Caribbean and Pacific. He's deported American children. Treatment of asylum seekers, treatment of immigrant's children, wanton discrimination against minority groups…
You should look at what gerrymandering has done / is doing. For example, the entire city of Nashville, TN, has been utterly and obviously gerrymandered out of existence, and the city has no representation in the House. (They used to be TN's 5th.)
This of course does not apply to Presidential elections. The President has multiple times indicated disdain for elections, his party has used "third term and beyond", his supporters have openly floated the idea of repealing the 22A, he's called himself "king" and "dictator".
The VRA is quite literally before SCOTUS right now.
> or, as a last resort, impeachment
"a servile congress" — they understand impeachment. If an attempted coup doesn't get impeachment, nothing will. Regardless, the GOP is going along with the president, so impeachment isn't something that's going to happen.
> You should look at what gerrymandering has done / is doing.
What has it done? In 2024, Republicans got 50.5% of the seats and 51.3% of the two-party Congressional popular vote. The delta between a party’s share of the popular vote and its share of House seats is much smaller since 2000 than it was for most of the 20th century: https://upload.wikimedia.org/wikipedia/commons/thumb/e/e6/Po...
> The VRA is quite literally before SCOTUS right now
The VRA requires racially discriminatory gerrymandering and is probably unconstitutional in that respect. The VRA is the product of an era where white democrats would discriminate against black democrats even though they shared a party. Today, gerrymandering is based on political party, not race. If black people voted 80% republican, red states would happily gerrymander out affluent college-educated whites in their favor.
What a weasel worded sentence. "1 TB … $16". Of course, it's $110, and yes, I see the qualifiers here. Allegedly journalistic sites should cut out the marketing sleeze before publishing. "Starting at 64 GB for $15 and ranging up to 1 TB for $110" it's not hard to write.