AngriestLettuce
Joined 3 years ago
Joined 3 years ago
#!/usr/bin/env python3
import inspect
def frobnicate(unfrobbed: any) -> None:
frame = inspect.currentframe().f_back
for name in [name for name, value in frame.f_locals.items() if value is unfrobbed]:
del frame.f_locals[name]
for name in [name for name, value in frame.f_globals.items() if value is unfrobbed]:
del frame.f_globals[name]
foo = open("bar.txt")
answer = frobnicate(foo)
print(foo)
Traceback (most recent call last):
File "hackers.py", line 20, in <module>
print(foo)
^^^
NameError: name 'foo' is not defined
Be careful with the absolutes now :)Not that this is is reasonable code to encounter in the wild, but you certainly can do this. You could even make it work properly when called from inside functions that use `fastlocals` if you're willing to commit even more reprehensible crimes and rewrite the `f_code` object.
Anyway, it's not really accurate to say that Python passes by reference, because Python has no concept of references. It passes by assignment. This is perfectly analogous to passing by pointer in C, which also can be used to implement reference semantics, but it ISN'T reference semantics. The difference comes in assignment, like in the following C++ program:
#include <print>
struct Object
{
char member{'a'};
};
void assign_pointer(Object *ptr)
{
Object replacement{'b'};
ptr = &replacement;
}
void assign_reference(Object &ref)
{
Object replacement{'b'};
ref = replacement;
}
int main()
{
Object obj{};
std::println("Original value: {}", obj.member);
assign_pointer(&obj);
std::println("After assign_pointer: {}", obj.member);
assign_reference(obj);
std::println("After assign_reference: {}", obj.member);
return 0;
}
$ ./a.out
Original value: a
After assign_pointer: a
After assign_reference: b
Just like in Python, you can modify the underlying object in the pointer example by dereferencing it, but if you just assign the name to a new value, that doesn't rebind the original object. So it isn't an actual reference, it's a name that's assigned to the same thing.ANYWAY, irrelevant nitpicking aside, I do think Python has a problem here, but its reference semantics are kind of a red herring. Python's concept of `const` is simply far too coarse. Constness is applied and enforced at the class level, not the object, function, or function call level. This, in combination with the pass-by-assignment semantics does indeed mean that functions can freely modify their arguments the vast majority of the time, with no real contract for making sure they don't do that.
In practice, I think this is handled well enough at a culture level that it's not the worst thing in the world, and I understand Python's general reluctance to introduce new technical concepts when it doesn't strictly have to, but it's definitely a bit of a footgun. Can be hard to wrap your head around too.
Isn't that just called unit testing?
You can certainly try, but the quality will be noticeably poorer. You can get away with that for a while, especially as a big business, but I think the tide is already turning there. Everyone's tired of broken shitty tech that doesn't work properly with no one to really contact about it. Skilled IT professionals are in huge demand nowadays, it's only the fleas on the rats complaining that the ship is sinking. Rats can swim, they'll be fine as long as land isn't too far. Mechanics and firefighters that can actually keep the ship going (if you pay us well enough), are on the other hand doing quite well these days. Unions are great, especially for tech professionals. As long as you're still allowed to negotiate personally as well, there's no reason not to.
Doubly so because the types of experiences you get tend to be very hard to disprove. It's usually not something like "There's a yellow demonic entity running around deep in the valley by the mountain" where it's something that can be checked and explained, like actually just a moose who got tangled up in a yellow wintercoat or something, and is running around irritated trying to get it off. Rather it tends to be more "God is speaking to me through my mind, and only does so to special people" or "These people are trying to make me be as miserable as I was before I found God by making me reject him, they must be servants of Satan".
Really, if anything, I would say gifted people are probably way more likely to become religious fanatics if they have these experience. We do not have a good explanation for these things (you're sick in the head, something something dopamine does not work too well for otherwise perfectly functional and rational people), and the explanations that we do have must more or less be taken on faith. You need to trust that the person explaining these things to you is both more capable of judging the situation than you are, and has your best interests in mind. For most gifted people, the chance of both of these being true in any particular situation is abyssmally small.
This applies even more so in mental healthcare, where we're practically at the same stage of technological advancement as we were when trepanation and bloodletting were state of the art in physical medicine. We have a long way to go before we can truly make the "You're crazy!" explanation stick for those who are used to living in a world that is inevitably wrong about most things, whether subtly or overtly. Really, if you're used to being the smartest guy in the room, what choice do you have? What choice do you have but to trust yourself? Yes, you might be delusional and wrong, but you know the world at large is delusional and wrong on countless subjects as well. Why trust them more than you trust yourself, when just about every single experience you've had in life has fed into your belief that you are fundamentally better at judging reality than most people are?
It isn't any one particular option that I'm missing, rather the entire experience of modifying its behaviour is a pain in the ass. They seem to labour under the delusion that if they just make this one perfect system, everyone will be happy with it, so they don't need to prioritize customizability. This is rarely ever the case when dealing with real people with different needs.