25,398 karma · joined January 11, 2012
email: andrew at jarbox dot org
We had one dog growing up that liked to commune with a particular herd of cattle (in a friendly way) in a distant field on occasion, and nobody and nothing could stop it when it had that inclination. Dog on a mission.
Most domesticated cats demonstrably have no issues thriving while feral. They are not well-adapted to every environment they’ve been introduced but they do pretty well in many. Their main issue in places like North America is prodigious predation in the wild, which is mitigated when living near humans.
In some parts of the US outdoor cats are an essential bulwark against rodent invasion. It is healthy for the cats and very effective organic rodent control. They do get some birds but the bulk of their activity is rodents. There are places you can’t live without them.
Depending on the situation, outdoor cats can also live a long time. We had farm cats when I was growing up that spent a large part of their time outdoors during the day. They were smart, social, and typically lived 15-20 years before old age caught up with them.
Predation mostly impacts cats that are either obviously stupid or aggressively anti-social in my experience.
No amount of bureaucracy and process theater gets around this fact. There is a vast and very expensive gap in software between "don't do stupid things" and "this is actually correct". The tooling to close this gap is severely deficient and not for lack of trying. In physical engineering we've had automated design checking for decades because it is a relatively trivial problem in those domains.
It would be great if compilers could generate proofs but after decades of research they can't even generate SIMD code in most contexts.
Why would anyone that already ditched C asserts use C++ contracts when it can’t express what the alternatives already can? This isn’t a new problem. People were creating more expressive assertion replacements than contracts offers a decade ago.
C++ contracts are nerfed. It is less expressive and capable than what anyone that cares about these things already uses. So who is expected to use it?
The idea that SIMD is only good for parallelizing operations over arrays of the same type is empirically false and seriously understates the capabilities of good SIMD implementations. Some SQL-ish implementations work this way on row-structured data.
Most devs seriously underestimate what good SIMD is capable of.
Contracts were sold with the idea of aiding compile-time verification, a noble purpose. The combination of concepts + constexpr allows you to do deeper compile-time verification today by other means than contracts can check. It isn’t obvious that this will ever not be the case. This means contracts is relegated to being another flavor of C asserts.
C++26 contracts are arguably unnecessary because we can achieve the same results other ways, sometimes with stronger properties. I’m a proponent of features that clean up the syntax but C++ contracts look like a nod to people that still use legacy C asserts. That’s fine but it also perpetuates an inadequate model of what assertions should be capable of expressing.
People figured out how to do with C++20 better than what contracts promised.
One thing I give the C++ feature gods credit for is recognizing material deficiencies in systems languages and unapologetically trying to fill those gaps starting with C++11. The addition of atomics, strict variadics, constexpr, lambdas, concepts, lifetime annotations, etc has been transformative for C++.
The ability of compilers to use SIMD is no better than it was 20 years ago. Total stagnation for all practical purposes, and the reason is that compilers fundamentally lack the context and freedom to rewrite the code architecture appropriately for SIMD optimization (even if they could).
I think a point people miss is that highly optimized SIMD code is almost never about parallelizing loops. It is about deeply probing and manipulating arbitrarily complex data structures in parallel that involve collections of unrelated types. SIMD allows you to do this, and it is fantastically efficient, but a compiler has no conceivable way of understanding this.
For this reason, SIMD optimization has often been classified as an AI-Complete problem in computer science.
Additionally, for pure performance requirements, C++ is still materially faster than Rust in practice. That may change some day. C++ has many issues but it is also objectively excellent at many things.
I think the risk is that C++ contracts become an evolutionary dead-end that hang around forever in code bases because they were standardized. It wouldn’t be the first time this has happened.
SIMD on different silicon is incompatible at layers of abstraction far above the codegen manipulation a compiler can do.
Contracts notionally offer the ability to lift some runtime assertions to compile-time. That is how it was sold. Except they don’t in practice.
Meanwhile, concepts + constexpr if used artfully deliver that in practice, including for many cases that contracts were supposed to solve.
I push all verification to compile-time to the extent possible.
One of the best features to be added to C++ in many years.
C++ contracts are an attempt to bring C asserts into the C++ age. The weakness of C++ contracts is that they are mostly syntactic sugar over C asserts. If you really care about this type of thing, you probably already have a custom C++ assertion framework that is at least as capable if not more.
The promise of C++ contracts is that they can aid formal verification, which would be great. As delivered, it can’t do much more than was already possible, which will inhibit adoption.
If you were already writing high-reliability C++ then the benefits are difficult to quantify. If you weren’t writing high-reliability C++ then it saves you almost nothing over doing the standard idioms of high-reliability C++ that were already available to you at very marginally more cost. It does standardize expression of it in narrow cases but the payoff seems minimal.
Most of what C++ Contracts delivers is a mashup of what you can already do with constexpr and C++20 Concepts. I like reliability features but this feature, as delivered, looks fairly useless if you already use reliability features. A compelling standard would need to make much deeper guarantees out of the box. And the compiler can already see through most compositions of constexpr and C++20 concepts, which is already very expressive.
C++ Contracts looks a bit like a feature that was designed long before current standard features existed.
By your reasoning everyone should stop bathing so that we don't starve to death.
This is like calling a rubber raft "enormous" after comparing it to an aircraft carrier. Agriculture consumes astronomically more water, often wastefully, for far less valuable purposes. I can't take these objections seriously.
This is just the latest weird moral panic.
There is no credible version of history where Democrats as a party are not enthusiastic supporters of these surveillance powers. They've been actively complicit the entire time.
I have never seen evidence of this in the wild. C++ is still significantly faster than Rust in practice when doing performance-sensitive parallel development in the two languages.
The reason for the performance gap is mostly understood. Rust's codegen is currently somewhat worse for a variety of reasons. Rust's much weaker compile-time metaprogramming features make some optimizations impractical in the language that are easy in C++. Culturally, "unsafe" minimization in Rust pessimizes code architecture.
Rust can get pretty close to C++ but it often requires writing some very ugly Rust.
C/C++ code can trivially reach into some remote bit of state and mutate it directly. The compiler rarely objects, no matter how ugly the access method or pattern. It is up to the programmer to make sure the invariants hold and the compiler can’t always see through it. These elided copies add up, though it usually has a maintainability and safety cost.
It is related to why functional languages tend to be mediocre for supercomputing in practice despite having nice properties for massive parallelism in theory.
Or maybe not. China has been credibly accused of starting low-yield nuclear testing in 2020, specifically configured to evade detection, albeit unsuccessfully.
https://www.armscontrol.org/act/2026-03/news/us-accuses-chin...
Heap allocation is not required, just the default.
You can do static allocation if you wish, though it is a little more complicated than typical static allocation due to the relative unpredictability.
Delegating the runtime nerfs many of the benefits that async can offer. If you are going to delegate the runtime it offers relatively little compared to just using threads.
Shahed type drones are killed with APKWS missiles. A single fighter jet can carry ~40 of these missiles and the unit cost is similar to a Shahed. APKWS has evolved a lot during its 15 years in use and the new generations are expected to come in around ~$10k each, cheaper than the drones they are designed to destroy. You can put an APKWS on many different things. The US annual production rate is 35,000 but that could be increased several-fold if needed (it is based on a missile of which the US produces 200,000 per year). The Europeans are working on their own version of this.
These have been used in the Middle East for a long time. Saudi Arabia, UAE, Qatar, and Israel all have orders for 10,000+ APKWS missiles each, so clearly they are effective.
The unit cost has been tipping toward the defender but the systems are not widely distributed yet. More effective defenses require more expensive drones e.g. you can't build an effective anti-ship missile (a type of jet-powered drone) for less than a couple million dollars because anything cheaper has too low of a probability of success.
Maybe the Federal government has never bothered to invest in some aspects of road safety in Yosemite. That’s somewhat embarrassing. I’m surprised this is even an issue in Yosemite given how many other places have had this forever. Far more remote and unpopular highways have addressed this problem.
It is difficult to paint this as anything but incompetence.