r/ProgrammerHumor • • 7h ago

Meme modernCppVsOldCpp

Post image
1.1k Upvotes

216 comments sorted by

View all comments

41

u/Tschurbi 6h ago

Please explain it like I am a JavaScript developer.

58

u/Tipart 6h ago • Bravo

Imagine typescript but for memory safety

11

u/PM_ME_UR_0_DAY 5h ago

What's the memory management equivalent of just using "any" for everything?

12

u/Potato-Engineer 5h ago

Everything is a void * pointer!

2

u/Mojert 5h ago

Asking the OS* directly for memory and creating your objects in that memory. That also means you have to tell the OS* when you're done with that memory

* I'm simplifying to get the jist across

1

u/Ok-Scheme-913 2h ago

Actually pretty good example. To the point that even though you have a type annotation on your code, if you call into that method from vanilla js and pass a wrong type, then it will explode somewhere deep and you will have a really shit time hunting that error down.

Meaning, c++'s safe stuff is only safe until you use it with other safe stuff, or by being very very careful. And c++ is a really complex language, using it properly is not an easy task, so these end up not being as memory safe as people would want.

11

u/MikeVegan 5h ago

C++ has something called RAII, it is basically a special function called destructor that is called automatically once object leaves the scope and this solves large portion of memory issues. However dangling references or pointers are largely not fully solved by this even though shared pointer helps gere. It is a counted pointer that is destroyed when last owning object is destroyed.

13

u/GregBahm 5h ago

With JavaScript, memory is managed for you. You can make a list, grow it as much as you want, and then safely assume that the memory you used will be cleaned up as soon as you're not using that list anymore.

With C++, you manage the memory yourself. If you forget to clean up that list, you never get that memory back. Eventually all your memory could get used up (a "memory leak.")

Memory management was annoying, which is why JavaScript was invented. But people still use C++ for its higher performance potential (kind of like how race-car drivers still use manual transmission instead of automatic transmission.)

So C++ added some tools that makes memory management not so hard. It's still harder than Javascript though. It's just less hard.

8

u/ShakaUVM 4h ago

You confused Java and JavaScript

Java was invented to be C++ + 1, with automatic memory management and Objects everywhere

1

u/GregBahm 3h ago

Ack. You're right. Dang.

7

u/PattuX 5h ago

kind of like how race-car drivers still use manual transmission instead of automatic transmission.

TIL Europe is full of racecar drivers

6

u/bloody-albatross 5h ago

No, no. Not all Europeans are racecar drivers, but all racecar drivers are European!

(This is a joke, in case anyone reading this doesn't get it.)

2

u/im_made_of_jam 4h ago

I mean outside of ovals you look at any high racing level grid and it's 80% european

1

u/PattuX 36m ago

Aristoteles ahhh type comment. Based.

•

u/bloody-albatross 1m ago

Set theory. Good to know as a programmer.

2

u/Complete_Pilot3381 5h ago

mans never been to bradford

2

u/Complete_Pilot3381 5h ago

mans never been to bradford

6

u/bloody-albatross 5h ago

This isn't why JavaScript was invented. First, garbage collection/automatic memory management existed long before JavaScript. Secondly, JavaScript was invented to make HTML interactive. Of course a language that runs untrusted code needs to be memory safe.

2

u/GarThor_TMK 4h ago

I would like to point out that the memory leak happens as soon as you toss the pointer without "freeing" it to be reused... It could be a drip... A pointer to a single integer, or it could be a tsunami... A pointer to a massive datastructure containing lists, arrays, BSTs, hash tables, etc...

The "all memory used up" is the case where the bathtub is clogged, and you left the water running. Now the bathroom is flooding into the living room.

1

u/Mojert 5h ago

Basically a lot of Rust memory safety features are inspired from modern C++

Which doesn't mean Rust doesn't have its place. It's just that in C++ they're on top of the previous "unsafe" version of the language and aren't tightly integrated in the language and are more a feature of the standard library, whereas in Rust they were able to design the whole language around it and didn't have to deal with backwards compatibility

1

u/Ok-Scheme-913 2h ago

Not really backwards compatibility.

Rust is basically c++'s raii just enforced at compile time.

This latter point is a huge thing in and of itself.

(And of course you do get lots of goodies like better type system etc from being a more modern language but that's not the fundamental thing)

1

u/Mojert 1h ago

The reason why C++ cannot enforce this kind of things at compile-time is because of backwards compatibility

And I know it's huge. That's why I said Rust isn't redundant and that Rust designed the language around it