As someone who switches between C++ and C and besides classes and inheriting what’s the actual difference between native C++ and C? Never really explored beyond Unreals macro heavy version of C++, wxwidgets and QT
C++ is technically a completely different programming language to C, but they share a lot of similarities because C++ is sort of derived from C (and now they’ve both evolved somewhat separately). The main addition at the start was OOP being baked in to C++. A typical C program is often a valid C++ program as well, but there are some subtle differences in a few areas that can cause problems. C++ has a lot of features compared to C, a more complex type system, a big templating system for compile-time computation, and focuses a lot on adding low/no cost abstractions to make writing programs easier without incurring a high cost at run-time… That said many people do still prefer C, often for its simplicity in comparison.
C++ is a superset of C, and C is a subset of C++. C++ was originally designed for the purpose of updating and adding OOP to C.
The main things C++ has that C doesn’t are user defined data types, support of reference variables, function overloading/overriding, built in exception handling with try/catch, inline functions, and C++ has around 30 more keywords overall.
I would say the biggest difference is the OOP focus of C++ where all of data and functions are encapsulated into an object. This helps make C++ more secure and better for writing high level implementations than C.
Yeah the constant stream of critical CVEs affecting C/C++ libraries that get patched on my computer is legitimately frightening. So much low quality (and dangerous) code out there. Maybe if you have a personal project that doesn’t connect to another device… you could be justified in writing C code. Or tiny embedded systems?
Modern C++ is actually pretty good. The language gets knocked firstly because it’s complex, and secondly a lot of people remember the old pre-C++11 days. It’s like a different language now.
But it’s a looong way from being my favorite language. That goes something like Python… by a lot; Rust; JavaScript; C# and then everything else.
I’m happy so many people despise C and C++. Maybe we can move on from it someday and use more memory safe languages that are easier to read. Languages with usable package managers, linting, documentation generation, IDEs, embedded debuggers, helpful stacktraces, readable errors, sane standard libraries, with less arcane invocations of evil.
Honestly, I hope the linux kernel manages to be rewritten in Rust someday.
I hate fighting its compiler and having to jump through hoops to get things done that’d be simple in Python.
If I’m gonna use a system programming language, I pick Rust. At least Rust provides clearer compiler errors, a package manager, a decent plugin ecosystem, and memory safety. Its runtime errors are a lot easier to decipher than the infamous “Segmentation fault (core dumped)”.
I hate writing code in either language. But at least what C has going for it is that it’s waaaay simpler than C++. Simple can be a really good thing. Sure, all those cool features can save you time, but they can also be gotchas that will cause bugs.
Though it is a balancing act. Too simple and you’ll make mistakes due to how much you have to repeat yourself or using unsafe equivalents (like using preprocessor directives to mimic features that C++ natively supports).
C sucks to write and take care of memory, but it’s nice for super efficient code for use on smart watches. Samsung ditched it (tizen- native apps written in C) in favor of wearOS (java?), and their battery life is now less than half what it was.
WearOS is based on Android, which uses Android Runtime (ART) as the application runtime. ART uses Java (or any other JVM-compatible language, such as Kotlin) as the development language, but compiles the app to native code when it’s installed on a client device.
The most recent C++ thing I worked on (not that recent, like 5 years or so ago) was a fairly new project and the people working on it were really passionate about C++. But it was C++ code that ran as a Python library and was using the official Python C bindings. Not sure why we didn’t use one of the unofficial C++ libraries, but the usage of that C library (and such a fundamental one) held things back. We wrote was was modern C++ (at the time), but big chunks would be a completely different style.
It’s the amount of legacy it’s carrying on that drives me crazy. Many of the implicit default implementations are confusing. That’s where all these “rule of 3”, “rule of 7”, “rule of whatever” come from. The way arguments are passed into functions is another issue. From the call-side you (sometimes) cannot tell if you’ll end up with a moved value or a dangling reference. The compiler will not stop you from using it. Even if the compiler has something to tell you, it’ll do it on the most cryptic way possible. I’m grateful we have C++, it paid lots of my bills. But it’s also a pain in the ass.
I know that there are use cases for [ ] over [[ ]]. There have to be. Why in god’s name would [ ] exist if there wasn’t a reason to use it over [[ ]]? I’m obviously the one in the wrong by only ever using [[ ]], because [ ] would definitely be better in some type of situations that I’m just not seeing clearly. Right???
Bash is so bad. I literally use it every day and have written many Bash scripts, yet I’m constantly having to search for how to do things in it because syntax is so bizarre and difficult to remember. Need to do a for loop over lines in a file? You can bet I’m googling the syntax for it. I have a general idea for what it looks like and know what to search for, but no way in hell can I write it correctly in the first few tries.
String manipulation is the absolute worst. Have fun getting to learn the unreadable syntax of most sed and awk programs (the only thing most people have memorized is find and replace). Stuff like “split a string of comma separated ints and add them up” are way harder in Bash than in Python, despite the fact I often need to do stuff like that in Bash. Well, in the terminal anyway. Sometimes I’ll just use Python, but Python’s weakness is executing programs and getting their output, which is nowhere near as convenient as it is in Bash.
Side note, isn’t it weird that for a language where flags like --foo bar are so commonly used, there’s no built in or standard tools for accessing flags?
Python has its flaws for sure (I’m getting pretty fed up with the lack of required type notation, myself), but my point here is that bash is even worse:
Huh? The Python Stacktrace is great. What kinda fucked up library were you using that it prints the error code instead of raising an exception?!
Also don’t think outdated library docs are a fault of Python 😅 In much the opposite way, I’ve found Python’s standard library to be really great, reducing the number of random third party libraries needed. (Looking at you, JavaScript)
Sounds like a problem for someone who is writing the code on a toilet paper or whiteboard. Most people have some sort of hackable editor/IDE that handles the indentation and code blocks.
obfuscated error messages
Just don’t use libraries which print or log exceptions without raising it :)
The syntax, the syntax-highlighting, venv creation and usage, having to import everything even inbuild types, have fun checking what a third party library has for functions and what they need :D Async is a hecking mess, documentation is another (bad) story.
Me too. Have been programming in C++ since I was 10 years old. The first programming language I’ve learned and the one I still love using today where appropriate for the task at hand.
My dad wanted to me to become a developer. He bought me a computer so that I can code but instead I was introduced to the world of porn. Today I am successful Porn director who has worked for many big name companies.
I am almost a year into a job where the main piece of software is a mix of C and C++ and there is no documentation, hardly even code comments. Some of the files say they were created over a decade ago. Just pages and pages of C code with no comments and no external design docs.
If I search my local copy of the source for .c and .cpp files, I get 1,485 items. But it’s not that bad because many files show up several times in different directories with the same name. :D
And you know, I HAVE been feeling better about myself lately! (The job is actually a perfect fit for me, other than the humongous scary & opaque code base)
Everything is fine within the scope of a college course or project.
Where C++ breaks down is large, complicated projects where you colaborate with other developers over multiple years.
I worked in C++ for almost a decade, and while there were a few good projects I encountered, most suffered from one or more of the following problems:
C++ has so many parts, everyone picks a subset they think is “good”, but noone seems to fully agree on what that subset is.
A side effect of the many possibilities C++ offers to compose or abstract your project is that it allows for developers to be “clever”. However, this often results in code that is hard to maintain or understand, especially for other developers.
Good C++ is very hard. Not everyone is a C++ veteran that read dozens of books or has a robust body of knowledge on all its quirks and pitfalls, and those people are also often assigned to your project and contribute to it. I was certainly never an expert, despite a lot of time and effort spent learning and using C++.
Yes, use C++, but with extern "C" for everything so you can easily interface with other software. That limits you to no classes or namespaces, but internally you can use smart pointers, vectors, maps and actual strings.
While C is certainly better for some problems in my experience, it too is very hard to use in large projects with a mix of developers, and it is unsuitable for most higher level applications in most companies.
I think C has its place in the world still, which is mostly confined low level embedded, kernel space and malware. I do believe that the market segment that used to rely on C++ is today better served by either Go or Rust, depending on the project.
That said, while I LOVE working with Rust, it suffers from many of the same issues I mentioned for C++ in my comment above when working in a mixed skillset team.
I agree, unless you doing low level stuff where you need absolute control you should use a modern language with proper abstraction just to save time. Most use cases where they use C++ can be replaced with Rust or Go as they aren’t saddled with years tech debt and bloat due to having mantaining backwards compatibility.
Caution: Finding something that one hates more than one’s self does not take away the initial self loathing. Attempting to mollify or subdue the lesser by observation or interaction with the latter may result in something greater than the sum of its parts and oh boy, Jeffery Christmas, now we’re in for a bad time.
You are not logged in. However you can subscribe from another Fediverse account, for example Lemmy or Mastodon. To do this, paste the following into the search field of your instance: !programmerhumor@lemmy.ml
Post funny things about programming here! (Or just rant about your favourite programming language.)
Rules:
Posts must be relevant to programming, programmers, or computer science.
No NSFW content.
Jokes must be in good taste. No hate speech, bigotry, etc.
As someone who switches between C++ and C and besides classes and inheriting what’s the actual difference between native C++ and C? Never really explored beyond Unreals macro heavy version of C++, wxwidgets and QT
C++ is technically a completely different programming language to C, but they share a lot of similarities because C++ is sort of derived from C (and now they’ve both evolved somewhat separately). The main addition at the start was OOP being baked in to C++. A typical C program is often a valid C++ program as well, but there are some subtle differences in a few areas that can cause problems. C++ has a lot of features compared to C, a more complex type system, a big templating system for compile-time computation, and focuses a lot on adding low/no cost abstractions to make writing programs easier without incurring a high cost at run-time… That said many people do still prefer C, often for its simplicity in comparison.
C++ is a superset of C, and C is a subset of C++. C++ was originally designed for the purpose of updating and adding OOP to C.
The main things C++ has that C doesn’t are user defined data types, support of reference variables, function overloading/overriding, built in exception handling with try/catch, inline functions, and C++ has around 30 more keywords overall.
I would say the biggest difference is the OOP focus of C++ where all of data and functions are encapsulated into an object. This helps make C++ more secure and better for writing high level implementations than C.
And namespaces! And strongly typed enumerators! And templates! And type deduction! And…!
Ahh so the whole create a object from a class thing actually works in native C++. So I can create child classes aswel and do cool stuff like casting.
Don’t laugh okay I thought C++ through Unreal Engine was vastly different from native C++ (because that’s what I learnt first)
Never actually used classes when I was playing with native C++. Couldn’t think of anything simple to make that would require it
Yeah the constant stream of critical CVEs affecting C/C++ libraries that get patched on my computer is legitimately frightening. So much low quality (and dangerous) code out there. Maybe if you have a personal project that doesn’t connect to another device… you could be justified in writing C code. Or tiny embedded systems?
Modern C++ is actually pretty good. The language gets knocked firstly because it’s complex, and secondly a lot of people remember the old pre-C++11 days. It’s like a different language now.
But it’s a looong way from being my favorite language. That goes something like Python… by a lot; Rust; JavaScript; C# and then everything else.
At least he looks happy hating on something else
I’m happy so many people despise C and C++. Maybe we can move on from it someday and use more memory safe languages that are easier to read. Languages with usable package managers, linting, documentation generation, IDEs, embedded debuggers, helpful stacktraces, readable errors, sane standard libraries, with less arcane invocations of evil.
Honestly, I hope the linux kernel manages to be rewritten in Rust someday.
Come on. C++ isn’t thaaat bad. It’s actually kind of nice to use coming from C.
I hate fighting its compiler and having to jump through hoops to get things done that’d be simple in Python.
If I’m gonna use a system programming language, I pick Rust. At least Rust provides clearer compiler errors, a package manager, a decent plugin ecosystem, and memory safety. Its runtime errors are a lot easier to decipher than the infamous “Segmentation fault (core dumped)”.
deleted by creator
Is there a way to disable the old c++ features? Or some kind of linter that points them out and suggests the new ways?
deleted by creator
Any suggestions for linter?
deleted by creator
deleted by creator
I’m reading this and all I can think is “yeah, I too would rather lose a limb than let a necrotic infection spread.”
deleted by creator
I hate writing code in either language. But at least what C has going for it is that it’s waaaay simpler than C++. Simple can be a really good thing. Sure, all those cool features can save you time, but they can also be gotchas that will cause bugs.
Though it is a balancing act. Too simple and you’ll make mistakes due to how much you have to repeat yourself or using unsafe equivalents (like using preprocessor directives to mimic features that C++ natively supports).
C sucks to write and take care of memory, but it’s nice for super efficient code for use on smart watches. Samsung ditched it (tizen- native apps written in C) in favor of wearOS (java?), and their battery life is now less than half what it was.
Ruuuuuuust
All this talk of Rust I’m seeing makes me so sad Ada was never given a fair chance.
First time I’m hearing about it. Any fun gimmicks?
Holy hell Java on a Smartwatch?
WearOS is based on Android, which uses Android Runtime (ART) as the application runtime. ART uses Java (or any other JVM-compatible language, such as Kotlin) as the development language, but compiles the app to native code when it’s installed on a client device.
So… Kind of?
C++ was necessary, and truly great compared to its predecessor. But the world has marched on. Rust is the current benchmark.
Depends on the use case, for HPC c++ is still the benchmark.
Yeah, some of the world marches slower than other parts.
I used COBOL to write a small program, and it’s not so bad either. Bonus is that your standards are lowered so much that Java feels concise.
Laughs in ADA
deleted by creator
The most recent C++ thing I worked on (not that recent, like 5 years or so ago) was a fairly new project and the people working on it were really passionate about C++. But it was C++ code that ran as a Python library and was using the official Python C bindings. Not sure why we didn’t use one of the unofficial C++ libraries, but the usage of that C library (and such a fundamental one) held things back. We wrote was was modern C++ (at the time), but big chunks would be a completely different style.
It’s the amount of legacy it’s carrying on that drives me crazy. Many of the implicit default implementations are confusing. That’s where all these “rule of 3”, “rule of 7”, “rule of whatever” come from. The way arguments are passed into functions is another issue. From the call-side you (sometimes) cannot tell if you’ll end up with a moved value or a dangling reference. The compiler will not stop you from using it. Even if the compiler has something to tell you, it’ll do it on the most cryptic way possible. I’m grateful we have C++, it paid lots of my bills. But it’s also a pain in the ass.
My hatred for myself is fully symbiotic with my intermittent appreciation of C++
Boy oh boy, you gonna hate like a sith if you find out how sh*tty python is.
Or bash.
So incredibly annoying too read.
I know that there are use cases for [ ] over [[ ]]. There have to be. Why in god’s name would [ ] exist if there wasn’t a reason to use it over [[ ]]? I’m obviously the one in the wrong by only ever using [[ ]], because [ ] would definitely be better in some type of situations that I’m just not seeing clearly. Right???
I believe the reason is that bash is backwards compatible with sh and sh only has [ ], not [[ ]]
[
is a binary (sometimes a symlink) in/usr/bin
. It’s/usr/bin/[
🤓Solution: fuck backwards compatibility and use fish
Fish might be good for interactivity, but in terms of scripting, just go straight to python. It’s not worth it.
Fish is starting to get more POSIX compliant as of late, the error redirect is no longer
^ /dev/null
but2>/dev/null
[[ is not a POSIX shell feature.
Perl calls to you. Admire its beauty.
deleted by creator
Perl’s unreasonable effectiveness for creating write-only code was part of the joke.
Bash is so bad. I literally use it every day and have written many Bash scripts, yet I’m constantly having to search for how to do things in it because syntax is so bizarre and difficult to remember. Need to do a for loop over lines in a file? You can bet I’m googling the syntax for it. I have a general idea for what it looks like and know what to search for, but no way in hell can I write it correctly in the first few tries.
String manipulation is the absolute worst. Have fun getting to learn the unreadable syntax of most sed and awk programs (the only thing most people have memorized is find and replace). Stuff like “split a string of comma separated ints and add them up” are way harder in Bash than in Python, despite the fact I often need to do stuff like that in Bash. Well, in the terminal anyway. Sometimes I’ll just use Python, but Python’s weakness is executing programs and getting their output, which is nowhere near as convenient as it is in Bash.
Side note, isn’t it weird that for a language where flags like
--foo bar
are so commonly used, there’s no built in or standard tools for accessing flags?deleted by creator
So many footguns. Use python in place of bash.
tbh i would rather use assembly than python.
Python has its flaws for sure (I’m getting pretty fed up with the lack of required type notation, myself), but my point here is that bash is even worse:
Wouldn’t it make more sense to code in c++ or something and compile to assembly?
How much more efficient than a compiler are one really?
Assembly is torture because it has too much math in it
Absolutely wild take, the two are used in completely different contexts
???
You forgot your indentation and a third party docs is outdated. Now try and debug it with this error message:
Not enough value to unpack (expected 2, got 1) (not any stack trace btw) documentation was terrible. :D
Huh? The Python Stacktrace is great. What kinda fucked up library were you using that it prints the error code instead of raising an exception?!
Also don’t think outdated library docs are a fault of Python 😅 In much the opposite way, I’ve found Python’s standard library to be really great, reducing the number of random third party libraries needed. (Looking at you, JavaScript)
Sounds like a problem for someone who is writing the code on a toilet paper or whiteboard. Most people have some sort of hackable editor/IDE that handles the indentation and code blocks.
Just don’t use libraries which print or log exceptions without raising it :)
What don’t you like about Python?
I’ll throw a real petty one out there… indentation.
The syntax, the syntax-highlighting, venv creation and usage, having to import everything even inbuild types, have fun checking what a third party library has for functions and what they need :D Async is a hecking mess, documentation is another (bad) story.
I’m sure the syntax highlighting is entirely dependent on what editor you use, and is not a property of the language itself.
I love and hate C++ it’s my self abuse love language.
Love: wow I’d like to make a project that does Y in cpp. Abuse: actually working on it.
I love c++.
That is all.
Me too. Have been programming in C++ since I was 10 years old. The first programming language I’ve learned and the one I still love using today where appropriate for the task at hand.
Some people have weird fetishes too, I won’t judge.
That’s okay, everyone has the right to be wrong.
Pfft. You’re just afraid of pointers.
And I love references. Bring on the Rust lifetimes!
It’s not a right if it’s wrong
My dad wanted to me to become a developer. He bought me a computer so that I can code but instead I was introduced to the world of porn. Today I am successful Porn director who has worked for many big name companies.
Thanks dad🥰
Hey, cast me! My perversions with the computer jacks and slots is unmatched!
I am almost a year into a job where the main piece of software is a mix of C and C++ and there is no documentation, hardly even code comments. Some of the files say they were created over a decade ago. Just pages and pages of C code with no comments and no external design docs.
If I search my local copy of the source for .c and .cpp files, I get 1,485 items. But it’s not that bad because many files show up several times in different directories with the same name. :D
And you know, I HAVE been feeling better about myself lately! (The job is actually a perfect fit for me, other than the humongous scary & opaque code base)
You’ve got your work cut out for you
Although I haven’t used it since college, I actually liked C++ especially once I understood pointers.
Everything is fine within the scope of a college course or project.
Where C++ breaks down is large, complicated projects where you colaborate with other developers over multiple years.
I worked in C++ for almost a decade, and while there were a few good projects I encountered, most suffered from one or more of the following problems:
So would there be a happy medium between C and C++? A C+, if you will.
Yes, use C++, but with
extern "C"
for everything so you can easily interface with other software. That limits you to no classes or namespaces, but internally you can use smart pointers, vectors, maps and actual strings.C-+
-0.5 + (float) C++
Rust
I’m going to go ahead and say that’s not really a superset of C. But, yes, that’s the way everything is going in practice.
No not literally but you got it lol
There is actually a C+, also called “orthodox” C++ https://gist.github.com/bkaradzic/2e39896bc7d8c34e042b
Thanks! I figured someone must have tried it.
Just use C. It solves all those problens given the most complicated feature is pointers and those hard aren’t to understand.
While C is certainly better for some problems in my experience, it too is very hard to use in large projects with a mix of developers, and it is unsuitable for most higher level applications in most companies.
I think C has its place in the world still, which is mostly confined low level embedded, kernel space and malware. I do believe that the market segment that used to rely on C++ is today better served by either Go or Rust, depending on the project.
That said, while I LOVE working with Rust, it suffers from many of the same issues I mentioned for C++ in my comment above when working in a mixed skillset team.
I agree, unless you doing low level stuff where you need absolute control you should use a modern language with proper abstraction just to save time. Most use cases where they use C++ can be replaced with Rust or Go as they aren’t saddled with years tech debt and bloat due to having mantaining backwards compatibility.
C++ is fine. I’m fine. It’s all fiiiiine
Caution: Finding something that one hates more than one’s self does not take away the initial self loathing. Attempting to mollify or subdue the lesser by observation or interaction with the latter may result in something greater than the sum of its parts and oh boy, Jeffery Christmas, now we’re in for a bad time.
I guess that’s how Java was born.
I really don’t understand the hate that Java gets. I would use Java any day over C# if given the chance
Java was conjured, not born.