The Race to Replace C and C++
?
?
W, K, P / S, J, N Jump to previous / next timestamp
t / T Toggle theatre / SUPERtheatre mode
V Revert filter to original state Y Select link (requires manual Ctrl-c)
X, ShiftSpace Toggle category and focus previous
v Invert topics / media as per focus
Keyboard Navigation
Global Keys
[, < / ], > Jump to previous / next episodeW, K, P / S, J, N Jump to previous / next timestamp
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 CreditsIn-Menu and Index Controls
a
w
s
s
d
h
j
k
l
←
↑
↓
↓
→
Esc Close menu / unfocus timestamp
Quotes and References Menus and Index
Enter Jump to timestampQuotes, References and Credits Menus
o Open URL (in new tab)Filter Menu
x, Space Toggle category and focus nextX, ShiftSpace Toggle category and focus previous
v Invert topics / media as per focus
Filter and Link Menus
z Toggle filter / linking modeCredits Menu
Enter Open URL (in new tab)⏫
Previous: ‘You CAN teach an old programmer new paradigms!’
⏫
0:43: Welcome to the podcast
0:43: Welcome to the podcast
0:43: Welcome to the podcast
1:12: What's your professional history with compilers, Andrew?
1:12: What's your professional history with compilers, Andrew?
1:12: What's your professional history with compilers, Andrew?
1:52: No professional history with compilers
1:52: No professional history with compilers
1:52: No professional history with compilers
2:49: Why Zig
2:49: Why Zig
2:49: Why Zig
3:37: How do people find Zig?
3:37: How do people find Zig?
3:37: How do people find Zig?
3:51: Zig's decentralised community1
3:51: Zig's decentralised community1
3:51: Zig's decentralised community1
4:28: What's your relationship with LLVM?
4:28: What's your relationship with LLVM?
4:28: What's your relationship with LLVM?
4:37: Ever-loosening relationship with LLVM, as training wheels
4:37: Ever-loosening relationship with LLVM, as training wheels
4:37: Ever-loosening relationship with LLVM, as training wheels
5:42: So Zig began as a hobby and evolved into a full-time endeavour?
5:42: So Zig began as a hobby and evolved into a full-time endeavour?
5:42: So Zig began as a hobby and evolved into a full-time endeavour?
6:02: Zig's progress to a full-time project
6:02: Zig's progress to a full-time project
6:02: Zig's progress to a full-time project
6:29: Let's introduce Ginger Bill
6:29: Let's introduce Ginger Bill
6:29: Let's introduce Ginger Bill
7:06: Hello!
7:06: Hello!
7:06: Hello!
7:09: What's your professional history of compilers, Ginger?
7:09: What's your professional history of compilers, Ginger?
7:09: What's your professional history of compilers, Ginger?
7:45: Zero professional history of compilers, and the evolution of Odin2,3
7:45: Zero professional history of compilers, and the evolution of Odin2,3
7:45: Zero professional history of compilers, and the evolution of Odin2,3
10:02: This sounds like a not very academic endeavour
10:02: This sounds like a not very academic endeavour
10:02: This sounds like a not very academic endeavour
10:55: Practical learning
10:55: Practical learning
10:55: Practical learning
11:31: Was Zig also written with slight academic understanding?
11:31: Was Zig also written with slight academic understanding?
11:31: Was Zig also written with slight academic understanding?
11:48: Practical reasoning coupling with academic theory
11:48: Practical reasoning coupling with academic theory
11:48: Practical reasoning coupling with academic theory
12:49: We do have Josh
12:49: We do have Josh
12:49: We do have Josh
13:10: Hi!
13:10: Hi!
13:10: Hi!
13:15: Casual introduction of hidden complexity
13:15: Casual introduction of hidden complexity
13:15: Casual introduction of hidden complexity
15:34: Zig's "no hidden control flow, no hidden memory allocations"4
15:34: Zig's "no hidden control flow, no hidden memory allocations"4
15:34: Zig's "no hidden control flow, no hidden memory allocations"4
16:59: How does that compare to Odin?
16:59: How does that compare to Odin?
16:59: How does that compare to Odin?
17:04: Odin's context allocators
17:04: Odin's context allocators
17:04: Odin's context allocators
17:58: Simplicity is complicated
17:58: Simplicity is complicated
17:58: Simplicity is complicated
19:51: I love your point about "what does simple mean?"
19:51: I love your point about "what does simple mean?"
19:51: I love your point about "what does simple mean?"
19:58: Implicit worldviews
19:58: Implicit worldviews
19:58: Implicit worldviews
20:17: Information theory-based simplicity, file path encoding
20:17: Information theory-based simplicity, file path encoding
20:17: Information theory-based simplicity, file path encoding
21:19: Simplicity in Vulkan vs OpenGL
21:19: Simplicity in Vulkan vs OpenGL
21:19: Simplicity in Vulkan vs OpenGL
22:15: What's your take on simplicity, Josh?
22:15: What's your take on simplicity, Josh?
22:15: What's your take on simplicity, Josh?
23:13: Writing inline then splitting things off where this makes sense
23:13: Writing inline then splitting things off where this makes sense
23:13: Writing inline then splitting things off where this makes sense
23:56: But then Java wouldn't be the ideal language for you
23:56: But then Java wouldn't be the ideal language for you
23:56: But then Java wouldn't be the ideal language for you
24:00: You could technically do it
24:00: You could technically do it
24:00: You could technically do it
24:07: How does Odin handle encapsulation?
24:07: How does Odin handle encapsulation?
24:07: How does Odin handle encapsulation?
24:57: Odin's encapsulation, at the library level
24:57: Odin's encapsulation, at the library level
24:57: Odin's encapsulation, at the library level
25:58: Library structures: 1) C-like textual include
25:58: Library structures: 1) C-like textual include
25:58: Library structures: 1) C-like textual include
26:45: Library structures: 2) Python-like file-based
26:45: Library structures: 2) Python-like file-based
26:45: Library structures: 2) Python-like file-based
27:48: Library structures: 3) Modula-like directory-based
27:48: Library structures: 3) Modula-like directory-based
27:48: Library structures: 3) Modula-like directory-based
29:56: How does Zig handle interfacing with future code?
29:56: How does Zig handle interfacing with future code?
29:56: How does Zig handle interfacing with future code?
30:46: Languages want to talk to C, to call machine code
30:46: Languages want to talk to C, to call machine code
30:46: Languages want to talk to C, to call machine code
31:14: Zig's ABI: 1) Using Clang to parse C
31:14: Zig's ABI: 1) Using Clang to parse C
31:14: Zig's ABI: 1) Using Clang to parse C
32:08: Zig's ABI: 2) Exposing Clang in Zig to compile C
32:08: Zig's ABI: 2) Exposing Clang in Zig to compile C
32:08: Zig's ABI: 2) Exposing Clang in Zig to compile C
32:51: User-simplicity, thanks to developer-complexity
32:51: User-simplicity, thanks to developer-complexity
32:51: User-simplicity, thanks to developer-complexity
33:22: Zig development work for each LLVM release
33:22: Zig development work for each LLVM release
33:22: Zig development work for each LLVM release
36:36: So you're talking about versioning the programs generated with the compiler?
36:36: So you're talking about versioning the programs generated with the compiler?
36:36: So you're talking about versioning the programs generated with the compiler?
36:46: How do Odin and Zig handle versioning?
36:46: How do Odin and Zig handle versioning?
36:46: How do Odin and Zig handle versioning?
39:27: Kid gloves in languages
39:27: Kid gloves in languages
39:27: Kid gloves in languages
40:50: "With great power comes great responsibility"
40:50: "With great power comes great responsibility"
40:50: "With great power comes great responsibility"
42:03: A brief history of programming languages
42:03: A brief history of programming languages
42:03: A brief history of programming languages
43:45: C's breakthroughs: 1) Type-system
43:45: C's breakthroughs: 1) Type-system
43:45: C's breakthroughs: 1) Type-system
44:18: C's breakthroughs: 2) Structured
44:18: C's breakthroughs: 2) Structured
44:18: C's breakthroughs: 2) Structured
44:54: Hardware-aware programming
44:54: Hardware-aware programming
44:54: Hardware-aware programming
46:10: "Programming is a tool to solve problems that you have in the domain of computers"
46:10: "Programming is a tool to solve problems that you have in the domain of computers"
46:10: "Programming is a tool to solve problems that you have in the domain of computers"
46:50: "The purpose of a program is, and ought to be, something that transforms data into other forms of data"
46:50: "The purpose of a program is, and ought to be, something that transforms data into other forms of data"
46:50: "The purpose of a program is, and ought to be, something that transforms data into other forms of data"
47:18: Josh and Andrew, are you vibing with us here?
47:18: Josh and Andrew, are you vibing with us here?
47:18: Josh and Andrew, are you vibing with us here?
47:25: Zig is a general-purpose language
47:25: Zig is a general-purpose language
47:25: Zig is a general-purpose language
48:45: Josh, didn't you write a brainfuck compiler recently?
48:45: Josh, didn't you write a brainfuck compiler recently?
48:45: Josh, didn't you write a brainfuck compiler recently?
48:48: brainfuck compiler
48:48: brainfuck compiler
48:48: brainfuck compiler
49:00: That sounds wonderful
49:00: That sounds wonderful
49:00: That sounds wonderful
49:03: How many years have you been a hobby compiler person?
49:03: How many years have you been a hobby compiler person?
49:03: How many years have you been a hobby compiler person?
49:10: Six years as a hobby compiler person
49:10: Six years as a hobby compiler person
49:10: Six years as a hobby compiler person
49:15: Why write compilers for fun?
49:15: Why write compilers for fun?
49:15: Why write compilers for fun?
50:44: Getting into compilers after Jonathon Blow started talking about Jai
50:44: Getting into compilers after Jonathon Blow started talking about Jai
50:44: Getting into compilers after Jonathon Blow started talking about Jai
51:35: How meta do you get with bootstrapping / self-compilation?
51:35: How meta do you get with bootstrapping / self-compilation?
51:35: How meta do you get with bootstrapping / self-compilation?
52:39: Bootstrapping Zig
52:39: Bootstrapping Zig
52:39: Bootstrapping Zig
55:31: Do you get harassed with the question of Zig being self-hosted?
55:31: Do you get harassed with the question of Zig being self-hosted?
55:31: Do you get harassed with the question of Zig being self-hosted?
55:44: The self-hosting question comes with a lot of positive curiosity energy
55:44: The self-hosting question comes with a lot of positive curiosity energy
55:44: The self-hosting question comes with a lot of positive curiosity energy
55:53: What about Odin in terms of usability?
55:53: What about Odin in terms of usability?
55:53: What about Odin in terms of usability?
56:21: Odin's usability, writing in it at JangaFX on the EmberGen project6
56:21: Odin's usability, writing in it at JangaFX on the EmberGen project6
56:21: Odin's usability, writing in it at JangaFX on the EmberGen project6
59:39: Let's dive into that "joy of programming"
59:39: Let's dive into that "joy of programming"
59:39: Let's dive into that "joy of programming"
1:00:20: Zig doesn't really prioritise the day-to-day experience of the programmer
1:00:20: Zig doesn't really prioritise the day-to-day experience of the programmer
1:00:20: Zig doesn't really prioritise the day-to-day experience of the programmer
1:00:29: Zig's maximisation of explicitness vs Odin's minimisation of implicitness
1:00:29: Zig's maximisation of explicitness vs Odin's minimisation of implicitness
1:00:29: Zig's maximisation of explicitness vs Odin's minimisation of implicitness
1:02:30: We're gonna want to dive into those philosophical differences
1:02:30: We're gonna want to dive into those philosophical differences
1:02:30: We're gonna want to dive into those philosophical differences
1:02:32: Zig optimises for the end-user of the software
1:02:32: Zig optimises for the end-user of the software
1:02:32: Zig optimises for the end-user of the software
1:03:11: Developer eating of complexity
1:03:11: Developer eating of complexity
1:03:11: Developer eating of complexity
1:03:27: Odin's approach to complexity, and recommending languages
1:03:27: Odin's approach to complexity, and recommending languages
1:03:27: Odin's approach to complexity, and recommending languages
1:05:13: Shots fired
1:05:13: Shots fired
1:05:13: Shots fired
1:05:15: I love Go
1:05:15: I love Go
1:05:15: I love Go
1:05:21: Gunshots
1:05:21: Gunshots
1:05:21: Gunshots
1:05:27: Rust's ever-complex vs Go's closely-defined approach
1:05:27: Rust's ever-complex vs Go's closely-defined approach
1:05:27: Rust's ever-complex vs Go's closely-defined approach
1:06:11: Go almost added Zig's "try"
1:06:11: Go almost added Zig's "try"
1:06:11: Go almost added Zig's "try"
1:06:15: I was hoping they didn't
1:06:15: I was hoping they didn't
1:06:15: I was hoping they didn't
1:06:20: I was thinking if they did, then Zig would be less far advanced than Go
1:06:20: I was thinking if they did, then Zig would be less far advanced than Go
1:06:20: I was thinking if they did, then Zig would be less far advanced than Go
1:06:32: Zig's exception-like error handling vs Odin's lack thereof
1:06:32: Zig's exception-like error handling vs Odin's lack thereof
1:06:32: Zig's exception-like error handling vs Odin's lack thereof
1:07:44: What's your approach to ABI compatibility?
1:07:44: What's your approach to ABI compatibility?
1:07:44: What's your approach to ABI compatibility?
1:09:31: You should not break the C ABI because everyone uses it
1:09:31: You should not break the C ABI because everyone uses it
1:09:31: You should not break the C ABI because everyone uses it
1:09:40: So why is Go doing it?
1:09:40: So why is Go doing it?
1:09:40: So why is Go doing it?
1:09:46: Google's self-hosting Go vs gccgo
1:09:46: Google's self-hosting Go vs gccgo
1:09:46: Google's self-hosting Go vs gccgo
1:10:12: Sounds like an abusive relationship
1:10:12: Sounds like an abusive relationship
1:10:12: Sounds like an abusive relationship
1:10:14: Go and C's one-way ABI compatibility relationship
1:10:14: Go and C's one-way ABI compatibility relationship
1:10:14: Go and C's one-way ABI compatibility relationship
1:11:07: And the C ABI is not really well-defined
1:11:07: And the C ABI is not really well-defined
1:11:07: And the C ABI is not really well-defined
1:11:20: Isn't there a System V ABI spec somewhere?7
1:11:20: Isn't there a System V ABI spec somewhere?7
1:11:20: Isn't there a System V ABI spec somewhere?7
1:11:24: System V vs MSVC ABI
1:11:24: System V vs MSVC ABI
1:11:24: System V vs MSVC ABI
1:12:01: I'm scared of breaking ABI compatibility
1:12:01: I'm scared of breaking ABI compatibility
1:12:01: I'm scared of breaking ABI compatibility
1:12:23: Language–interface separation
1:12:23: Language–interface separation
1:12:23: Language–interface separation
1:13:07: Compiler-decided internal ABI and external calling conventions
1:13:07: Compiler-decided internal ABI and external calling conventions
1:13:07: Compiler-decided internal ABI and external calling conventions
1:13:25: That's how it was in Jai as well
1:13:25: That's how it was in Jai as well
1:13:25: That's how it was in Jai as well
1:13:43: Improving C's ergonomics
1:13:43: Improving C's ergonomics
1:13:43: Improving C's ergonomics
1:15:39: You can enable a switch for implicit switch-statement fall-through
1:15:39: You can enable a switch for implicit switch-statement fall-through
1:15:39: You can enable a switch for implicit switch-statement fall-through
1:15:53: Are Zig's ergonomics informed by C's?
1:15:53: Are Zig's ergonomics informed by C's?
1:15:53: Are Zig's ergonomics informed by C's?
1:16:40: The Road to Zig 1.08
1:16:40: The Road to Zig 1.08
1:16:40: The Road to Zig 1.08
1:17:07: How about Odin's ergonomics in relation to C?
1:17:07: How about Odin's ergonomics in relation to C?
1:17:07: How about Odin's ergonomics in relation to C?
1:17:18: Everything you wanted in C I've added to Odin
1:17:18: Everything you wanted in C I've added to Odin
1:17:18: Everything you wanted in C I've added to Odin
1:19:09: How do you get the Unicode data for the string stuff?
1:19:09: How do you get the Unicode data for the string stuff?
1:19:09: How do you get the Unicode data for the string stuff?
1:19:21: Odin assumes all strings are UTF-8 and has a string type
1:19:21: Odin assumes all strings are UTF-8 and has a string type
1:19:21: Odin assumes all strings are UTF-8 and has a string type
1:20:14: If the user does toupper(), where are you getting that data from?
1:20:14: If the user does toupper(), where are you getting that data from?
1:20:14: If the user does toupper(), where are you getting that data from?
1:20:22: Unicode table look-up9, Odin's rune codepoint type and C's three byte-types
1:20:22: Unicode table look-up9, Odin's rune codepoint type and C's three byte-types
1:20:22: Unicode table look-up9, Odin's rune codepoint type and C's three byte-types
1:21:17: You're talking about char, unsigned char and signed char, right?
1:21:17: You're talking about char, unsigned char and signed char, right?
1:21:17: You're talking about char, unsigned char and signed char, right?
1:21:22: Correct, yes
1:21:22: Correct, yes
1:21:22: Correct, yes
1:21:23: That's definitely tripped me up in the past
1:21:23: That's definitely tripped me up in the past
1:21:23: That's definitely tripped me up in the past
1:21:26: Finding the semantics of C's byte-types
1:21:26: Finding the semantics of C's byte-types
1:21:26: Finding the semantics of C's byte-types
1:21:49: Josh, do you have other dream improvements to C's ergonomics?
1:21:49: Josh, do you have other dream improvements to C's ergonomics?
1:21:49: Josh, do you have other dream improvements to C's ergonomics?
1:22:29: I have less ergonomic complaints of C
1:22:29: I have less ergonomic complaints of C
1:22:29: I have less ergonomic complaints of C
1:22:52: I guess your focus is on a small set of language features?
1:22:52: I guess your focus is on a small set of language features?
1:22:52: I guess your focus is on a small set of language features?
1:23:13: Special- and general-purpose languages
1:23:13: Special- and general-purpose languages
1:23:13: Special- and general-purpose languages
1:24:20: The value and fun of language exploration
1:24:20: The value and fun of language exploration
1:24:20: The value and fun of language exploration
1:25:11: Undefined variables and semantic communication of values to our tools
1:25:11: Undefined variables and semantic communication of values to our tools
1:25:11: Undefined variables and semantic communication of values to our tools
1:27:42: What would you recommend for pointers assigned later than their initialisation?
1:27:42: What would you recommend for pointers assigned later than their initialisation?
1:27:42: What would you recommend for pointers assigned later than their initialisation?
1:28:07: Try to give it the value as soon as possible, but don't give it 0
1:28:07: Try to give it the value as soon as possible, but don't give it 0
1:28:07: Try to give it the value as soon as possible, but don't give it 0
1:28:17: Zero Is Initialisation (ZII): Making the 0 value useful by default
1:28:17: Zero Is Initialisation (ZII): Making the 0 value useful by default
1:28:17: Zero Is Initialisation (ZII): Making the 0 value useful by default
1:29:29: So passing a cleared struct to a library should elicit some correct (default) behaviour?
1:29:29: So passing a cleared struct to a library should elicit some correct (default) behaviour?
1:29:29: So passing a cleared struct to a library should elicit some correct (default) behaviour?
1:30:02: Yes
1:30:02: Yes
1:30:02: Yes
1:30:05: So does this mean that all the pointers or references in Odin can be null?
1:30:05: So does this mean that all the pointers or references in Odin can be null?
1:30:05: So does this mean that all the pointers or references in Odin can be null?
1:30:08: No! Pointer usage in Odin
1:30:08: No! Pointer usage in Odin
1:30:08: No! Pointer usage in Odin
1:31:20: Can pointers be null?
1:31:20: Can pointers be null?
1:31:20: Can pointers be null?
1:31:22: Pointers can be null, and handling pointer errors
1:31:22: Pointers can be null, and handling pointer errors
1:31:22: Pointers can be null, and handling pointer errors
1:32:26: Null pointers and (un)definition of variables are related
1:32:26: Null pointers and (un)definition of variables are related
1:32:26: Null pointers and (un)definition of variables are related
⏬
Next: ‘Linux Kernel Adventures’
⏬