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

Поделиться
HTML-код
  • Опубликовано: 21 ноя 2024

Комментарии • 184

  • @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: ruclips.net/video/uTxRF5ag27A/видео.html
    (more links below)
    Podcast full episodes playlist:
    ruclips.net/p/PLrAXtmErZgOdP_8GztsuKi9nrraNbKKp4
    Podcasts clips playlist:
    ruclips.net/p/PLrAXtmErZgOeciFP3CBCIEElOJeitOr41
    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/

  • @ianpan0102
    @ianpan0102 4 года назад +738

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

    • @dannydk6
      @dannydk6 4 года назад +49

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

    • @dialecticalmonist3405
      @dialecticalmonist3405 3 года назад +34

      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 7 месяцев назад

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

  • @sundeepjoshi9773
    @sundeepjoshi9773 5 лет назад +490

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

    • @anatheistsopinion9974
      @anatheistsopinion9974 4 года назад +95

      He's basically God at this point

    • @pendergastj
      @pendergastj 4 года назад +39

      @@anatheistsopinion9974 Ironic for you to say.

    • @giancedrick507
      @giancedrick507 4 года назад +8

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

    • @sundeepjoshi9773
      @sundeepjoshi9773 4 года назад +4

      @@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 года назад +35

    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 года назад +5

      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.

  • @dsuess
    @dsuess Год назад +2

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

  • @solomonaryeetey7370
    @solomonaryeetey7370 5 лет назад +214

    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 ) 😂😂😂

  • @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.

  • @MarcosCpp
    @MarcosCpp 4 года назад +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

  • @shreyanshsharma9228
    @shreyanshsharma9228 4 года назад +5

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

  • @jonathanmoore5619
    @jonathanmoore5619 4 года назад +5

    What a lad. A real hero....

  • @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 года назад +29

      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.

  • @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.

  • @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....

  • @kanglei7807
    @kanglei7807 2 года назад +5

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

  • @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 Год назад

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

  • @dheerajkrishnaputrevu
    @dheerajkrishnaputrevu 4 года назад +3

    Man Bjarne Stroustrup talks like Derry Murbles from Parks and Rec

    • @romzeek
      @romzeek 6 месяцев назад

      And looks like Rick from Rick and Morty

  • @ballsnface2416
    @ballsnface2416 4 года назад +8

    Mono-culture=intel for 10 years.

  • @JakobKenda
    @JakobKenda Год назад +2

    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.

  • @JMiskovsky
    @JMiskovsky 4 года назад +6

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

  • @yirenxindudu
    @yirenxindudu 3 года назад +2

    Linus is his friend

  • @rosomak8244
    @rosomak8244 7 месяцев назад

    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.

  • @kyleheaser2385
    @kyleheaser2385 4 года назад +10

    Intel became a monoculture.

  • @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?

  • @laughingvampire7555
    @laughingvampire7555 Год назад

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

  • @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#

  • @owlmostdead9492
    @owlmostdead9492 2 года назад +5

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

    • @saddoomer
      @saddoomer 3 месяца назад +1

      C++ syntax is sooo good

  • @uoweme5grand
    @uoweme5grand 4 года назад +1

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

  • @guilherme5094
    @guilherme5094 3 месяца назад

    👍

  • @markcuello5
    @markcuello5 2 года назад +1

    PLEASE HELP ME.

  • @TrevaCritchelow-o3x
    @TrevaCritchelow-o3x 2 месяца назад

    Tillman Island

  • @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 года назад +19

      Llvm is no compiler?

    • @callykitten5095
      @callykitten5095 4 года назад +36

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

    • @lonewolfakela6602
      @lonewolfakela6602 4 года назад +27

      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 года назад +12

      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.

  • @WhittierElliot-f3b
    @WhittierElliot-f3b Месяц назад

    Jackson Ruth Allen Linda Moore Margaret

  • @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 4 года назад +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?

  • @FarjanaAhsan-t4i
    @FarjanaAhsan-t4i 2 месяца назад

    Jones Jeffrey Moore William Young Paul

  • @coshvjicujmlqef6047
    @coshvjicujmlqef6047 4 года назад +18

    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 года назад +3

      ​@@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.

  • @antwanwimberly1729
    @antwanwimberly1729 11 месяцев назад

    #wan

  • @mattr2238
    @mattr2238 4 года назад +3

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

  • @dylankerler3409
    @dylankerler3409 4 года назад +16

    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 года назад +3

      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 года назад +28

      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++.

  • @abhyaskanaujia3862
    @abhyaskanaujia3862 4 года назад +6

    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 RUclipsr 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 RUclips comments like yours that do nothing except punch down even less