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: ru-vid.com/video/%D0%B2%D0%B8%D0%B4%D0%B5%D0%BE-uTxRF5ag27A.html (more links below) Podcast full episodes playlist: ru-vid.com/group/PLrAXtmErZgOdP_8GztsuKi9nrraNbKKp4 Podcasts clips playlist: ru-vid.com/group/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/
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?
@@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.
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 👌
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.
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.
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.
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
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.
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.
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.
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.
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)
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.
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.
@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
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.
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
@@matthiasschuster9505 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.
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.
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.
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 !
@@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.
The most uninteresting comment ever :p Just because he doesn't do screaming RU-vidr 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 RU-vid comments like yours that do nothing except punch down even less