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
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.
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. :)
@@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.
@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.
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.
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.
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.
@@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.
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
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)
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.
@@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.
@@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.
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
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.
@@user-lv6qm3fj2z 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.
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.
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
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 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.
@@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.
@@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! ;-)
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!
@@小张同学-v6i 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.
@@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!
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
Yes until the compiler starts using architecture specific instrisics and vendor specific instruction sets. The you no longer can tell anything
2 ปีที่แล้ว +17
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.
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.
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!
2 ปีที่แล้ว +21
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.
2 ปีที่แล้ว +1
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.
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.
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.
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.
@@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..
For too long high level computer languages tried to model the problem space. Think Fortran and Cobol. Whereas, C modeled the hardware at a higher level. Therein lies its elegance.
I liked FORTRAN. Hard to do recursion - knew a guy once who did it but he had to build his own stack and be very careful it didn't overflow. A Kludge at best. But for real time command and control it was really good. It was not as good at hammering on numerical solutions for differential equations as a spreadsheet (Visicalc) was. Yeah, I'm old...
@@ElPasoJoe1 It all depends on the use case. It's autumn 2019 and it's not even a month I have seen a freshly written (my acquaintance actually wrote it) Fortran (.f90) program that's actually used to enable quite a significant discovery in the field of quantum chemistry. Fortran isn't dead. It's specific in what it wants to do.
C is the closest language to assembly, other than assembly itself. C++ became a lot more abstract and conceptual, most of the time it's up to the compiler to optimize and make your stuff faster, but in C it's up to you.
there is nothing inherently more low level about C than there is with rust or C++, the latter two languages just provide the option for higher level abstractions and more library functions, whereas with C, you pretty much have to write low level code unless you import an external library.
@@obiwankenobe3962 but really I regret there is no PL/M for the latest Intel processors :) C is quite close, but features like write everywhere in memory or goto everywhere in memory, access the flags, without using assembler, of course. But my way to work with C is very peculiar. :)
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
@@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?
No worry, Ruby is one of the best application developing languages. And it's good for beginners too. C is basically for system programming. It's almost impossible using C to implement something like RoR.
@@yzhang2008 it's like hahaha python is too slow for AAA engines! C is not meant to be used in web development, like python isnt used for complex games. people learn C cause they want to go as low level as possible but still don't want to mov all the time.
Ruby is very simple. It’s for web back-end. C is completely different ballgame it’s used for making libraries in mobile devices. The smart phone you’re running using many those c libraries processing this webpage. I’m using iPhone’s TH-cam app which uses lots of c libraries. One question: Is Ruby on Rails losing it’s popularity? It was very fast tho.
Only a dramatically new computer architecture paradigm could unseat C as the language of choice for system programming. C will likely remain alive, for as long as our modern processor architecture involves bits, bytes, CPU and memory mapping.
@@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"
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
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
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.
@@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.
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.
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.
Recently I had to audit a little project of 6k assembly instructions compiled from C, and the fact that everything can be traced easily between Source Code and Object Code it is such an important thing while developing safety critical software, that makes C so relevant today.
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.
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"
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.
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
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.
C is just generic assembly, as said one of the best C programmers I've met. He had developed his own OS on that time and made his master and doctorate thesis over it.
Rust don't replace the C language but it's a excellent programming language with built-in security mechanism, data structure and memory management so opening Linix Kernel to the Rust language is pretty good idea 💡
Not with regulation currently introduced by foundation. It's a joke. Try to imagine I'd Dennis Ritchie would go the same route as Rust foundation. People creating unix or C/C++ language were humble geniuses, which worked with passion to make it possible for engineers and scientists to use tools which will speed up and improve their work. Look at the difference between Bill Gates who didn't even invented Windows and Ken Thompson who created Unix. Rust it's actually going into direction of Gates.
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.
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
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 .
@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
That exactly why I love c too. You can look at any line in a c program and easily tell exactly what the line is doing. For me, c is just assembly with a nice coat of paint, but you don't loose any control.
The reason to use C is because it will generate reasonable assembler code. I wrote an operating system in assembler once. Or twice. C is better but still some things I would rather do in assembler. 68K was my best processor - looked a lot like a big machine when down on the bare metal programming. Don't think we see much of those anymore...
@@sfcs3743 i am attending an assembly class and we dont use inline asm but rather declaring an extern function on the top of c file which is linked to asm file... its interesting but gets confusing really quickly, especially when working with extended instruction set like AVX.
Yes, web-stack developers seem somewhat fickle and there seems to be a new framework that hits the scene every year or two. I suppose it's our addiction to novelty, or some kind of thinking that finally a framework has arrived that will make web-stack development better, easier, whatever.
@@fredflintstone8048 web developer - "Why are there 7 different standards to do the same thing? I'm just going to unify them all into one standard without any of the bugs or gimmicks". Now there are 8 standards
I think there are so many standards because there are so many different ways to skin the same cat. There are also different frameworks for just about every popular language, and the browser is fairly flexible and if a developer wants to do something different he/she can even create plugins for browser to be able to interact with the server/service environment.
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 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 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.
Using clocked logic is such a sloppy fix. You should make an analogue or asynchronous machine specifically for the task. Think of all the time you waste in a clock cycle.
I have developed in C and C++ for years. But lately, when I look at say, a C++ code sample web site, I'm seeing errors. And it occurs to me, that C++ has gotten too complicated, if professionals are submitting buggy code.
i just stick my laptop in a microwave and wait until the EM interference randomly toggles the signals in the memory cells of the processor registers to match my desired result. my laptop is trashed but it works for about 60% of the times, all the time.
I was choosing Java when trying to automate my task but I did not know why it was not finish. Then I moved to C and start writing the code. Just in a week, the code was finished and was running great. C just works!
I mean the argument "I tried programming in Java but failed.... C works" is a tad contrived. All programming languages "work", it just depends on what your goal and implementation is. If I write code that Java doesn't compile, that doesn't mean I should move on to a different language. It means I need to learn how to debug.
Try Pascal. It is exactly the same, except for more typing, but easier reading. A typo is a syntax error, instead of compiling to something you didn't want it to.
Pascal is great I loved it at Uni and has much stronger type checking however it's not well optimised as C or as versatile - I guess there's alway a tradeoff.
@@lanceharvie Optimization is dependent on the implementation, but basically, they are similar low level (p-System was like Java, different). C++/Object Pascal, I guess multiple inheritance and interfaces, but the end result is quite the same. Pretty lean, low level.
@@lanceharvie Perf is mostly the same although the binairies tend to be larger. Trick is that sometimes when you need the extra perf you could go to inline assembly in pascal. Though its hardly needed.
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
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.
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
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.
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.
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?
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.
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.
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
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
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 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 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
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.
@@user-lv6qm3fj2z 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.
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.
"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 :(
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?
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
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 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.
Videos like this really should have the date in the title/description, or at the very least the year
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! ;-)
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!
@@小张同学-v6i 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
@@小张同学-v6i 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.
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!
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
Yes until the compiler starts using architecture specific instrisics and vendor specific instruction sets. The you no longer can tell anything
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.
ELI5 version: When linus looks at a computer screen, he sees it in The Matrix esque green scrolling characters.
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.
Walking philosophy, Can't stop Listening to his talks / conferences ....
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!
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.
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.
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.
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 😂
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..
why linus asking himself?
Thank you, Linus. Unemployed senior C developer for almost a year now here. Your talk makes it easier to move forward.
For too long high level computer languages tried to model the problem space. Think Fortran and Cobol. Whereas, C modeled the hardware at a higher level. Therein lies its elegance.
I liked FORTRAN. Hard to do recursion - knew a guy once who did it but he had to build his own stack and be very careful it didn't overflow. A Kludge at best. But for real time command and control it was really good. It was not as good at hammering on numerical solutions for differential equations as a spreadsheet (Visicalc) was. Yeah, I'm old...
@@ElPasoJoe1 It all depends on the use case. It's autumn 2019 and it's not even a month I have seen a freshly written (my acquaintance actually wrote it) Fortran (.f90) program that's actually used to enable quite a significant discovery in the field of quantum chemistry. Fortran isn't dead. It's specific in what it wants to do.
@@Alche_mist +1
This is the unspoken truth we all know, and yet seldom put in words.
C is essentially just a higher level assembly language especially if one does not use an optimizing compiler.
C is the closest language to assembly, other than assembly itself. C++ became a lot more abstract and conceptual, most of the time it's up to the compiler to optimize and make your stuff faster, but in C it's up to you.
there is nothing inherently more low level about C than there is with rust or C++, the latter two languages just provide the option for higher level abstractions and more library functions, whereas with C, you pretty much have to write low level code unless you import an external library.
C is defined as a portable assembler :)
@@FaustoSaporito Exactly right! I was looking for that comment, if missing, I was going to add it myself :)
@@obiwankenobe3962 but really I regret there is no PL/M for the latest Intel processors :) C is quite close, but features like write everywhere in memory or goto everywhere in memory, access the flags, without using assembler, of course. But my way to work with C is very peculiar. :)
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. 🤦♂️
"when I read C, I actually see all those green words of the matrix"
Linus Torvalds
I like how the text shows when he's saying something important. More channels should start doing this.
Kurt Russel pouring whiskey inside the computer, thats "interacting with the hardware".
Damn i just complete ruby for beginners
I agree. Dont start with C. C is a good second language to learn. Now get a good beginner's book on C and get started!
No worry, Ruby is one of the best application developing languages. And it's good for beginners too. C is basically for system programming. It's almost impossible using C to implement something like RoR.
@@yzhang2008 it's like hahaha python is too slow for AAA engines! C is not meant to be used in web development, like python isnt used for complex games. people learn C cause they want to go as low level as possible but still don't want to mov all the time.
Ruby is very simple. It’s for web back-end. C is completely different ballgame it’s used for making libraries in mobile devices. The smart phone you’re running using many those c libraries processing this webpage. I’m using iPhone’s TH-cam app which uses lots of c libraries. One question: Is Ruby on Rails losing it’s popularity? It was very fast tho.
@@plasmahvh
Most videogames are made in c++
I get what he's saying. I write hardware specific code for embedded controllers and c is my language of choice for that.
Only a dramatically new computer architecture paradigm could unseat C as the language of choice for system programming. C will likely remain alive, for as long as our modern processor architecture involves bits, bytes, CPU and memory mapping.
Rust is a good augment, but even that won't unseat C
It's called C++. A safer and better C
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?
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.😃
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 like C for the overflows.
But I don’t really know what I’m talking about.
@@n4rfy477 lol
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
I could not possibly agree more, in all regards. Except, of course, that I'm also very, very comfortable with a soldering iron.
"I like tinkering hardware from a software perspective."
Words to live by
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
if you look really close you can notice he is signaling "Rust" in morse code with his foot
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.
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.
Recently I had to audit a little project of 6k assembly instructions compiled from C, and the fact that everything can be traced easily between Source Code and Object Code it is such an important thing while developing safety critical software, that makes C so relevant today.
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.
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.
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
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). 🤦♂️😂
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.
C is just generic assembly, as said one of the best C programmers I've met. He had developed his own OS on that time and made his master and doctorate thesis over it.
Rust don't replace the C language but it's a excellent programming language with built-in security mechanism, data structure and memory management so opening Linix Kernel to the Rust language is pretty good idea 💡
funny joke, lol
Not with regulation currently introduced by foundation. It's a joke. Try to imagine I'd Dennis Ritchie would go the same route as Rust foundation. People creating unix or C/C++ language were humble geniuses, which worked with passion to make it possible for engineers and scientists to use tools which will speed up and improve their work. Look at the difference between Bill Gates who didn't even invented Windows and Ken Thompson who created Unix. Rust it's actually going into direction of Gates.
Have you ever tried static analysers?
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
I had my C course in building C, room 63, ground floor (0x63) and drove an old C-Class. I guess my path was set back then :D
haha love your sense of humour
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
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 .
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
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.
Thank you! Assembler - that is a blast from my childhood. I was lucky. My dad brought home all kinds of hardware.
*Assembly
That exactly why I love c too. You can look at any line in a c program and easily tell exactly what the line is doing. For me, c is just assembly with a nice coat of paint, but you don't loose any control.
The reason to use C is because it will generate reasonable assembler code. I wrote an operating system in assembler once. Or twice. C is better but still some things I would rather do in assembler. 68K was my best processor - looked a lot like a big machine when down on the bare metal programming. Don't think we see much of those anymore...
Did you write your own kernel for your hardware?
What about calling asm from another file or inline asm in c?
@@adamkoxxl I don't believe inline assembly existed for C during a time where people coded in pure assembly xD
the question is can you get another job when employers do round of lay offs every quarter and there is no demand for this ancient language.
@@sfcs3743 i am attending an assembly class and we dont use inline asm but rather declaring an extern function on the top of c file which is linked to asm file... its interesting but gets confusing really quickly, especially when working with extended instruction set like AVX.
The man, the legend.
When the Boss speaks, you listen ; )
It's also nice not having to learn new languages all the time as they drift in and out of fashion.
Yes, web-stack developers seem somewhat fickle and there seems to be a new framework that hits the scene every year or two. I suppose it's our addiction to novelty, or some kind of thinking that finally a framework has arrived that will make web-stack development better, easier, whatever.
@@fredflintstone8048 web developer - "Why are there 7 different standards to do the same thing? I'm just going to unify them all into one standard without any of the bugs or gimmicks". Now there are 8 standards
I think there are so many standards because there are so many different ways to skin the same cat. There are also different frameworks for just about every popular language, and the browser is fairly flexible and if a developer wants to do something different he/she can even create plugins for browser to be able to interact with the server/service environment.
100% Agreement with Torvalds. I am SE since 32 years. 👍
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 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 can't imagine my life without C ❤️❤️❤️❤️❤️
I expected to see a lot more posts bringing up rust
i would like to see them too
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.
Makes sense why it’s easy to translate most c code into assembly language
I wonder what he thinks about Rust.
Problaby similar to what he thinks about C++, which is anything but positivity xD
@ did he ever say anything about C++?
@ Well... Except C++ is a mess and Rust can be quite beautiful...
@@meamzcs Hopefully Rust is better. It was made to replace C++ code in Firefox's codebase.
Daniel Kurniadi he hates c++ he thinks is bloated
When you google "Nothing else matters" and TH-cam gives you "Nothing better than C". That's when you know you are nerd
Lol nerd
Call me old fashion, but I build a new fix program computer for any given task.
Yep, real coders use a soldering iron :):)
Using clocked logic is such a sloppy fix. You should make an analogue or asynchronous machine specifically for the task. Think of all the time you waste in a clock cycle.
True! I agree 'C' is required for best.
I have developed in C and C++ for years. But lately, when I look at say, a C++ code sample web site, I'm seeing errors. And it occurs to me, that C++ has gotten too complicated, if professionals are submitting buggy code.
Nothing better than taking the spark mechanism in lighters and using it on a processor to make it calculate
i just stick my laptop in a microwave and wait until the EM interference randomly toggles the signals in the memory cells of the processor registers to match my desired result. my laptop is trashed but it works for about 60% of the times, all the time.
this looks like the most efficient way
Well. Recently he added Rust to list of allowed languages in kernel. So finally he must have found a language at least as good as C.
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 GCC compiller was maked with "pastel" (pascal without color)
Embedded systems based on assembly language and machine code. There was involved in microprocessor and microcontroller and microelectronics
I was choosing Java when trying to automate my task but I did not know why it was not finish. Then I moved to C and start writing the code. Just in a week, the code was finished and was running great. C just works!
Why tho? What changed?
I mean the argument "I tried programming in Java but failed.... C works" is a tad contrived. All programming languages "work", it just depends on what your goal and implementation is. If I write code that Java doesn't compile, that doesn't mean I should move on to a different language. It means I need to learn how to debug.
@@Zephyr-tg9hu I believe some languages are easier than the other one. I dont know. Maybe I just like C.
C is like a linking point between all other, higher, languages and assembly language.
not javascript
Linus is actually a C compiler (for X86/X64) I presume.
Try Pascal. It is exactly the same, except for more typing, but easier reading. A typo is a syntax error, instead of compiling to something you didn't want it to.
Pascal is great I loved it at Uni and has much stronger type checking however it's not well optimised as C or as versatile - I guess there's alway a tradeoff.
@@lanceharvie
Optimization is dependent on the implementation, but basically, they are similar low level (p-System was like Java, different). C++/Object Pascal, I guess multiple inheritance and interfaces, but the end result is quite the same. Pretty lean, low level.
@@lanceharvie
Perf is mostly the same although the binairies tend to be larger. Trick is that sometimes when you need the extra perf you could go to inline assembly in pascal. Though its hardly needed.
C is the mother of many things in computing.
The main Mutterficker of programming languages is Algol.