Creator of Linux Linus Torvalds explains why there is no language he knows of that's better than C for writing optimized code.
runtimerec.com
jobs.runtimerec.com/
#embeddedrecruiter
Creator of Linux Linus Torvalds explains why there is no language he knows of that's better than C for writing optimized code.
runtimerec.com
jobs.runtimerec.com/
#embeddedrecruiter
Even Beethoven wrote his Symphony in C
I heard the bible was written in C, before it was compiled to english.
@@kattihatt You didn't really get the joke, did ya? :-)
@@ruxandy lol actually not. Atleast not completely.
@@kattihatt famous symphony no. 5 is written in *C* minor key
lmao good joke
I got a C in math,and thats something my parents care about
Lol
You should've got C++ and your parents would have been happier
@@b213videoz doubt it, cpp is for the proctologist
You are so funny
Congrad! you got good responsible parents
My embedded systems professor once said, " I know assembly better than English".
Pls say hello to your professor for me.
My grandma is lit
allow me to doubt it
Was English his native language?
Your embedded systems professor... if you don't mind my asking, what do you major in and what university?
When I read C code, I know what Assembly language will look like and thats something that I care about ... LEGENDARY !
Wait you don't ?
Brian Kernighan really knew what he was doing Unix and C despite trying to be replaced multiple times since their invention are still the gold standerd
me : What the hell is Assembly Language!!! 😆😆😆
oh i also know in c++ how the assembly looks like, but to be honest, you want to stay away from there! for example: 2 classes with inheritance will basically create tables of function pointers and based on which constructor function is called this "virtual method table" or VMT will be filled with different jumps to different places of or code... and i'm not even speaking about the memory layout....
@@NiekNooijens You can know it for even higher level languages than C++, in the end its having the understanding of how things really work that is important, no matter where you code in. Its good if you think of the costs when opting to use virtual functions and then reason about it if its really needed or acceptable to pay the cost. The problem with C++ and OO languages however is that as the abstractions accumulate, poor choices get cemented in and become the foundation for a new round of code. Choices once made, are hard to revert as everything is knotted together. Sure the code is abstracted, but that hardly matters as everything is still tied on the interface and architectural level. Its a code oriented approach and that is why OO is a scam and a dead-end approach to software development. Programming is about data, not code, so unless job security is the primary goal, stay away from OO or use it in only limited fashion as a tool to organize large domain blocks.
Programming in C in my university courses was like driving a fast car with no airbag on the high way. It felt dangerous, fast and fun!
Love the analogy Lorenz
😊
C was maybe fun in 70's These days C sucks compared to majority of programming languages. Maybe not compared to Java because Java sucks even more.
@AL Don't get me wrong. C is a great language for doing low-level stuff and when performance really matters. Still my experience with C is that it is not exactly fun. For fun and 95% of applications I would rather go with Python than C.
C is a skill rather than just another programming language at this point. C doesn't need to prove its worth any more.
C was the first language I mastered, and it made it very easy to jump to Java, C++, C# and even x86. Even with no object orientation, it helps build a strong foundation.
I learned C very early with microcontrollers. Additionally learned C++ which was an easy transition. Though learning to program object oriented when you were programming procedural for years was hard. But going to high level languages like C# or Java is a pain. I have real trust issues to shift my freedom of memory access towards the interpreter. Also to have just a library for everything and just use them is hard, when I don't know whats happening in the background. I just feel disconnected from the computer. So I try to stay away from those and keep programming near the hardware. :)
@@oODomeeOo What kind of projects do you do recently or currently
u better leave C and start writing full assembly. I love writing 1000 lines of code so as to program a simple for loop
@@tismanasou Assembly is very good to know as it teaches about the machine. But I wouldn't say it's very useful in this day and age. But each to his own.
@@rodholseth6354 No dude, assembly all the way, I sometimes write in 8085 instruction set for that extra vintage vibe
I love C. I used to write C. I would give almost anything to find another C coding job. Seems like no one writes code anymore, they just glue together frameworks.
Yeah, so true. SW in 2020: we need to implement one function that could be done in 50 lines of C but instead let's use some gigantic frameworks with a ton of dependencies and then hide the mess into a trendy container for deployment.
You can in the embedded world
@@mmaranta785 True, but embedded systems jobs seem few and far between. Seems like 99% of developers are connecting databases to browsers.
Some of us still do embedded. Sometimes I do miss features of modern languages; only thing in C is that you have to be mindful of the issues you can cause. Rust is a great iteration for a system language you get documentation, unit-testing, direct memory access.
@@melvinthomas8527 I did a bit of C++, and I did missed reflection. However, when I went back to C#, I missed a lot more.
You don't have to use, 'nothing better than C' click bait. Just use Linus Torvalds anywhere in the title and you'll be fine.
Yes, and he's saying it's the lang he prefers for doing the type of work he enjoys doing. It's not the best language for everything.
@@fredflintstone8048 that's what a click bait is. The title says something else than what the actual message in the video is
@@shinej11 Yes, I do know what click bait is. I'm not sure why you would assume that I don't.
@@fredflintstone8048 oh of course you know, I can C that
@@fredflintstone8048 it's not just the language he prefers for writing OS. It is objectively the right tool for this type of work. The whole rant teenagers tend to have around here about which language is the best is just silly. Everyone who actually works in this industry knows you always pick the right tool for the job. In the end, it doesn't matter what language you're using, if you're a crappy programmer, you'll make a mess of nearly everything.
The title does not justify what he said. He’s talking in terms of hardware and low level programming.
Ever heard of a term "clickbait"?
Yeah but it's always good to hear from the man
tbh, it's clearly told in Torvalds biography... The man working only with kernel that literally interact with hardware (at least with Linux, but probably in Git either)
@@ShaferHart true
We clicked though
Wrote my first C program in 1978. It was written on a Datapoint computer using an unofficial C compiler written by Mike Green who used to work at Datapoint. When the IBM PC came to life, I wrote many communications program in C (using the Lattice C compiler). Wonderful language (and I’ve learnt over 30 languages since I started in ICT in 1967).
You have been coding more than I have been alive insane But today with C I can’t find any job I got no chance against giants who have been writing for decades So I gotta go with python or JS 😢
Kernighan and Ritchie's definitive 'The C Programming Language' 1st edition was published in 1978. You must have been programming in C as it was borne?
@@ricknash3055 Yes. C was created in the early seventies; the book was the "official" bible on how to write programs in C. I bought it immediately. I was lucky enough to be given a beta of a C compiler written by a person (Mike G.) who worked for a computer manufacturer located in Texas (this was a personal work by Mike, it was never released). I started playing around with it and immediately liked this language. I already had experience with more than half a dozen other languages but nothing was even close to what I imagined I could do with C. In the end, it became my main language to write hundreds and hundreds of programs, from applications to utilities. I even wrote complete data communications programs like emulators and comms servers in C. I could not have done this without C and the various compilers created by some very good companies and persons.
Sir, I read K and R but had the question how to provoke EOF in say putchar getchar programs? You can't type eof because getchar will see it as ' e'. I thought of prompting the user to type a selected char that then you define as -1, then ask the user whether they want to end the string or use the char.
@@goedeck1 Run a simple test loop... #include int main (void) { int c; do { c = getchar(); } while (c != EOF); printf (" End "); } The compile and run it. Type some characters, then do Ctrl+D. See the result. Run again, type some characters, then do Ctrl+Z. So, no need to checking for characters but note the difference between Ctrl+D (program continues to run and prints the end message) and Ctrl+Z.
After 40 years of programming, I can confirm that he is correct.
Well said.
@@johnc3403 hi C
would you say Rust is becoming a contender to C now? Perhaps not designing operating systems but you can at least write performative hardware apps.
@@369seeker9 There is a whole OS written in rust though, very performance as well, although very limited
Did you saw Zig programming language?
"Nothing better than C" *TempleOS and HolyC enters the battlefield*
that's only for true god worshipers, normal people won't understand that.
Holy C is the only language what are you talking about sir?
But holy C if only for whitest of the white christians
Holy C was created with divine intellect, which is a component Linus Torvalds lacks. This is due to the fact that Linus failed to write his own compiler that compiles just in time and ahead of time, and instead resorted to porting GCC. Linus wouldn’t understand
man those glowing things got him :(
C is for cookie, that's good enough for me.
As far as I'm concerned, you've won this comment section.
Oh cookie cookie cookie starts with C
C stands for Cuchi
But is it soootable?
@@nu11ptr increment the cookies
C language is simple, clean, efficient, fast, and just flexible enough to express any idea you have in mind. That is the beauty of C.
@@Wariowa345 Literally thought the same lmao, W
yes, agree
No its not, it doesn't even a build in ability to make high order routines or data structures. You need to hack around with macros or go trough the burden of implementing your own generic types, all of which just leads to you making your own esoteric programming language on top of c, wasting time that would have spend better programming in a language that has those features build in aka c++.
C is not simple, is definitely not clean, it's not efficient cuz it takes dozens of line for something that could be done in half with languages and it takes much longer because of debugging
Everything is fine till there's a segfault or memory leak in an enterprise codebase
When I was younger (in the early 90s) and wanted to start coding on my 386, I asked my father who at this point has been in software development for over 30 years (IBM 1401,360/370): "Dad, what language should I start with?" He told me: "Start with assembler to understand how the machine really works. After that, you can continue with C/C++ or whatever you prefer." I followed this advice and ended up as embedded system dev, working on ARM Cortex currently. And I'm still using C/C++ and asm for some DSP routines.
Having written assembler and being and embedded engineer you deeply know the sentiment of what is being said here.
Have you had a chance to dabble in any Rust?
You are self thought?
@@nesa6582 many great programmers are self taught and math / physics majors
@@satoshinakamoto7253 I'm self taught but my dad isn't a programmer, because of this I started my programmer's path as webdev at 19yo
I learned C\C++ before anything else. Was a good starting point for me and springboard.
What are the references C vs C++ vs C# ?
@@norpriest521 c : low level language, close to hardware, great for memory management, OS, hardware. C++: medium level language, takes some C features, but it's object oriented. C sharp(#) : high level language, object oriented like Java. They dont compile into machine code.
@@norpriest521 He said enough but for learning C# you need to sell your soul to Microsoft.
MR MEME "assembly is low level language? please tell me you're joking, binary is low level, assembly is middle level, but assembly is lower level than C, both C and C++ are high level, C# is ultra high lvl" kappa
hahaha these comments are awsome
Enjoyed the timing. Ending on, "and that's something I care about." -- powerful way to state preference rather than talk about something as if what is being said is absolute fact.
@Dirk Knight 1. The Linux kernel is fast though 2. Just use a lightweight distro, e.g. Lubuntu.
Misleading "Yellow paper" style name of video. :) Linus didn't say "Nothing better than C". You cut this out of context. Talk was about specific task like "OS development" and choosing good tool for this task. Good quote: "If you think like a computer writing C actualy make sense". :)
yeah and nowadays thinking like a computer becomes obsolete as the likes of agile programming, scrum, etc time to market is the most important, that is why python, to the pragmatist, wins!
@@user-tn3fo3pj2x Obsolete for user programs only, not for operating systems and not for the dozens of chips inside your PC and inside your car.
"...think like a computer..." I knew linus was a robot
@@user-tn3fo3pj2x I think the only reasons python ever got traction, despite it objectively awfulness and unsuitability, is that it got adopted by non-programmers in the field of Machine Learning and that it functioned as the perfect artificial reason to do 100% unit test coverage (as the language is that fragile). A tech trend mixed with a religion, those are powerful forces, it has nothing to do with pragmatism. And you would not claim it as a reason if you knew other languages that are far more pragmatic, without the fragility. I think it so bad, that I rather have no work than code in Python. There is only one language I know that is still clearly worse and that is Perl.
@@TheEVEInspiration Python was popular way before ML came around. Its a 90s language.
Videos like this really should have the date in the title/description, or at the very least the year
He's so right. Nowadays people tend to just completely ignore of how optimized and efficient the code is, despite the fact that the speed increase of modern computers is decreasing with each generation. People write unoptimized code and think it's okay. In 90-s we thought with the computers getting faster and faster we will get applications that will do stuff for us so much faster and instead we get a bunch of unoptimized code that barely matches the speed of applications of 90-s...
That's so true! Sometimes, when my computer is taking an age to complete an operation, I'm thinking 'Why the hell is it taking so long? What on earth is it doing to take so long?'
It's optimized because its borderline machine code. The more low level your code gets, then technically yes it is more optimized. I've been down the path of writing everything by hand with no libraries or dependencies (HTTP servers, database pools, auth API's) and I can tell you for a fact that you are creating nothing but problems later down the road. Enterprise doesn't always care about speed when it comes down to nanoseconds. It often cares if you can easily move your codebase to a new platform and if others can pick it up quickly. I'm not trying to dawg on C. I love C. I'm just saying it has its use cases (aka stuff really close to the hardware level). I don't need to access the A register from my API. Another thing to point out is C is processor specific, so it can be a nightmare trying to build separate environments. On the other hand I know that the JVM will run on almost anything without a fuss.
@@64BitLamp Bro, you just wrote a wall of text that can be summarized to "I don't care about the speed of my application as long as it just works somehow". No offense, but it's a deadend that sooner or later will cost us dearly.
@@vladrootgmailcom I never said you shouldn't try to optimize your code, I'm just stating that sometimes other things can take precedence. Are you telling me you find big O notation of every algorithm you've ever written in your life (I hope not). It's simply about weighing the time required vs the amount gained aka opportunity cost.
@@64BitLamp of course I didn't - I'm a programmer, who being paid for results just like you, but that's the problem. We aren't given a proper time to optimize - and this leads the whole industry down the drain.
"when I read C, I actually see all those green words of the matrix" Linus Torvalds
I learn C as my first programming language. It is very clean, clear, and simple!
I fall in love with C
@@n4rfy477 C *is* simple. I've been writing it for 27 years, and it's always been simple. Bad code is what's not simple, and you can get that in any language, though admittedly, it's probably easier to write bad code in C.
coding in C is actually easy.... but developing or deploying data structures in C.... something I don't wish to do.
@@omshree901 making a hundred bugs in 10 lines of C code is easy, yes.
I agree with you - it gives you a deliberately minimal set of tools, so that when reading and writing C programs you know exactly what is going on.
I like how the text shows when he's saying something important. More channels should start doing this.
People get a bad impression of C because of boilerplate code. For a long time I never got into game programming because of how many lines of code it took just to create an OpenGL window and render a basic "hello world" triangle on the screen. But once I abstracted it all away into a nice header, now programming in C became fun again.
in this , important thing is "for developing os"
But what if I used c to develop a website or a Windows app is there any advantages or disadvantages?
@@godwarrin There are. For example, apps written in C can crash really easily. You need to handle all the possible situations by hand, or use many libraries and learn them. Also you need to manually manage the memory use, which can cause nasty memory leaks and make your app crash again (or worse). On the other hand, languages like Java or C# have been designed to prevent mentioned problems (as possible), but of course you pay for it with lower performance, at least in some cases. However, most of the time it is much better to use high level language (Java / C#) and if there are any parts that need to run very fast simply write them in C. Such approach can speed up the development a lot and deliver application of higher quality.
@@tetst_54546 🤓
@@tetst_54546 But not for Linus Torvalds, for him, he can do anything with C, and the some more is rock solid stable.
@@stackerliew True. However, if we relied only on Linus, we probably wouldn't have so many applications.. :D So yeah, we need tools for less skilled developers too. But Linus is a great inspiration for me, and I have been Linux user for more than 12 years now! ;-)
Love this! It's so true! C is an amazing language and Torvalds remark, being able to visualize its outcome resonates with me. We did C (no + or visual or anything then) just simple C programing for composer input languages for music composition at the Center for Contemporary Music (CCM) at Mills College back in 1983/84 in Oakland, CA. Those were amazing times and great memories.
In the past 45 years, C has been the choice for development of operating systems. C allows for a bridge between hardware and software which is a role of an OS.
Really it is the choice for all things that exist outside of popular architectural paradigms. AI, games, realtime analysis software, etc. are also typically all written in C because OOP does not play nicely with lots of threads, data, or time. Military software is also written in C because it is easier to guarantee. The F-35 software is a 10-20 million line C project (with some C++).
@Sirin Kalapatuksice Rude. Build engine (Duke Nukem 3D, Shadow Warrior, Blood, Redneck Rampage), id Tech 1-3 (Doom, Doom II, Heretic, Hexen, Strife, Chex Quest, Quake 1-3, Quake Live), and Jedi (Star Wars: Dark Forces, Outlaws) are written in C. GoldSrc (Half-Life, Team Fortress Classic, Half-Life: Opposing Force, Counter-Strike, Ricochet, Deathmatch Classic, Half-Life: Blue Shift, Half-Life: Decay, Day of Defeat, Counter-Strike: Condition Zero, Counter-Strike Neo, Counter-Strike Online) was written C, C++, and Assembly.
@Sirin Kalapatuksice Imagine thinking Quake 3 it's shit lol. You are just delusional, go home kid.
@@StradexEngine ignore him, he is a typical troll
There is no reason today write everything for OS in C. There is a historical reason only.
ELI5 version: When linus looks at a computer screen, he sees it in The Matrix esque green scrolling characters.
The man, the legend.
When the Boss speaks, you listen ; )
One of my favourite languages the other is assembly. Totally understand his response when it comes to working with hardware you need a language that works at a medium or low level
there was a time C was called a high level language
@@sakon4466 C is high level language, it sits on top of ASM.
@@marcb907 so you're one of those people who like to think that binary is low level, assembly is mid level and C is high level, right? then wtf is C#? ultra high? what about python?
@@sur4yC, is a high level language. Any language that is NOT Assembly is high level. 🤦♂️
I know c++ but want to get into programming hardware (through software ofcourse) where and how should I start? Any suggestions are most welcome.
Yes until the compiler starts using architecture specific instrisics and vendor specific instruction sets. The you no longer can tell anything
He is like Neo from Matrix. He can see through high level programming language and deduce low level code.
C is NOT a high level programming language 🙄
Depends on the context.C is high level compared to Assembly
He is a human compiler or interpreter.
He can C through high level programming
@@georgplaz Yes I agree, its definitely not as high level as Python, but from the perspective of executable binaries and OP codes and assembly languages, C is relatively high level and human readable :D. Come on man, I am just kidding around. Cheers!
Walking philosophy, Can't stop Listening to his talks / conferences ....
Thank you, Linus. Unemployed senior C developer for almost a year now here. Your talk makes it easier to move forward.
Multidimension arrays are a real nuisance in C
I learned object orientation with a C (!) program. This program had structs containing pointers to arrays of function pointers all over the place and it took me a while to figure out what it was good for. After getting in contact with C++, I suddenly realized that what I saw back then was nothing than virtual functions and inheritance!
He is talking about writing code for operating systems, where C shines by itself. At other areas OO languages helps to organice the code, although starting with C++ is a kind of nightmare
it wasn't until i decided to write a desktop script for my Kali linux in PHP that i realized that programming languages DO differ and it is imperative to choose the right one for your project. so i agree with him,if you want to build an OS just go for C. in PHP a thing as simple as taking some inputs from the user is unusual since you have to "read a file" and then add that line to history manually xD
PHP is the wrong choice though. Always.
It is not the fault of PHP. That is how the implementation of basic printf() and scanf() io functions is implemented in C. I didn't know this until I read some books about linux system programming in c. You have to call the kernel commands and do a ton of stuff like memory management to do io and every io devices are treated as a file in linux systems. In the case of C they implemented this as stdio on the standard c library which comes preinstalled with linux system. By default your c program is linked to the standard c library if you include header files like stdio.h. I think you can get one like that for PHP from composer or something.
@@anvarnasar7716 i never said that it was PHP's fault. It is perfect for what it's designed to do, it is the entire point of my comment :p also i have started to learn C since i wrote this comment and i just love it :p
@@arminharper510 I am also a C and C++ programmer.😃
Thank you! Assembler - that is a blast from my childhood. I was lucky. My dad brought home all kinds of hardware.
*Assembly
Aw shit, the entire Rust community is on suicide watch
well no i prefer Rust more than C, altho i respect a guy as great as Linus Torvalds edit: spelling
Rust in Linux kernel is a serious possibility today and even Linus is open to that.
Good!
@@KidB. if by today, you mean "in 20 years at the very least" and if by serious you mean " as long as Rust is the new cool thing if another 'cooler' language does not comes up"
@@KidB. Tks for telling us. do you have any ref to this?
if you look really close you can notice he is signaling "Rust" in morse code with his foot
I could not possibly agree more, in all regards. Except, of course, that I'm also very, very comfortable with a soldering iron.
Legend !
why linus asking himself?
Kurt Russel pouring whiskey inside the computer, thats "interacting with the hardware".
Damn, this makes me nostalgic about the time in the 90's when I was writing C code for travelling salesmen, TSR's and stuff like that as a teenager. I forgot the name of the IDE (it had a blue background with a DOS like look) After that have coded in C++, VB, C#, Java, Scala, Haskell, Js, Typescript, Python, Ruby but yeah I still remember reading the docs for each function in C listening to heavy metal back in the day.
Borland Turbo C, perhaps?
Turbo C
All firmware engineers are nodding in approval
Nope. After writing embedded Ada code professionally you will hate reading C reference code and all of it's obfuscation of the logic.
When you google "Nothing else matters" and KZhead gives you "Nothing better than C". That's when you know you are nerd
As a Denis Ritchie said: C will be the language that will be very hard to replace in low level programming
I don't see anything remotely close to C except machine assisted coding but that itself will spit out C code
@@lanceharvie6933 exactly, thx for fix)
I am curious if any CS algorithm books discuss how the Linux kernel uses C's extension of container_of to "inside-out" data structures. If you naively look at older algorithm books, you would think you would implement a data structure and its such as a red-black tree and then expect the user to use pointers to objects that implement some api for red-black operations. But in the Linux kernel, an entire red-black tree operation api is NOT implemented. Instead the developer is expected to implement many details themselves. One embeds a piece of the data structure as a field of a struct and then uses container_of when given that field member to work up to the object itself. It's very elegant.
I agree with him 100%. Many programmers don't know the link between source code and what that looks like when it's compiled and then when it's assembled. Many programmers don't need to care about that level of detail because they're programming in Java or interpreted languages and in fact many programmers don't have the knowledge or skills to understand machine-level programming. They don't know about instruction-sets or memory management. Web Services is so abstracted from hardware that it's just not necessary to understand anything about hardware interaction. It doesn't mean you're programming is inferior if you're not on the hardware.
1:12 "when you... I mean, when compilers", ha ha. People, compilers, whatever...
back in the days, there were people who actually did the work compilers do now...
people are food compilers.
@@blackcitadel37, we compile food into code? Pls don’t just tell me my code is shit
@@jerrygreenest actually, in german, another word for shit is "Kot". which is pronounced almost exactly like "code". So reading your comment aloud is.. confusing, while making a lot of sense..
At first I thought the guy asking him the question might have been a young Linus Torvalds. I guess having heard that answer from his future self, he focussed on C more strongly and achieved greater things.
@statorworks 345 I'm glad I wasn't the only one who thought that, or rather I was..
@@Deschutron, just watch "The Egg" and don't ask weird questions (of course you was)
@@jerrygreenest galactanet.com/oneoff/theegg_mod.html Oh wow, what a great twist to add to the idea of us all being the one soul via time-travelling reincarnation! I can't wait for Linux to grow up and write its own OS.
I thought exactly the same until the younger person started to speak. underrated comment
Assembly 'i took that personally '
You are a great inspiration without any doubt ❤❤.
Never learned C, only ever learned BASIC before deciding that programming wasn't really my main interest. Still, I don't have much trouble reading C and getting a basic understanding of what the code is doing. It's almost unavoidable that you will have to look at some C code and build processes while dealing with Unix systems for 20+ years. I would have absolutely zero idea what a block of FORTRAN or COBOL code is doing, and no hope with assembly or machine code. The fact that someone proficient in C can do almost anything with it, and a layman can still look at a block of code and decipher a good deal of it - that's a great language. Maybe someday I'll get off my ass and learn it when I have nothing else to do.
Depends who wrote the code 😂
gcc -S stops the compilation process at x64 assembly, from my vague memory. I would take every C code and bring it to assembly and it just made perfect sense.
Totally bro.
Embedded systems based on assembly language and machine code. There was involved in microprocessor and microcontroller and microelectronics
All of Tesla's autopilot is written in C. AS it has to be super efficient in interacting with HW, and milliseconds do count. The have even created a custom made C compiler as well.
Two take away sentences ..."If you think like a computer, writing C actually makes sense" and "If I read C I know what the assembly language will look like"
And that’s why assembler (System 360/370) and C were combined into one class in my undergrad.
Pure gold! I always loved C, but never really knew why. His words made me understand something I have subconsciously felt all that time. When you write C code you KNOW exactly what the computer will do. When you write code in some fancy new language, using annotations and stuff, you HOPE that it will do what you think it will. It's a difference between knowledge and faith. And I prefer the former.
I'm sure you do. But I feel much more comfortable when I know exactly how the program manages memory or when it allocates and releases various resources. I'm not saying C is the only language that can do that, but it's my all-time favourite.
Full interview??????
I am learning programming and I have a question. Given the existence of rust or other languages, is his response still up to date?
It depends on what you are doing.
He didn't really say that there is "nothing better than C", though that might have been what he meant. He simply said that C does something unique, specifically in regards to OS development, that he values and therefor he prefers C.
I get what he's saying. I write hardware specific code for embedded controllers and c is my language of choice for that.
Mad Respect for the man ...
I had a project where we need to develop a small operating system in C++. Altough OOP was great to reduce the complexity of the internal structure of the components i would rather choose c if will ever attempt on such project again.
Doesn't C++ have C functions?
The funny thing is - if you've ever started from the ground up - trying to build your own disassembler or assembler/compiler - or building kernel primitives in your own OS - you end up converging upon the same constructs formed in C anyway. LOL The language is just elegant and efficient.
Having written about 12000 lines of Zig over the past year, I think it's a strong contender that maintains these aspects of C and in a lot of ways surpass them, removing many of the footguns of C without the complex macro system and memory management paradigm of Rust.
he just means for interacting directly with hardware, which is true. This is also why most compilers and the JVM are written in C/C++
True! I agree 'C' is required for best.
I agree even though I like the concept of classes at least, but not the fashion to think everything in object oriented terms. Even inheritance is something i prefer to avoid.
I agree with you. I quit Rust mainly because it supports OOP in the language explicitly, and when a language does that, people *will* start to write OOP, and it ends up with a bunch of mess. It is possible to do OOP with C, but no one does that because the language intents to let you think about the CPU, rather than abstractions upon abstractions. (Using "classes" is not the same as OOP)
@taxerap8498 You should check out Ada. It had object oriented design (not oop) in the 80s. It was also designed for embedded use and to be highly maintainable. Ada is actually safer and easier to use than Rust too. I'm not really a fan of object-oriented or functional programming. Imperative programming is under rated .
I got into programming with Java and learned C a bit later on. I mean pointer arithmetic can be confusing in the beginning, but once you get into it and understand what the code really does it's so beautiful to actually program the computer and not some abstract concept. You will never want to use Java again xD
Pointers are magic once you get your head around them.
You clowns fanboy over tools (programming languages are tools). 🤦♂️😂
i wrote my first program in c as a student back in 2000, learning c and also learn with c++ too, and then graduated working in samsung to code their electronic, with c, and then everything is change, switching to learn web app, and in year 2022 after watching this, i belive i cant continue to enjoy c, c++ because im living in 3rd world country :D, but for me, c is giving me a good fundamental of coding . Should i go with rust and webassembly now ? i dont knowwww.
C is the mother of many things in computing.
The main Mutterficker of programming languages is Algol.
The kernel is rusty now tho
Maybe after several years we'll see C++ included.
@@charlieking7600 nope, he Linux specifically shoots down proposals to use C++
The problem with C++ is hidden allocations, the things you don't see, it’s the tendency to write complicated code for simple tasks. on the other hand, C++ is good for complicated code. Its about finding the balance. A C++ string is abstraction of methods, data, memory management, a array of char, is just a array of bytes.
That's only really true if you use the STL though. You can choose to write C++ in the style that I call "C with classes", where you only use built-in language features like classes, namespaces, lambdas, templates, etc. and avoid using the STL wherever possible. I agree that you can accidentally write over-complicated code with C++, but I think a big part of writing good code is the mindset going into it. If you're writing a really simple application, you need to go in with the "C programmer's" mindset, meaning you utilize more basic language constructs instead of shoehorning classes, lambdas or templates into the program.
@@jjl772 I don’t think templates are bad, after all a template is way to make new classes by inserting stuff into it, I’m sure the code becomes bloated, (size of the code), I don’t think it impact speed. Names spaces, just a quick way to rename a bunch function variable, there nothing really wrong with it. Lambdas can be bad I have not looked into this, any function you create will always produce some overhead, but then again it becomes a question is your code readable, or is it not, if doing lot of copy & paste coding, you probably should be using a function or methods, or function pointer or whatever, it all depends. It’s not that lots of code is bad, or little code is good, its just that lots of the same, often result in some of code not being fixed or updated, and so it results in bugs. An example of more code being better is when you unroll loops, remember its not the number of lines on the screen that makes a difference, it’s what being executed that does..
@@kjetilhvalstrand1009 Of course, I'm not saying templates are bad at all. I personally use templates in many of my projects, as they're useful there. In more simplistic applications I avoid templates and lambdas, because I don't really need to use them to parse command line arguments, for example. As for performance, templates, classes and namespaces don't impact it at all really, unless you're using virtual methods inside of a class. My previous reply was really just addressing complexity from the programmer's point of view. All these high level language constructs can damage readability if overused or used improperly, and I've personally seen a lot of code that really overuses this type of stuff.
@@jjl772 I compared the string vs chars[], but there also things like initializers in classes, while C use bzero( &var, sizeof(struct hello) ), in initializer in classes you often start setting individual public and private data to 0, instead of using optimized routine to clear everything. So again, coding style produces worse code. You start think about what is inside the box, instead of think about the box. And some times you forget you are dealing with box lots stuff, because all looks like a simple type.
@@kjetilhvalstrand1009 std::string in C++ is known for being slower than C strings usually. The only good thing about it is that it stores the length, so you dont need to call strlen all the time. Other than that, std::string has a lot of overhead in the constructor, copying of data, and other cruft that's inside of its member functions. I never said that I used std::string too, I said that I *avoided* using std::string in favor of normal char arrays.
Spot on
I've really been liking Zig, I'm not sure yet if it's as flexible as C. I think once I get used to the syntax it will be pretty close, I really love the if/for/while statement capture syntax and built-in optional/error types. I think it strikes a nice middle ground between the more complex features of C++ (like generics via templates), and not adding too much invisible code under the hood. For example being able to pass a data type as a function parameter and do a switch statement on it makes it super easy to do generics without the pain of templates. And that means for example you can easily have the compiler auto-generate code to swap the byte order of struct fields. Linking Zig code to C and calling Zig from C code is not great though. And writing build files in Zig is neat, but incredibly annoying for simple projects (spent like 2 hours writing a Zig build script to add C files from all subfolders to the build, which would've taken like 2 unix commands and some pipes). Also the cross-compilation support is literally best in class. Unironically surpasses GCC cross toolchains by miles.
Great insights on your experience with Zig! It sounds like you're appreciating its syntax and built-in features, which indeed offer a unique approach compared to C and C++. The ease of handling generics in Zig, as you described, definitely sounds like a significant advantage, especially for those who find C++ templates cumbersome. I agree that the ability to pass data types as function parameters for generics is a game-changer, simplifying many tasks. It's interesting to hear about your mixed experiences with Zig's integration with C and its build system. It seems like while Zig offers some innovative features, it also has areas that could be improved for user convenience, particularly for simpler projects. Your point about the cross-compilation capabilities of Zig is especially noteworthy. Surpassing GCC's cross toolchains is no small feat, and it speaks volumes about the potential efficiency gains with Zig in more complex development scenarios. Have you found any workarounds or best practices for the issues with linking Zig to C and writing build files that might help others? Sharing such tips could be incredibly valuable for the community. Thanks for sharing your thoughts!
I see his point.
Everything in his mind is about linux kernel, so he will stick in C..
@@miguelbarra5091 You mean the MOST POPULAR versioning tool in the world!
@@karma6746 python is written in c
The thumbnail gave me an impression of Linus Torvalds being embedded in a kitchen fridge
My first code was in C and I loved it. I later learnt C++, Java, php, javascript, mysql, autohotkeys, bash, git, visual basic, c#, nodejs, wordpress dev, laravel without mentioning many more
how the hell do you remember all them
C Master race reporting in
I still remember the days when we used a hex editor to alter programs. Not for people who have trouble spelling.
C? Fucking casul, do as zer0flag said and then you can talk.
@zer0flag thats casual. I write by positioning my motherboard in just correct way for the incoming cosmic rays to generate current corresponding to sequences of 0s and 1s i want to execute.
real ones have a custom keyboard where they make logic gate combinations, and set flags and builds physical mem allocators, then insert a card which is wrapped by an electromagnet machine built by themselves, and that also moves card registers into logic entries reading and modifing pointers regarding the flag states produced by logic subroutines, to inner ones
I hate your race
C++ is good enough for HFT which can do a complete reaction from input in 10 nanoseconds. But the standards are high and requires many unit tests to ensure assumptions of compiler optimizations are correct, which they usually are. Then you have to adjust the algorithms to the cache and core layouts of the processor. C is more of a direct-mapping but its clunky and old school back when you had 1 person do everything.
What is HFT?
@@carldrogo9492High Frequency Trading
This is true in the embedded area, operating system, and areas that require extreme optimization. (I don't know because I haven't learned Rust lol)
"If you think like a computer..." --Linus Torvalds
I bet this was in my recommends because the Linux kernel is now gathering "rust"...
i noticed that too, it might be time to re-ask this question with the whole Rust for Kernal thing. Also ... what about when the OS has been built up a bit but still needs to handle concurrency at the hardware level? Wouldn't you use GO or something that had some sort of primitive for parallelism.
@@janglestick Just for drivers, which is a rather superficial part. The problem with Rust is that it depends on LLVM, which does not support all the platforms Linux does, _not even close_. That's why Rust will probably remain only in drivers, never in the kernel.
I like C for the overflows. But I don’t really know what I’m talking about.
@@n4rfy477 lol
Legend.
Nasty sound effects at beginning!
He's right. It's why I use it to program the Atmega328p in C instead of the Arduino in 🤢🤢🤢Arduino language🤮🤮🤮🤮🤮🤮.
That's awesome @Kimchi Robotics!
the title should be, "When I read C I know what the assembly language look like"
Meanwhile optimizer: 🤨
if you don't need to control every cycle of a microcontroller or a cpu, you might consider using golang. yes it takes more ram space than a c program but it is easier to write go-routines compared to c-threads
I've found go to be best for servers. I did a real-time RTMP-to-video converter so that websites could take streams without needing Flash. It was really fast and also very nice for web, but I can't imagine writing something like a device driver or kernel module in go would be very kind on my sanity
Thank you for video.
Live for C, another C master race reporting in.
I really wonder if he gave Rust a try, and if he did, what he thinks of it as a seasoned systems programmer and OS developer. I havent tried Rust yet, but I am interested in it as a language for systems programming and embedded systems.
Did you try Rust now?
this aged like milk.
My opinion: -C for general purposes -Rust for processes which MUST be secure -C++ for big games and anything which will destroy your braincells if it isn't object oriented
C++ is much better for general purpose. C is only good in embedded systems
@@prodbykomrebi If C is good for embedded systems, that implies it's good for resources; meaning you would get the most out of your hardware with C. And, as you might have heard, the Linux Kernel is written in C. Linux is used in several million desktop computers as the kernel for the operating system, is the kernel in all Android phones, and is used in ~98% of servers. C is good for embedded systems, though it's also good for other things. OOP does have it's advantages, like being easy to use once you understand it, but it does use more resources.