> AI-developed nootropics and germline editing will saturate human intelligence across individuals.
This is a forum, not a Bayesian-updating machine. So common courtesy is for you to take up the burden of proof for your own statements. Why do you think this is the null?
class User {
explicit User(const char* name) {
if (!look_up_uid(&uid, name)) {
abort();
}
}
bool is_root() const {
return uid == 0;
}
int uid;
};
Let's say look_up_uid() forgot to fill in uid for certain special kinds of users. Like maybe you have a dummy 'nobody' user that was introduced specially after the fact and which is not in the database like the rest.
As C++ is right now, uid would contain garbage. Which means that, at run time, you would often get invalid UIDs if you attempted to log in with such a user, triggering some logging or reporting you to Santa or whatever. And which means that sanitizers would immediately tell you that you forgot to initalialize the field if you ever try to use it (say, in is_root()). Both of these would flag the bug the moment that that kind of user attempts to log in, and make you dig into look_up_uid()'s body to figure out why it's not returning the UID when it's supposed to.
However, if C++ were to zero-initialize everything by default, then neither of those would be true - you would silently get a root user, which is capable of doing everything that nobody can do. And someone who reads the code wouldn't immediately know that you have such a bug; it would sit there idly until someone exploits it.
Thank you, I understand the example better now. Squashing the class of problems of using non-initialized variables by using zero-initialization causes potentially worse bugs since 0 could inadvertently be a correct value. That makes sense!
Going back to GP:
> being too good at solving one class of problems selects for other classes that are more resilient and harder to find
Rather than this being too good at solving this class of problem, it seems to me that zero-initialization is the wrong approach; if the default value were present in the program, it'd be eas(y|ier) to spot. Initializer checks can do that without introducing this issue. You're also using the fact that non-initialized values are "random" by default- we could also use fuzzer checkers for that.
I think the general lesson from the example is that the way you solve a class of problems could introduce more pernicious ones, rather than the fact that it's solved.
> Rather than this being too good at solving this class of problem, it seems to me that zero-initialization is the wrong approach
That's exactly why I wrote this here:
>> I'm obviously not saying we should write unsafe code or that we shouldn't try to eliminate entire classes of bugs, but that HOW we do it matters.
After you get past the hurdle of noticing this problem (which, as you saw, is very much not obvious), the harder question becomes: what is the right approach?
In this particular case it's not too hard to think of a better approach once you concede the obvious solution isn't so great, but in other cases it is, and often the better alternatives put some kind of selection pressure too... just less frequently. And even in this case, it's not at all obvious that this approach is bad - plenty of people think it's better to force a default value you can rely on, and they want to remove undefined behavior from C++ by forcing initialization on everything. For longstanding examples elsewhere, just look at how Java and C# initialize fields, for example.
Outside of programming it's even harder to notice and find a better alternative, but selection pressure has these kinds of effects in other areas too.
The problem is that 0 is a valid UID in POSIX systems like Linux.
If you automatically initialize variables with a garbage value, use-before-initialization (the program’s initialization) them the use of that variable will likely fail due to error. By using what turns out to be a legit UID on every system you have the opportunity for this case not to be detected, perhaps causing a problem immediately or else allowing some nefarious actor to write what they want into that variable instead.
This is a enjoyable read and a fantastic blog post!
I wonder whether it's easy to discern the activity of changing your role (or mask) from the activity of changing your "authentic self". I'm not sure I'm very good at making that distinction- in fact I'm not sure what an authentic self even is! Is it anything other than the overlap between different roles? After all I play a role when I'm with friends too, in a manner of speaking- Maybe that means I'm at risk of being such a "serious man"?
> Power is an antidote to humiliation.
I'm not sure that's true! Or rather, whether it's a healthy antidote. All powerful people have others who have power over them, and even Elon Musk had to bury the hatchet with Trump. I think it's a matter of personality whether having power means you're able to weather humiliation, or whether humiliation means you can't wield power responsibly.
> Both tend to be outmoded, hostile, and constrained relative to graphical interfaces.
"Outmoded", yes, and "constrained": absolutely. But "hostile"? TUI's and CLI's are some of the most power user friendly programs I still have the pleasure of calling my tools.
Just yesterday vscode broke down for me due to the weekly update triggered during my commute- vim doesn't have this problem, it's my tool.
I think it's annoying that this gets repeated without revealing the actual stats: this is for the BFI test, it's 99.5% ± 0.38, where 40 samples per person were split 80-20 in training and testset.
I'm surprised no one has mentioned the obvious parallels to Nietzsche's idea of the "superman", a person who will not bow to incentives but make their own value structure.
To me the analogy of the monstrous fish is also very reminiscent of Nietzsche's story in "the gay science" of the madman exclaiming in horror at the public square:
> "God is dead. God remains dead. And we have killed him. How shall we comfort ourselves, the murderers of all murderers? What was holiest and mightiest of all that the world has yet owned has bled to death under our knives: who will wipe this blood off us?"
Realising this horrid truth opens an opportunity to defy the structure of society and follow one's own convictions.
But as augment_me says above, not everyone can bear the cost of ignoring incentives. I think all of us have stories where we had a good conception of what the right thing was, and wanted to do the right thing, but money trouble or job security meant we had to follow bad incentives- I certainly do.
In a conversation about careers, a friend of mine casually dropped a simple approach to life that has helped me a lot: you can’t have everything all the time, so make the best of what you got. Some years you will have health and knowledge but be poor, others years you will build wealth but may not be able to uphold your moral values, etc.
I may not have the luxury to ignore bad incentives right now, but I try to make lemonade from the lemons life throws at me so that one day I can.
Not necessarily. I rent my house, and the housing corporation who I rent from are not rent seekers, they provide a service to me which I'm happy with, and which they invest in.
They could've bought up the land and house and not improved it at all and depend on the housing crisis deepening for increased resell profit- but they did not do so, they maintained this house I'm in and ensured me and future tenants can continue enjoying this place. That's not rent seeking.
> AI-developed nootropics and germline editing will saturate human intelligence across individuals.
This is a forum, not a Bayesian-updating machine. So common courtesy is for you to take up the burden of proof for your own statements. Why do you think this is the null?
reply