Assembly isn’t really faster than C in many cases, although it is in some cases, C actually compiles to assembly basically. The speed ups you get from assembly come from the fact that you can hand optimize some things that compilers miss, and it can be useful sometimes, like when writing a very high performance part of software like a game rendering loop or something.
Python uses 10x the memory but probably 100x-1000x the CPU cycles to do the same thing. Also using libraries written for interpreted languages is going to bloat your memory footprint where c libraries are tiny and efficient.
Memory leaks are an issue with all programming languages, although some use what’s called a garbage collector to handle memory which can be okay with some things but terrible in other things like real time software, operating systems, video games, or just anything you don’t want to hitch and lag and run like a turd. Garbage collectors aren’t some magic fix to memory management, if so they would be a part of C. There are huge tradeoffs to not managing your own memory. If you are using c with objects, then you are pretty safe. The object oriented nature of the language makes it very easy to manage memory. That’s mostly what it’s there for besides reducing the amount of redundant code, if you are using inheritance like you are supposed to. This is called a node graph. You store your data under objects so when you want to remove your data you just call a recursive free function on the highest parent object.
The difference really is that C code is efficient, in the sense that it doesn’t waste anything. Every thing that seems low level about C is there for a reason. It came from a time where it was important to write code efficiently. Where every MB and cycle counted. Where having a garbage collector freeing and potentially crashing your operating system was unacceptable as well as extremely slow. It’s still slow btw, because programs have scaled with the ability of hardware to run it, so garbage collectors are still mostly as terrible as they always have been.
C is only low level in the sense that it actually runs on the hardware. There isn’t layers of stuff in-between it and the hardware. There is no good reason to do so, outside of maybe security in some context. You don’t want web resources running on your hardware directly.
All the other stuff that comes with modern languages is mostly nonsense. Type checking is for lazy programmers. It multiplies the time needed to do an operation. There is no good reason for it to exist other than programmers being bad at their job. C is loosely typed btw. It checks types in the compiler where it belongs. If your android phone was written in c++, your battery would last for days, and you could play games on it for hours, and everything would be extremely fast, nearly instant loading of stuff. The reason we pages were written in JiT languages was mainly just for comparability across many different types of hardware and browsers. They were also relatively small programs. Scripting can be useful sometimes, garbage collectors can be useful for script kitty stuff. It has no place in mainstream software and definitely not in operating systems. Google went from “Don’t be evil” to let’s build an entire operating system out of java and spyware. It’s not good. At this rate we aren’t even going to have guis anymore in 10 years because no hardware will be able to run it without destroying itself, and needing to be plugged in constantly, and $1000 worth of ram.
squaresinger@lemmy.world 5 months ago
Perfect C is faster than perfect Python, same as perfect assembly is faster than perfect C.
But in the real world we don’t write perfect code. We have deadlines, we have constantly shifting priorities, we have non-technical managers dictating technical implementations. We have temporary prototype code that ended up being the backbone of a 20 year project because management overpromised and some overworked developer had to deliver real fast. We have managers still believing in the mythical man month (“If one woman can make a baby in 9 months, 9 women only need a single month to make one”) and we have constant cycles of outsourcing and then insourcing again.
With all that garbage going on we end up with a lot of “good enough for now”, completely independent of “laziness” or “low-skill” of developers. In fact, burnout is incredibly common among software developers, because they aren’t lazy and they want to write good software, but they get caught in the gears of the grind until they get to a mental breakdown.
And since nobody has the time to write perfect code, we end up with flawed and suboptimal code. And suboptimal assembly is much worse than suboptimal C, which is again much worse than suboptimal Python.
If your Python code is suboptimal it might consume 10x as much RAM as it needs. If your C code is suboptimal, it memory-leaks and uses up all RAM your PC has.
If your Python code is buggy, something in the app won’t work, or worst case the app crashes. If your C code is buggy, some hacker just took over your PC because they exploited a buffer overflow to execute any code they want.
The main issues with software performance are:
DarkAri@lemmy.blahaj.zone 5 months ago
Perfect assembly is marginally faster than perfect C, but perfect C is way faster than perfect python. You have many valid points though. Also C can be very safe if you don’t use the standard string libraries and stuff. It depends on what you are trying to do. Sometimes it’s worth giving up safety to have a better program.
squaresinger@lemmy.world 5 months ago
I’m talking mostly about corporate software development. You know, the kind of projects that run for 20 years with multiple teams and half a dozen cycles of “let’s outsource everything” - “oh, it sucks, let’s insource everything” - “oh, it’s expensive, let’s outsource everything again”. Doing that in C without major issues is rare.
In that kind of context, safety is everything and performance doesn’t matter.
DarkAri@lemmy.blahaj.zone 5 months ago
This is why I don’t run corporate software if I can help it. Ain’t nobody got time nor the battery capacity for that.