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'
⏬