Episode Guide

The Race to Replace C and C++
?
?

Keyboard Navigation

Global Keys

[, < / ], > Jump to previous / next episode
W, K, P / S, J, N Jump to previous / next marker
t / T Toggle theatre / SUPERtheatre mode
V Revert filter to original state Y Select link (requires manual Ctrl-c)

Menu toggling

q Quotes r References f Filter y Link c Credits

In-Menu Movement

a
w
s
d
h j k l


Quotes and References Menus

Enter Jump to timecode

Quotes, References and Credits Menus

o Open URL (in new tab)

Filter Menu

x, Space Toggle category and focus next
X, ShiftSpace Toggle category and focus previous
v Invert topics / media as per focus

Filter and Link Menus

z Toggle filter / linking mode

Credits Menu

Enter Open URL (in new tab)
0:43Abner Coimbre: Welcome to the podcast
0:43Abner Coimbre: Welcome to the podcast
0:43Abner Coimbre: Welcome to the podcast
1:12AC: What's your professional history with compilers, Andrew?
1:12AC: What's your professional history with compilers, Andrew?
1:12AC: What's your professional history with compilers, Andrew?
1:52Andrew Kelley: No professional history with compilers
1:52Andrew Kelley: No professional history with compilers
1:52Andrew Kelley: No professional history with compilers
2:49AK: Why Zig
2:49AK: Why Zig
2:49AK: Why Zig
3:37AC: How do people find Zig?
3:37AC: How do people find Zig?
3:37AC: How do people find Zig?
3:51AK: Zig's decentralised community1
3:51AK: Zig's decentralised community1
3:51AK: Zig's decentralised community1
4:28AC: What's your relationship with LLVM?
4:28AC: What's your relationship with LLVM?
4:28AC: What's your relationship with LLVM?
4:37AK: Ever-loosening relationship with LLVM, as training wheels
4:37AK: Ever-loosening relationship with LLVM, as training wheels
4:37AK: Ever-loosening relationship with LLVM, as training wheels
5:42AC: So Zig began as a hobby and evolved into a full-time endeavour?
5:42AC: So Zig began as a hobby and evolved into a full-time endeavour?
5:42AC: So Zig began as a hobby and evolved into a full-time endeavour?
6:02AK: Zig's progress to a full-time project
6:02AK: Zig's progress to a full-time project
6:02AK: Zig's progress to a full-time project
6:29AC: Let's introduce Ginger Bill
6:29AC: Let's introduce Ginger Bill
6:29AC: Let's introduce Ginger Bill
7:06Ginger Bill: Hello!
7:06Ginger Bill: Hello!
7:06Ginger Bill: Hello!
7:09AC: What's your professional history of compilers, Ginger?
7:09AC: What's your professional history of compilers, Ginger?
7:09AC: What's your professional history of compilers, Ginger?
7:45GB: Zero professional history of compilers, and the evolution of Odin2,3
7:45GB: Zero professional history of compilers, and the evolution of Odin2,3
7:45GB: Zero professional history of compilers, and the evolution of Odin2,3
10:02AC: This sounds like a not very academic endeavour
10:02AC: This sounds like a not very academic endeavour
10:02AC: This sounds like a not very academic endeavour
10:55GB: Practical learning
10:55GB: Practical learning
10:55GB: Practical learning
11:31AC: Was Zig also written with slight academic understanding?
11:31AC: Was Zig also written with slight academic understanding?
11:31AC: Was Zig also written with slight academic understanding?
11:48AK: Practical reasoning coupling with academic theory
11:48AK: Practical reasoning coupling with academic theory
11:48AK: Practical reasoning coupling with academic theory
12:49AC: We do have Josh
12:49AC: We do have Josh
12:49AC: We do have Josh
13:10Josh Huelsman: Hi!
13:10Josh Huelsman: Hi!
13:10Josh Huelsman: Hi!
13:15AC: Casual introduction of hidden complexity
13:15AC: Casual introduction of hidden complexity
13:15AC: Casual introduction of hidden complexity
15:34AK: Zig's "no hidden control flow, no hidden memory allocations"4
15:34AK: Zig's "no hidden control flow, no hidden memory allocations"4
15:34AK: Zig's "no hidden control flow, no hidden memory allocations"4
16:59AC: How does that compare to Odin?
16:59AC: How does that compare to Odin?
16:59AC: How does that compare to Odin?
17:04GB: Odin's context allocators
17:04GB: Odin's context allocators
17:04GB: Odin's context allocators
17:58GB: Simplicity is complicated
17:58GB: Simplicity is complicated
17:58GB: Simplicity is complicated
19:51JH: I love your point about "what does simple mean?"
19:51JH: I love your point about "what does simple mean?"
19:51JH: I love your point about "what does simple mean?"
19:58GB: Implicit worldviews
19:58GB: Implicit worldviews
19:58GB: Implicit worldviews
20:17JH: Information theory-based simplicity, file path encoding
20:17JH: Information theory-based simplicity, file path encoding
20:17JH: Information theory-based simplicity, file path encoding
21:19AC: Simplicity in Vulkan vs OpenGL
21:19AC: Simplicity in Vulkan vs OpenGL
21:19AC: Simplicity in Vulkan vs OpenGL
22:15AC: What's your take on simplicity, Josh?
22:15AC: What's your take on simplicity, Josh?
22:15AC: What's your take on simplicity, Josh?
23:13JH: Writing inline then splitting things off where this makes sense
23:13JH: Writing inline then splitting things off where this makes sense
23:13JH: Writing inline then splitting things off where this makes sense
23:56AC: But then Java wouldn't be the ideal language for you
23:56AC: But then Java wouldn't be the ideal language for you
23:56AC: But then Java wouldn't be the ideal language for you
24:00JH: You could technically do it
24:00JH: You could technically do it
24:00JH: You could technically do it
24:07AC: How does Odin handle encapsulation?
24:07AC: How does Odin handle encapsulation?
24:07AC: How does Odin handle encapsulation?
24:57GB: Odin's encapsulation, at the library level
24:57GB: Odin's encapsulation, at the library level
24:57GB: Odin's encapsulation, at the library level
25:58GB: Library structures: 1) C-like textual include
25:58GB: Library structures: 1) C-like textual include
25:58GB: Library structures: 1) C-like textual include
26:45GB: Library structures: 2) Python-like file-based
26:45GB: Library structures: 2) Python-like file-based
26:45GB: Library structures: 2) Python-like file-based
27:48GB: Library structures: 3) Modula-like directory-based
27:48GB: Library structures: 3) Modula-like directory-based
27:48GB: Library structures: 3) Modula-like directory-based
29:56AC: How does Zig handle interfacing with future code?
29:56AC: How does Zig handle interfacing with future code?
29:56AC: How does Zig handle interfacing with future code?
30:46AK: Languages want to talk to C, to call machine code
30:46AK: Languages want to talk to C, to call machine code
30:46AK: Languages want to talk to C, to call machine code
31:14AK: Zig's ABI: 1) Using Clang to parse C
31:14AK: Zig's ABI: 1) Using Clang to parse C
31:14AK: Zig's ABI: 1) Using Clang to parse C
32:08AK: Zig's ABI: 2) Exposing Clang in Zig to compile C
32:08AK: Zig's ABI: 2) Exposing Clang in Zig to compile C
32:08AK: Zig's ABI: 2) Exposing Clang in Zig to compile C
32:51AC: User-simplicity, thanks to developer-complexity
32:51AC: User-simplicity, thanks to developer-complexity
32:51AC: User-simplicity, thanks to developer-complexity
33:22AK: Zig development work for each LLVM release
33:22AK: Zig development work for each LLVM release
33:22AK: Zig development work for each LLVM release
33:44AC: What's your experience of porting compilers?
33:44AC: What's your experience of porting compilers?
33:44AC: What's your experience of porting compilers?
34:51JH: Porting compilers
34:51JH: Porting compilers
34:51JH: Porting compilers
35:20JH: GNU's Symbol Versioning5
35:20JH: GNU's Symbol Versioning5
35:20JH: GNU's Symbol Versioning5
35:49AK: glibc specifically?
35:49AK: glibc specifically?
35:49AK: glibc specifically?
35:51JH: Some other software on GNU also does this
35:51JH: Some other software on GNU also does this
35:51JH: Some other software on GNU also does this
36:00AK: What parts of the compiler depended on libraries using Symbol Versioning?
36:00AK: What parts of the compiler depended on libraries using Symbol Versioning?
36:00AK: What parts of the compiler depended on libraries using Symbol Versioning?
36:10JH: GCC / Clang's compiler directive and Jai's @ symbol versioning
36:10JH: GCC / Clang's compiler directive and Jai's @ symbol versioning
36:10JH: GCC / Clang's compiler directive and Jai's @ symbol versioning
36:36AK: So you're talking about versioning the programs generated with the compiler?
36:36AK: So you're talking about versioning the programs generated with the compiler?
36:36AK: So you're talking about versioning the programs generated with the compiler?
36:46JH: How do Odin and Zig handle versioning?
36:46JH: How do Odin and Zig handle versioning?
36:46JH: How do Odin and Zig handle versioning?
37:12AK: Zig's Linux port: 1) Not linking glibc, using the stable syscall ABI
37:12AK: Zig's Linux port: 1) Not linking glibc, using the stable syscall ABI
37:12AK: Zig's Linux port: 1) Not linking glibc, using the stable syscall ABI
37:56AK: Zig's Linux port: 2) Executable generation, targeting a specific version of glibc, and static linking
37:56AK: Zig's Linux port: 2) Executable generation, targeting a specific version of glibc, and static linking
37:56AK: Zig's Linux port: 2) Executable generation, targeting a specific version of glibc, and static linking
38:53JH: Obviously you can't statically link OpenGL?
38:53JH: Obviously you can't statically link OpenGL?
38:53JH: Obviously you can't statically link OpenGL?
39:00AK: Yeah
39:00AK: Yeah
39:00AK: Yeah
39:01JH: How do you work with that?
39:01JH: How do you work with that?
39:01JH: How do you work with that?
39:06AK: Moby-Dick problem: Producing static binaries for games
39:06AK: Moby-Dick problem: Producing static binaries for games
39:06AK: Moby-Dick problem: Producing static binaries for games
39:27AC: Kid gloves in languages
39:27AC: Kid gloves in languages
39:27AC: Kid gloves in languages
40:50GB: "With great power comes great responsibility"
40:50GB: "With great power comes great responsibility"
40:50GB: "With great power comes great responsibility"
42:03GB: A brief history of programming languages
42:03GB: A brief history of programming languages
42:03GB: A brief history of programming languages
43:45GB: C's breakthroughs: 1) Type-system
43:45GB: C's breakthroughs: 1) Type-system
43:45GB: C's breakthroughs: 1) Type-system
44:18GB: C's breakthroughs: 2) Structured
44:18GB: C's breakthroughs: 2) Structured
44:18GB: C's breakthroughs: 2) Structured
44:54AC: Hardware-aware programming
44:54AC: Hardware-aware programming
44:54AC: Hardware-aware programming
46:10GB: "Programming is a tool to solve problems that you have in the domain of computers"
46:10GB: "Programming is a tool to solve problems that you have in the domain of computers"
46:10GB: "Programming is a tool to solve problems that you have in the domain of computers"
46:50GB: "The purpose of a program is, and ought to be, something that transforms data into other forms of data"
46:50GB: "The purpose of a program is, and ought to be, something that transforms data into other forms of data"
46:50GB: "The purpose of a program is, and ought to be, something that transforms data into other forms of data"
47:18AC: Josh and Andrew, are you vibing with us here?
47:18AC: Josh and Andrew, are you vibing with us here?
47:18AC: Josh and Andrew, are you vibing with us here?
47:25AK: Zig is a general-purpose language
47:25AK: Zig is a general-purpose language
47:25AK: Zig is a general-purpose language
48:45AC: Josh, didn't you write a brainfuck compiler recently?
48:45AC: Josh, didn't you write a brainfuck compiler recently?
48:45AC: Josh, didn't you write a brainfuck compiler recently?
48:48JH: brainfuck compiler
48:48JH: brainfuck compiler
48:48JH: brainfuck compiler
49:00GB: That sounds wonderful
49:00GB: That sounds wonderful
49:00GB: That sounds wonderful
49:03AC: How many years have you been a hobby compiler person?
49:03AC: How many years have you been a hobby compiler person?
49:03AC: How many years have you been a hobby compiler person?
49:10JH: Six years as a hobby compiler person
49:10JH: Six years as a hobby compiler person
49:10JH: Six years as a hobby compiler person
49:15AC: Why write compilers for fun?
49:15AC: Why write compilers for fun?
49:15AC: Why write compilers for fun?
50:44JH: Getting into compilers after Jonathon Blow started talking about Jai
50:44JH: Getting into compilers after Jonathon Blow started talking about Jai
50:44JH: Getting into compilers after Jonathon Blow started talking about Jai
51:35AC: How meta do you get with bootstrapping / self-compilation?
51:35AC: How meta do you get with bootstrapping / self-compilation?
51:35AC: How meta do you get with bootstrapping / self-compilation?
52:39AK: Bootstrapping Zig
52:39AK: Bootstrapping Zig
52:39AK: Bootstrapping Zig
55:31AC: Do you get harassed with the question of Zig being self-hosted?
55:31AC: Do you get harassed with the question of Zig being self-hosted?
55:31AC: Do you get harassed with the question of Zig being self-hosted?
55:44AK: The self-hosting question comes with a lot of positive curiosity energy
55:44AK: The self-hosting question comes with a lot of positive curiosity energy
55:44AK: The self-hosting question comes with a lot of positive curiosity energy
55:53AC: What about Odin in terms of usability?
55:53AC: What about Odin in terms of usability?
55:53AC: What about Odin in terms of usability?
56:21GB: Odin's usability, writing in it at JangaFX on the EmberGen project6
56:21GB: Odin's usability, writing in it at JangaFX on the EmberGen project6
56:21GB: Odin's usability, writing in it at JangaFX on the EmberGen project6
59:39AC: Let's dive into that "joy of programming"
59:39AC: Let's dive into that "joy of programming"
59:39AC: Let's dive into that "joy of programming"
1:00:20AK: Zig doesn't really prioritise the day-to-day experience of the programmer
1:00:20AK: Zig doesn't really prioritise the day-to-day experience of the programmer
1:00:20AK: Zig doesn't really prioritise the day-to-day experience of the programmer
1:00:29GB: Zig's maximisation of explicitness vs Odin's minimisation of implicitness
1:00:29GB: Zig's maximisation of explicitness vs Odin's minimisation of implicitness
1:00:29GB: Zig's maximisation of explicitness vs Odin's minimisation of implicitness
1:02:30AC: We're gonna want to dive into those philosophical differences
1:02:30AC: We're gonna want to dive into those philosophical differences
1:02:30AC: We're gonna want to dive into those philosophical differences
1:02:32AK: Zig optimises for the end-user of the software
1:02:32AK: Zig optimises for the end-user of the software
1:02:32AK: Zig optimises for the end-user of the software
1:03:11AC: Developer eating of complexity
1:03:11AC: Developer eating of complexity
1:03:11AC: Developer eating of complexity
1:03:27GB: Odin's approach to complexity, and recommending languages
1:03:27GB: Odin's approach to complexity, and recommending languages
1:03:27GB: Odin's approach to complexity, and recommending languages
1:05:13AK: Shots fired
1:05:13AK: Shots fired
1:05:13AK: Shots fired
1:05:15GB: I love Go
1:05:15GB: I love Go
1:05:15GB: I love Go
1:05:21AC: Gunshots
1:05:21AC: Gunshots
1:05:21AC: Gunshots
1:05:27GB: Rust's ever-complex vs Go's closely-defined approach
1:05:27GB: Rust's ever-complex vs Go's closely-defined approach
1:05:27GB: Rust's ever-complex vs Go's closely-defined approach
1:06:11AK: Go almost added Zig's "try"
1:06:11AK: Go almost added Zig's "try"
1:06:11AK: Go almost added Zig's "try"
1:06:15GB: I was hoping they didn't
1:06:15GB: I was hoping they didn't
1:06:15GB: I was hoping they didn't
1:06:20AK: I was thinking if they did, then Zig would be less far advanced than Go
1:06:20AK: I was thinking if they did, then Zig would be less far advanced than Go
1:06:20AK: I was thinking if they did, then Zig would be less far advanced than Go
1:06:32GB: Zig's exception-like error handling vs Odin's lack thereof
1:06:32GB: Zig's exception-like error handling vs Odin's lack thereof
1:06:32GB: Zig's exception-like error handling vs Odin's lack thereof
1:07:44AC: What's your approach to ABI compatibility?
1:07:44AC: What's your approach to ABI compatibility?
1:07:44AC: What's your approach to ABI compatibility?
1:09:31JH: You should not break the C ABI because everyone uses it
1:09:31JH: You should not break the C ABI because everyone uses it
1:09:31JH: You should not break the C ABI because everyone uses it
1:09:40AC: So why is Go doing it?
1:09:40AC: So why is Go doing it?
1:09:40AC: So why is Go doing it?
1:09:46GB: Google's self-hosting Go vs gccgo
1:09:46GB: Google's self-hosting Go vs gccgo
1:09:46GB: Google's self-hosting Go vs gccgo
1:10:12AK: Sounds like an abusive relationship
1:10:12AK: Sounds like an abusive relationship
1:10:12AK: Sounds like an abusive relationship
1:10:14GB: Go and C's one-way ABI compatibility relationship
1:10:14GB: Go and C's one-way ABI compatibility relationship
1:10:14GB: Go and C's one-way ABI compatibility relationship
1:11:07AK: And the C ABI is not really well-defined
1:11:07AK: And the C ABI is not really well-defined
1:11:07AK: And the C ABI is not really well-defined
1:11:20AC: Isn't there a System V ABI spec somewhere?7
1:11:20AC: Isn't there a System V ABI spec somewhere?7
1:11:20AC: Isn't there a System V ABI spec somewhere?7
1:11:24GB: System V vs MSVC ABI
1:11:24GB: System V vs MSVC ABI
1:11:24GB: System V vs MSVC ABI
1:12:01AC: I'm scared of breaking ABI compatibility
1:12:01AC: I'm scared of breaking ABI compatibility
1:12:01AC: I'm scared of breaking ABI compatibility
1:12:23GB: Language–interface separation
1:12:23GB: Language–interface separation
1:12:23GB: Language–interface separation
1:13:07AK: Compiler-decided internal ABI and external calling conventions
1:13:07AK: Compiler-decided internal ABI and external calling conventions
1:13:07AK: Compiler-decided internal ABI and external calling conventions
1:13:25JH: That's how it was in Jai as well
1:13:25JH: That's how it was in Jai as well
1:13:25JH: That's how it was in Jai as well
1:13:43AC: Improving C's ergonomics
1:13:43AC: Improving C's ergonomics
1:13:43AC: Improving C's ergonomics
1:15:39AK: You can enable a switch for implicit switch-statement fall-through
1:15:39AK: You can enable a switch for implicit switch-statement fall-through
1:15:39AK: You can enable a switch for implicit switch-statement fall-through
1:15:53AC: Are Zig's ergonomics informed by C's?
1:15:53AC: Are Zig's ergonomics informed by C's?
1:15:53AC: Are Zig's ergonomics informed by C's?
1:16:40AK: The Road to Zig 1.08
1:16:40AK: The Road to Zig 1.08
1:16:40AK: The Road to Zig 1.08
1:17:07AC: How about Odin's ergonomics in relation to C?
1:17:07AC: How about Odin's ergonomics in relation to C?
1:17:07AC: How about Odin's ergonomics in relation to C?
1:17:18GB: Everything you wanted in C I've added to Odin
1:17:18GB: Everything you wanted in C I've added to Odin
1:17:18GB: Everything you wanted in C I've added to Odin
1:19:09AK: How do you get the Unicode data for the string stuff?
1:19:09AK: How do you get the Unicode data for the string stuff?
1:19:09AK: How do you get the Unicode data for the string stuff?
1:19:21GB: Odin assumes all strings are UTF-8 and has a string type
1:19:21GB: Odin assumes all strings are UTF-8 and has a string type
1:19:21GB: Odin assumes all strings are UTF-8 and has a string type
1:20:14AK: If the user does toupper(), where are you getting that data from?
1:20:14AK: If the user does toupper(), where are you getting that data from?
1:20:14AK: If the user does toupper(), where are you getting that data from?
1:20:22GB: Unicode table look-up9, Odin's rune codepoint type and C's three byte-types
1:20:22GB: Unicode table look-up9, Odin's rune codepoint type and C's three byte-types
1:20:22GB: Unicode table look-up9, Odin's rune codepoint type and C's three byte-types
1:21:17AK: You're talking about char, unsigned char and signed char, right?
1:21:17AK: You're talking about char, unsigned char and signed char, right?
1:21:17AK: You're talking about char, unsigned char and signed char, right?
1:21:22GB: Correct, yes
1:21:22GB: Correct, yes
1:21:22GB: Correct, yes
1:21:23AC: That's definitely tripped me up in the past
1:21:23AC: That's definitely tripped me up in the past
1:21:23AC: That's definitely tripped me up in the past
1:21:26GB: Finding the semantics of C's byte-types
1:21:26GB: Finding the semantics of C's byte-types
1:21:26GB: Finding the semantics of C's byte-types
1:21:49AC: Josh, do you have other dream improvements to C's ergonomics?
1:21:49AC: Josh, do you have other dream improvements to C's ergonomics?
1:21:49AC: Josh, do you have other dream improvements to C's ergonomics?
1:22:29JH: I have less ergonomic complaints of C
1:22:29JH: I have less ergonomic complaints of C
1:22:29JH: I have less ergonomic complaints of C
1:22:52AC: I guess your focus is on a small set of language features?
1:22:52AC: I guess your focus is on a small set of language features?
1:22:52AC: I guess your focus is on a small set of language features?
1:23:13JH: Special- and general-purpose languages
1:23:13JH: Special- and general-purpose languages
1:23:13JH: Special- and general-purpose languages
1:24:20AC: The value and fun of language exploration
1:24:20AC: The value and fun of language exploration
1:24:20AC: The value and fun of language exploration
1:25:11AK: Undefined variables and semantic communication of values to our tools
1:25:11AK: Undefined variables and semantic communication of values to our tools
1:25:11AK: Undefined variables and semantic communication of values to our tools
1:27:42AC: What would you recommend for pointers assigned later than their initialisation?
1:27:42AC: What would you recommend for pointers assigned later than their initialisation?
1:27:42AC: What would you recommend for pointers assigned later than their initialisation?
1:28:07AK: Try to give it the value as soon as possible, but don't give it 0
1:28:07AK: Try to give it the value as soon as possible, but don't give it 0
1:28:07AK: Try to give it the value as soon as possible, but don't give it 0
1:28:17GB: Zero Is Initialisation (ZII): Making the 0 value useful by default
1:28:17GB: Zero Is Initialisation (ZII): Making the 0 value useful by default
1:28:17GB: Zero Is Initialisation (ZII): Making the 0 value useful by default
1:29:29AC: So passing a cleared struct to a library should elicit some correct (default) behaviour?
1:29:29AC: So passing a cleared struct to a library should elicit some correct (default) behaviour?
1:29:29AC: So passing a cleared struct to a library should elicit some correct (default) behaviour?
1:30:02GB: Yes
1:30:02GB: Yes
1:30:02GB: Yes
1:30:05AK: So does this mean that all the pointers or references in Odin can be null?
1:30:05AK: So does this mean that all the pointers or references in Odin can be null?
1:30:05AK: So does this mean that all the pointers or references in Odin can be null?
1:30:08GB: No! Pointer usage in Odin
1:30:08GB: No! Pointer usage in Odin
1:30:08GB: No! Pointer usage in Odin
1:31:20AK: Can pointers be null?
1:31:20AK: Can pointers be null?
1:31:20AK: Can pointers be null?
1:31:22GB: Pointers can be null, and handling pointer errors
1:31:22GB: Pointers can be null, and handling pointer errors
1:31:22GB: Pointers can be null, and handling pointer errors
1:32:26AK: Null pointers and (un)definition of variables are related
1:32:26AK: Null pointers and (un)definition of variables are related
1:32:26AK: Null pointers and (un)definition of variables are related