Feanor drew his sword on his half-brother and threatened to kill him because he was paranoid Fingolfin was trying to usurp his power. He compelled all of his sons to swear an oath to slay any man, elf or being in possession of the silmarils (which led to subsequent needless bloodshed).
Then he ordered and carried out the mass-murder of relatively unarmed Teleri in order to rob them of their ships.
And yet even Feanor was a “good guy” at one point in time. It wasn’t until many years after the invention of the palantiri that he went off the rails, and that was only after talking to Sauron for a while.
But I think that Feanor’s character is irrelevant. An evil person could create a tool that ends up being useful for good purposes. Tools are neutral; they don’t inherit the character of their creator or their user.
The simplest example is `memcpy(dst, src, len)` and similar iterative byte copying operations. If the function did not use noalias, the compiler wouldn't be free to optimize individual byte read/writes into register-sized writes, as the destination may overlap with the source. In practice this means 8x more CPU instructions per copy operation on a 64-bit machine.
Note that memcpy specifically may already be implemented this way under the hood because it requires noalias; but I imagine similar iterative copying operations can be optimized in a like manner ad-hoc when aliasing information is baked in like it is with Rust.
That's not a great example, since memcpy() already has all the information it needs to determine whether the regions overlap (src < dest + len && dst < src + len) and even where and by how much. So pretty much any quality implementation is already performing this test and selecting an appropriate code path, at the cost of a single branch rather than 8x as many memory operations.
The real purpose of restrict is to allow the compiler to cache a value that may be used many times in a loop (in memcpy(), each byte/word is used only once) in a register at the start of the loop, and not have to worry about repeatedly reaching back to memory to re-retrieve it because it might have been modified as a side effect of the loop body.
The authors are getting their conclusions all wrong; this is clearly convincing evidence that some teachers are slipping HGH in their students' lunch meals! /s
When support needs are infrequent enough on the customer end, this effectively becomes a market for lemons--a customer can't know how good your support is until they've bought your product, and by then it's too late for them. People can advertise world-class customer support for one-time purchases because the few customers that encounter the awful support won't move the needle that much compared to shifting money from long term support teams to sales teams.
That being said, I realize this dynamic is likely much different for frequent/long-term buyers such as B2B solutions where quality support does translate to better retention and word-of-mouth advertising.
> They were named after President Lincoln, but only as a marketing tactic
> there's no real connection
Funny--I always thought it was meant to be a pun on linkin', as in you're linkin' the logs together because they have those slots that fit precisely together on the ends.
I think it's both that and the popular tale of Lincoln having been born in a log cabin (which for some reason I thought I had heard wasn't actually true, but from looking into it now, it seems like a lot of sources say it is, so maybe I heard wrong?)
Not to be confused with the National Archives _Museum_, where you can still readily visit to see important documents such as the declaration of independence.
The frustrating thing with layer-cake languages like C++ is that it can technically have all the ergonomic APIs that make life nice to write, yet have all this cruft and esoteric edge-case behavior that makes it so, so hard to read. I can't safely ignore features in C++ that others are using when I'm evaluating the correctness and security implications of already written code. And barring a strictly enforced (e.g. mandatory lint before merging) coding convention that bars all the nasty sharp points and legacy APIs, even a new project will gradually accrue the bad bits from devs who are used to using C++ that way.
All languages that are sufficiently widely used eventually become 'layer-cake' languages.
It's inevitable once you have multiple big groups of people with very different needs. And once language design and best practices has evolved from where it was when the language was originally developed.
The only ones that escape this problem aren't widely used enough to have much demand for new features or changes.
> one of the good guys
Uhhhh...
Feanor drew his sword on his half-brother and threatened to kill him because he was paranoid Fingolfin was trying to usurp his power. He compelled all of his sons to swear an oath to slay any man, elf or being in possession of the silmarils (which led to subsequent needless bloodshed).
Then he ordered and carried out the mass-murder of relatively unarmed Teleri in order to rob them of their ships.
Such actions does not a good guy make.
reply