singron
Joined 13 years ago
Joined 13 years ago
> The separation of concerns is deliberate — breakpoint() and is_debugger_present() are orthogonal building blocks, and breakpoint_if_debugging() is the convenience composition.
It might be a false positive or just a few spots. Or maybe it's rage bait. I'm sorry if the author actually writes with this style.
It's a little tricky with memory orders since you are synchronizing on two different locations. The simplest thing is to make all atomic accesses seqcst, but I think a single fence(seqcst) before checking overlap is sufficient in this case and will use fewer synchronizing instructions.
The overflow checks are also tricky. We want to make sure that if an allocation fails, subsequent allocations also fail (even on other threads), and overflow might allow them to think they succeeded by incrementing again back into a valid range. This means you generally can't use fetch_add in a thread-safe bump allocator and instead need to use a CAS loop where you detect overflow before writing.
Since you are doing a CAS loop anyway and always accessing both variables, it might actually be faster to combine both variables, especially if you typically allocate from both at the same time. E.g. if you pack two offsets into a 64-bit CAS word, you can still address 4GB, and you can get even more by aligning allocations. You also don't have to worry about seqcst.
Antitrust is also federal and is probably generally supreme over state law. E.g. even if Google fairly acquires talent according to state law, it can still be determined to violate antitrust.
This poaching scenario (where Big Co pays above market to a large number of employees to drive a competitor out of business) is very similar to dumping (selling goods below market etc.), which has been illegal for a long time even though "selling goods" is generally legal.
However, since the government (DoJ, FTC, etc.) is the ideal litigant, you actually need someone who works there to not get fired for long enough to complete investigation and enforcement. In a lot of anti-trust cases, all the direct participants benefit: the employees get paid more, Big Co consolidates power, and Small Co gets paid off. The "losers" are most distant like their customers or uninvolved competitors who aren't in a good position to sue.
At some point, there becomes a mathematical impossibility of too many pages of applications for too few evaluators who also have to do the rest of their jobs. Either they don't get quite that many applications, or the initial evaluations must be based on some incomplete reading (looking just at the resume, reading a subsection, skimming, or randomly discarding), or the backlog keeps growing.
Fwiw I also applied and the auto-reply said I should expect to wait 4-6 weeks, which has recently passed without hearing back. The application is a ton of work, and I don't mind doing it with a significant chance of being considered, but I think it's a normal reaction to be devastated if you put all that time and energy into crafting your materials, which manifest all your experience, behavior, and personality, and it turned out nobody read them. I still have a little hope, but I'm sorry you never got a response.
I.e. in order to get to the point where you didn't have to manually touch this thing, you likely did have to learn deeply about its underlying concepts by manually doing things.
Operating machines doesn't always have the same phenomenon. E.g. experience with a hand-powered drill is unnecessary to use an electric drill.
I'm also curious if it stopped after that goal or if it kept playing.
In a different vein, another thing TLA+ isn't great at is modeling atomics and in particular weak-memory semantics or anything that's not sequentially consistent. If you translate your algorithm to pcal, it will run as if it was sequentially consistent. If you need to model non-sequential-consistency, then that needs to be spelled out with explicit logic to TLA+, which is probably too complicated and error-prone to do by hand. The C/C++/Rust memory models permit a lot of wacky stuff. I imagine you need to add read caches and writeback buffers for each variable with cache-flushing instructions at appropriate points, but maybe there is a more elegant way to do it.
If you use rust, miri and loom both have analyzers that can check some non-sequentially-consistent behavior (and loom doesn't actually implement sequential-consistency at all).
The other line items are probably similarly unrealistic since they include their own launch costs as well.
They also spec 300 racks of 500kg each, which is <40% of the weight of the comparable land rack. I doubt the full weight reduction since the racks still need to survive launch force/vibration in addition to fluid/pressure enclosures that land racks don't require. I think it's likely that just about every part of this report has a similarly cooked numbers, and we can just throw the whole thing out.
Send hate mail and memes to [email protected]