Bjarne Stroustrup: C++ Implementations - Clang, GCC, Microsoft, and EDG

Поділитися
Вставка
  • Опубліковано 4 січ 2025

КОМЕНТАРІ • 188

  • @lexfridman
    @lexfridman  5 років тому +35

    This is a clip from a conversation with Bjarne Stroustrup from Nov 2019. New full episodes are released once or twice a week and 1-2 new clips or a new non-podcast video is released on all other days. If you enjoy it, subscribe, comment, and share. You can watch the full conversation here: ua-cam.com/video/uTxRF5ag27A/v-deo.html
    (more links below)
    Podcast full episodes playlist:
    ua-cam.com/play/PLrAXtmErZgOdP_8GztsuKi9nrraNbKKp4.html
    Podcasts clips playlist:
    ua-cam.com/play/PLrAXtmErZgOeciFP3CBCIEElOJeitOr41.html
    Podcast website:
    lexfridman.com/ai
    Podcast on Apple Podcasts (iTunes):
    apple.co/2lwqZIr
    Podcast on Spotify:
    spoti.fi/2nEwCF8
    Podcast RSS:
    lexfridman.com/category/ai/feed/

    • @TrippleXD545
      @TrippleXD545 Місяць тому

      my dude that last question was dumb as hell and i really shouldnt need to explain why

  • @ianpan0102
    @ianpan0102 4 роки тому +751

    "I couldn't write my own linker!" (pauses for a second) "...Actually, I could."
    - Bjarne Stroustrup

    • @dannydk6
      @dannydk6 4 роки тому +50

      He wouldn’t have enough time to work on the language if he built 25+ linkers

    • @dialecticalmonist3405
      @dialecticalmonist3405 3 роки тому +35

      It brings up an interesting notion. A notion that applies to computer science in the most fundamental way.
      The notion of TIME.
      Anyone "could" do anything.
      A baby "could" eventually write their own linker. Or perform brain surgery, etc.
      It's just a question of time and efficiency. He "could" have done it, but would it be worth his time?

    • @yash1152
      @yash1152 2 роки тому +2

      1:09

    • @TheSast
      @TheSast Рік тому +5

      ​@@dialecticalmonist3405Every baby has done anything a human has ever done! Because they grew, up.

    • @rosomak8244
      @rosomak8244 8 місяців тому

      @@dannydk6 Not really. It's a doable task.

  • @sundeepjoshi9773
    @sundeepjoshi9773 5 років тому +505

    The moment when he says: when i designed C++

    • @anatheistsopinion9974
      @anatheistsopinion9974 4 роки тому +100

      He's basically God at this point

    • @pendergastj
      @pendergastj 4 роки тому +42

      @@anatheistsopinion9974 Ironic for you to say.

    • @giancedrick507
      @giancedrick507 4 роки тому +9

      @@pendergastj If I weren't catholic I would say the same

    • @sundeepjoshi9773
      @sundeepjoshi9773 4 роки тому +5

      @@pendergastj 😂🔥

    • @kevinjones238
      @kevinjones238 4 роки тому +7

      @@ollydix The language, as a whole, is so expressive that it tends to introduce more problems(via buggy code) than provisions for solutions. C++ could be one of the most productive programming languages while being the most troublesome at the same time. James Gosling and Bjarne Stroustrup both agreed on that finding when Java started gaining appeal in the mid to late 1990's.

  • @JaapVersteegh
    @JaapVersteegh 5 років тому +44

    "All this good stuff that we want!" His smile with that reveals a lot.

  • @ChrisM541
    @ChrisM541 2 роки тому +36

    I was hoping this question would be about the significant differences in machine code/assembly (size and executable speed) between these different compilers - for the SAME destination CPU.

    • @matthewmoulton1
      @matthewmoulton1 2 роки тому +6

      I honestly don't think that would be a productive conversation. Which architecture(s) do we choose to talk about? What program(s) are we compiling for that architecture? Broadly speaking, the major compiler implementations for C++ are the same: they only differ (for the user) when you start comparing specific examples. And when you start getting too specific, you risk your facts getting out of date. All of the implementations are still being worked on.

  • @kylegaijin
    @kylegaijin 3 роки тому +25

    Love your show. I'm not real familiar with some of the vocabulary and I think the words such as front-end, back-end, compiler, etc... are overloaded just enough that it's difficult to find a reasonable explanation on Google. Can you help me understand what front-end / back-end means when talking about compilers? My intuition is suggesting that a compiler is the part of the tool-chain that creates the actual machine code - or possible assembly. I'm not sure if this is synonymous with back-end. And front-end sounds like it's just a parser that streams an AST to any number of backends. So a C++ frontend could write to a C back-end ? Sort of confusing - but I'm quite curious.

    • @abhinavchavali1443
      @abhinavchavali1443 3 роки тому +30

      front end parses the syntax and generates some sort of intermediate, platform independent representation. Backend takes that IR, and generates native machine code for that architecture/OS and performs optimizations

    • @kylegaijin
      @kylegaijin 3 роки тому +5

      @@abhinavchavali1443 thanks !! I like your explanation.

  • @solomonaryeetey7370
    @solomonaryeetey7370 5 років тому +220

    I love Lex, except he always sounds like he just got up from bed :) Great interview

    • @mokhan6052
      @mokhan6052 5 років тому +11

      I noticed a lot of developers have that demeanor I think it's just from sitting too long at a time everyday. He seems pretty cool tho as unlike other developers, he has a LOT of hobbies 👌

    • @onjofilms
      @onjofilms 5 років тому +11

      No room for drama in technology. That's for the liberal arts.

    • @BryanBortz
      @BryanBortz 4 роки тому +3

      I wish I spoke that slowly and carefully.

    • @AZOffRoadster
      @AZOffRoadster 4 роки тому +4

      A bit monotone. Wonder what he sounds like when he gets excited.

    • @adityasinghrathore3935
      @adityasinghrathore3935 4 роки тому +1

      I initially thought you meant Lex Luther (Bjarne , He would make a great villain ) 😂😂😂

  • @kanglei7807
    @kanglei7807 2 роки тому +5

    Is there any source code analysis information for clang? Or how to read the source code of large projects

  • @IsozwWz
    @IsozwWz 2 роки тому +10

    I think the last question was misinterpreted ;) Lex was talking about a clean slate C++ language, while Bjarne assumed they were still talking about compilers.

  • @dsuess
    @dsuess Рік тому +2

    Absolutlely amazing interview! Bjarne Stroustrup is a living legend and living history.
    Its amazing to hear his humble perspective

  • @EasternBoss
    @EasternBoss Рік тому +3

    What I understood is they're many machines and not all the machines compatible with one single compiler. Is that what Berjan means?

    • @GeGa-jq5es
      @GeGa-jq5es Рік тому +1

      every machine has its own structure and assembly so yeah not every machine is the same

  • @rosalineslon6910
    @rosalineslon6910 5 років тому +15

    Excellent interview thank you. Two important facts to
    do for a responsibly outcome efficiency and reliability. I agree 100% to know the basics in whatever you are going to do.
    Gave you the micro knowledge of how things work.

  • @JakobKenda
    @JakobKenda Рік тому +3

    2:50 "I happen to dislike monocultures." The Rust foundation can afford to do whatever the hell they want because Rust only has one compiler. I think it would be very good if GCC manages to implement a Rust frontend. But there has to be a standard first.

  • @shreyanshsharma9228
    @shreyanshsharma9228 4 роки тому +5

    Lots od whistles in one video! But really love the conversation ❤️

  • @scottfranco1962
    @scottfranco1962 4 роки тому +24

    Do you expect a C++ compiler to be written from scratch?
    Well, Clang was written from scratch....
    No I mean in the last 5 minutes....

  • @jonathanmoore5619
    @jonathanmoore5619 4 роки тому +6

    What a lad. A real hero....

  • @MarcosCpp
    @MarcosCpp 5 років тому +31

    That is, all are good depending on the architecture and system that it will be compiled. But the most complete for sure is the GCC.

    • @destiny_02
      @destiny_02 3 роки тому +8

      Actually in terms of Standard Library, MSVC is the most complete.
      In terms of core features GCC and Clang are most complete

  • @rosomak8244
    @rosomak8244 8 місяців тому +1

    I'm pretty sure that rather sooner than later someone will write a new C++ compiler. And I'm 100% sure that it will be done in Rust. They will claim that it will be supposedly better to do it this way.

  • @bennguyen1313
    @bennguyen1313 4 роки тому +14

    He mentions 4 frontend compilers (clang gcc, microsoft, edg), but what about Zig, mingw64, llvm, icc? How do these fit in the picture?

    • @shalokshalom
      @shalokshalom 4 роки тому +21

      Llvm is no compiler?

    • @callykitten5095
      @callykitten5095 4 роки тому +37

      mingw *is* GCC unless I'm wrong? Minimal GCC?

    • @lonewolfakela6602
      @lonewolfakela6602 4 роки тому +28

      mingw64 is GCC. LLVM is a backend (which is used by clang), not a frontend. icc, if I remember correctly, use edg as its frontend. And, correct me if I'm wrong, but I don't think zig compiler compiles c++ (it does compile c, though)

    • @X_Baron
      @X_Baron 4 роки тому +2

      Intel's compiler is a back-end designed to produce well optimized machine code for Intel's hardware specifically, similarly to the "embedded" back-ends Bjarne mentions.

    • @gregmantis
      @gregmantis 4 роки тому +13

      Zig CC is built on top of the clang libraries. Mingw64 is a GCC port. LLVM is essentially a set of libraries from which you can build a compiler from and is closely tied with clang which is a set of libraries under the umbrella of the LLVM project for parsing and otherwise manipulating C-family languages. ICC used to be built on EDG but I think they've been transitioning to Clang recently. Essentially, C++ is a language that is not designed to be easy to parse. Its not just a case of building a simple EBNF recursive descent parser. You sometimes have to finish parsing an entire statement before you know what the first few tokens refer to (look up the "most vexing parse" as an example). Because of that it's not worth considering writing your own front end unless you have a really good reason and a lot of resource. EDG is a good commercial option. GCC's aim is to provide a free software implementation and Clang was designed to be highly modular and open source without GPL restrictions. I'm not sure why Microsoft have their own frontend but I'm sure it's historical, and even they use EDG for Visual Studio's Intellisense feature, and Clang for a few other things. I'm not aware of any other frontends that are in any way complete/compliant. Typically any compiler you come across will be based on one of the above.

  • @laughingvampire7555
    @laughingvampire7555 Рік тому

    removing the monoculture from the compiler just moves it to the language

  • @dheerajkrishnaputrevu
    @dheerajkrishnaputrevu 4 роки тому +3

    Man Bjarne Stroustrup talks like Derry Murbles from Parks and Rec

    • @romzeek
      @romzeek 7 місяців тому

      And looks like Rick from Rick and Morty

  • @ballsnface2416
    @ballsnface2416 4 роки тому +8

    Mono-culture=intel for 10 years.

  • @yirenxindudu
    @yirenxindudu 3 роки тому +2

    Linus is his friend

  • @loknathshankar5423
    @loknathshankar5423 4 роки тому +7

    Well CLR is monoculture... atleast its kind of open source now

    • @yash1152
      @yash1152 2 роки тому

      clr ??

    • @aidsralientv
      @aidsralientv 2 роки тому +2

      @@yash1152 The Common Language Runtime, basically executes the binary executables that were written in C#

  • @uoweme5grand
    @uoweme5grand 4 роки тому +1

    At what point do you just say fuck it and cut it all off

  • @kyleheaser2385
    @kyleheaser2385 4 роки тому +10

    Intel became a monoculture.

  • @JMiskovsky
    @JMiskovsky 4 роки тому +6

    One implemention, one compiler, one c++!
    / Sarc

  • @mavhunter8753
    @mavhunter8753 5 років тому +37

    I disagree with his overly complex language design decisions, and his dubious motivations for creating c++, but I couldn't agree with him more on the dangers of mono culture. For that his has an ally in me.

    • @mannyw_
      @mannyw_ 5 років тому +6

      Mav Hunter What were his dubious motivations?

    • @a-j.2002
      @a-j.2002 5 років тому +13

      Why would you say it's an overly complex language? I'm curious.

    • @hikarii8758
      @hikarii8758 5 років тому +5

      so what do you think is not overly complex then you Eva nerd?

    • @Artaxerxes.
      @Artaxerxes. 4 роки тому +22

      Better than that piece of garbage java

    • @bagzhansadvakassov1093
      @bagzhansadvakassov1093 4 роки тому +1

      @@Artaxerxes. the hell is wrong with java?

  • @markcuello5
    @markcuello5 2 роки тому +1

    PLEASE HELP ME.

  • @coshvjicujmlqef6047
    @coshvjicujmlqef6047 5 років тому +20

    Still GCC. LLVM/Clang is far from actually usable. Especially on windows.

    • @shalokshalom
      @shalokshalom 4 роки тому +7

      People on Windows most likely use Visual studio and projects like Kdevelop have switched to llvm/clang fully and not regretted it since. That being said, I dont know how usable llvm/clang is actually on Windows, so might be an issue with your system specifically

    • @coshvjicujmlqef6047
      @coshvjicujmlqef6047 4 роки тому +2

      @@shalokshalom Wrong. LLVM never fully supports windows. The stuff you are using is clang-cl, which is using partial of msvc toolchain.
      The only real alternative on windows is GCC, not clang. GCC has full support on windows, including libstdc++. Native C++ standard library support for GNU toolchain.

    • @coshvjicujmlqef6047
      @coshvjicujmlqef6047 4 роки тому +1

      @@shalokshalom This is GCC I built recently. bitbucket.org/ejsvifq_mabmip/mingw-gcc

    • @coshvjicujmlqef6047
      @coshvjicujmlqef6047 4 роки тому +4

      ​@@shalokshalom LLVM is a terrible toolchain. Worst C++20 support.

    • @bored78612
      @bored78612 4 роки тому +4

      Lol the browser you are writing this on in Windows is most probably compiled on Clang.

  • @luisgonzalez1637
    @luisgonzalez1637 5 років тому +25

    GCC all day!

    • @pendergastj
      @pendergastj 4 роки тому +18

      GCC is great at taking all day.

    • @coshvjicujmlqef6047
      @coshvjicujmlqef6047 4 роки тому +6

      @@rakinrahman890 clang SUCKS and only losers use it

    • @pendergastj
      @pendergastj 4 роки тому +9

      @Vishwesh Rajurkar Uh. No it isnt. Visual C++ is the most behind on the standard and is non-conforming. It also produces extremely slow machine code and has limited optimization

    • @michaelrosen6478
      @michaelrosen6478 4 роки тому +3

      @@rakinrahman890 Maybe early versions of Clang. Clang nowadays is just as slow as GCC. Seriously. Have you even compiled anything with either lately?

  • @owlmostdead9492
    @owlmostdead9492 2 роки тому +6

    C++ syntax is the worst part about C++

    • @saddoomer
      @saddoomer 5 місяців тому +1

      C++ syntax is sooo good

    • @DArnez-c5n
      @DArnez-c5n 13 днів тому

      You can always use a subset of C++

  • @guilherme5094
    @guilherme5094 5 місяців тому

    👍

  • @TrevaCritchelow-o3x
    @TrevaCritchelow-o3x 4 місяці тому

    Tillman Island

  • @FarjanaAhsan-t4i
    @FarjanaAhsan-t4i 4 місяці тому

    Jones Jeffrey Moore William Young Paul

  • @WhittierElliot-f3b
    @WhittierElliot-f3b 2 місяці тому

    Jackson Ruth Allen Linda Moore Margaret

  • @antwanwimberly1729
    @antwanwimberly1729 Рік тому

    #wan

  • @dylankerler3409
    @dylankerler3409 4 роки тому +17

    Rust is proof that monoculture is better than competition.
    A single standard for package management, documentation, compiler errors etc. is better than multiple implementations of all of them. Because what ends up happening is a developer is forced to learn every single implementation in order to be able to integrate and work with others; A huge waste of time.

    • @rdstevens1
      @rdstevens1 4 роки тому +4

      Felipe Trzaskowski but they didn’t, because GCC wasn’t interested in that kind of thing. Until clang came along and made it sit up and take notice.

    • @michaelrosen6478
      @michaelrosen6478 4 роки тому +29

      Rust is proof that monoculture is shit. You can't run Rust on a bunch of embedded systems, arguably where Rust would be most useful, because they don't have LLVM support. You have "trusting trust" vulnerabilities, because there are no alternative frontends (that are anywhere near complete, at least). Cargo is shit - it makes build times slow because people statically link in like 50 different libraries because they think Cargo makes it 'so easy' to dependency manage, meaning that they feel like they don't have to dependency manage properly themselves. Also, Cargo doesn't work with anything else, and the worst part is that no one in the Rust team seems to care.
      Also, Bjarne mentions "compile time speed" as one of the reasons for wanting multiple implementations. This is the single best argument against your "implementation monoculture" - rustc is hideously fucking slow. You think highly templated C++ is bad? It complies in like one tenth of the speed of Rust.
      Maybe if we had other Rust compilers, rustc might be faster.

    • @TheJoKeR7
      @TheJoKeR7 2 роки тому +6

      You're confusing standardization and implementation, you don't need to learn every implementation of every compiler as long as you write c++ standard compliant code ! that's why the standard is there for !

    • @kylek.3689
      @kylek.3689 2 роки тому +2

      @@michaelrosen6478 I'm leaving this comment here so I can come back after running a flamegraph on the Rust compiler and see where the greatest amount of time is spent during compiling.

    • @Cooldownman197
      @Cooldownman197 2 роки тому +2

      @@kylek.3689 Yeah sure I am also waiting when Rust beats C++.

  • @mattr2238
    @mattr2238 4 роки тому +4

    Microsoft's version routinely breaks and fails to compile anything.

  • @abhyaskanaujia3862
    @abhyaskanaujia3862 4 роки тому +7

    The most uninterested interviewer ever

    • @mikhail5002
      @mikhail5002 4 роки тому +7

      you're a fool to think that.

    • @Lensr
      @Lensr Рік тому

      The most uninteresting comment ever :p
      Just because he doesn't do screaming UA-camr nonsense doesn't mean he doesn't care. He clearly asks very intriguing and thoughtful questions. I don't like lex but I like bullshit UA-cam comments like yours that do nothing except punch down even less