Using Introspection Data ⚠ Click here to regain focus ⚠
?
?

Keyboard Navigation

Global Keys

W, A, P / S, D, N Jump to previous / next marker
z Toggle filter mode V Revert filter to original state

Menu toggling

q Quotes r References f Filter c Credits

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

Credits Menu

Enter Open URL (in new tab)
1:46Recap and set the stage for the day
1:46Recap and set the stage for the day
1:46Recap and set the stage for the day
4:06simple_preprocessor.cpp: On understanding the contents of structs
4:06simple_preprocessor.cpp: On understanding the contents of structs
4:06simple_preprocessor.cpp: On understanding the contents of structs
7:31simple_preprocessor.cpp: Make ParseMember take StructTypeToken
7:31simple_preprocessor.cpp: Make ParseMember take StructTypeToken
7:31simple_preprocessor.cpp: Make ParseMember take StructTypeToken
9:11Run the preprocessor and see this new information
9:11Run the preprocessor and see this new information
9:11Run the preprocessor and see this new information
9:55build.bat: Pipe the output of the preprocessor to handmade_generated.h at compile time
9:55build.bat: Pipe the output of the preprocessor to handmade_generated.h at compile time
9:55build.bat: Pipe the output of the preprocessor to handmade_generated.h at compile time
11:13Describe ths metaprogramming workflow
11:13Describe ths metaprogramming workflow
11:13Describe ths metaprogramming workflow
11:40handmade.h: #include handmade_meta.h
11:40handmade.h: #include handmade_meta.h
11:40handmade.h: #include handmade_meta.h
12:00handmade_meta.h: Introduce member_definition and meta_type
12:00handmade_meta.h: Introduce member_definition and meta_type
12:00handmade_meta.h: Introduce member_definition and meta_type
13:48handmade_meta.cpp: #include handmade_generated.h and #include this file in handmade.cpp
13:48handmade_meta.cpp: #include handmade_generated.h and #include this file in handmade.cpp
13:48handmade_meta.cpp: #include handmade_generated.h and #include this file in handmade.cpp
14:38handmade_generated.h: Mention the fact that once this is generated, we always have it
14:38handmade_generated.h: Mention the fact that once this is generated, we always have it
14:38handmade_generated.h: Mention the fact that once this is generated, we always have it
15:19handmade_debug.cpp: Set some values and print them out using DEBUGTextLine
15:19handmade_debug.cpp: Set some values and print them out using DEBUGTextLine
15:19handmade_debug.cpp: Set some values and print them out using DEBUGTextLine
22:18Debugger: Run the game and see these debug values
22:18Debugger: Run the game and see these debug values
22:18Debugger: Run the game and see these debug values
23:15handmade_debug.cpp: Introduce DEBUGDumpStruct
23:15handmade_debug.cpp: Introduce DEBUGDumpStruct
23:15handmade_debug.cpp: Introduce DEBUGDumpStruct
24:58handmade_sim_region.h: Make sim_region introspected
24:58handmade_sim_region.h: Make sim_region introspected
24:58handmade_sim_region.h: Make sim_region introspected
25:46handmade_meta.h: Add the types in sim_region to meta_type
25:46handmade_meta.h: Add the types in sim_region to meta_type
25:46handmade_meta.h: Add the types in sim_region to meta_type
26:24handmade_debug.cpp: Set these values of sim_region and print them out
26:24handmade_debug.cpp: Set these values of sim_region and print them out
26:24handmade_debug.cpp: Set these values of sim_region and print them out
27:25Run the game and see the sim_region printing out
27:25Run the game and see the sim_region printing out
27:25Run the game and see the sim_region printing out
27:47handmade_generated.h: Note that new types have to keep being redefined in handmade_meta.h
27:47handmade_generated.h: Note that new types have to keep being redefined in handmade_meta.h
27:47handmade_generated.h: Note that new types have to keep being redefined in handmade_meta.h
28:28handmade_math.h: introspect rectangle2 and rectangle3
28:28handmade_math.h: introspect rectangle2 and rectangle3
28:28handmade_math.h: introspect rectangle2 and rectangle3
29:10simple_preprocessor.cpp: Process handmade_math.h
29:10simple_preprocessor.cpp: Process handmade_math.h
29:10simple_preprocessor.cpp: Process handmade_math.h
30:11Run the preprocessor and see that these rectangles are now defined
30:11Run the preprocessor and see that these rectangles are now defined
30:11Run the preprocessor and see that these rectangles are now defined
30:45handmade_debug.cpp: Show what we otherwise would have to do to define a new type
30:45handmade_debug.cpp: Show what we otherwise would have to do to define a new type
30:45handmade_debug.cpp: Show what we otherwise would have to do to define a new type
31:55Run the game and view those rectangles
31:55Run the game and view those rectangles
31:55Run the game and view those rectangles
32:08handmade_debug.cpp: Use the meta generator to define rectangle3 for us, and manually define MetaType_v3
32:08handmade_debug.cpp: Use the meta generator to define rectangle3 for us, and manually define MetaType_v3
32:08handmade_debug.cpp: Use the meta generator to define rectangle3 for us, and manually define MetaType_v3
35:47Run the game and see our debug output
35:47Run the game and see our debug output
35:47Run the game and see our debug output
35:58handmade_debug.cpp: Discuss ways to get this code generated for us
35:58handmade_debug.cpp: Discuss ways to get this code generated for us
35:58handmade_debug.cpp: Discuss ways to get this code generated for us
37:48simple_preprocessor.cpp: Introduce meta_struct to enable us to keep track of structs seen
37:48simple_preprocessor.cpp: Introduce meta_struct to enable us to keep track of structs seen
37:48simple_preprocessor.cpp: Introduce meta_struct to enable us to keep track of structs seen
41:51simple_preprocessor.cpp: Printout #define META_HANDLE_TYPE_DUMP and loop over the Meta structs
41:51simple_preprocessor.cpp: Printout #define META_HANDLE_TYPE_DUMP and loop over the Meta structs
41:51simple_preprocessor.cpp: Printout #define META_HANDLE_TYPE_DUMP and loop over the Meta structs
45:11simple_preprocessor.cpp: Take a look at how this injection works
45:11simple_preprocessor.cpp: Take a look at how this injection works
45:11simple_preprocessor.cpp: Take a look at how this injection works
46:01Run the game and see all of this new stuff being printed out
46:01Run the game and see all of this new stuff being printed out
46:01Run the game and see all of this new stuff being printed out
46:14handmade_debug.cpp: Add the concept of an indent level
46:14handmade_debug.cpp: Add the concept of an indent level
46:14handmade_debug.cpp: Add the concept of an indent level
48:50"There's nothing worse than a whiny C compiler"α
48:50"There's nothing worse than a whiny C compiler"α
48:50"There's nothing worse than a whiny C compiler"α
51:29Run the game and see our newly indented output
51:29Run the game and see our newly indented output
51:29Run the game and see our newly indented output
51:52simple_preprocessor.cpp: Print a line to tell us what the member was
51:52simple_preprocessor.cpp: Print a line to tell us what the member was
51:52simple_preprocessor.cpp: Print a line to tell us what the member was
52:38Run the game and look over our generated debug information
52:38Run the game and look over our generated debug information
52:38Run the game and look over our generated debug information
53:20handmade_world.h: introspect world_position
53:20handmade_world.h: introspect world_position
53:20handmade_world.h: introspect world_position
54:47simple_preprocessor.cpp: Process handmade_world.h
54:47simple_preprocessor.cpp: Process handmade_world.h
54:47simple_preprocessor.cpp: Process handmade_world.h
55:02Run the game and see the entity printout
55:02Run the game and see the entity printout
55:02Run the game and see the entity printout
56:24handmade_sim_region.h: introspect everything
56:24handmade_sim_region.h: introspect everything
56:24handmade_sim_region.h: introspect everything
57:39Run the game and notice that pointers aren't handled correctly
57:39Run the game and notice that pointers aren't handled correctly
57:39Run the game and notice that pointers aren't handled correctly
58:36handmade_meta.h: Introduce member_definition_flag
58:36handmade_meta.h: Introduce member_definition_flag
58:36handmade_meta.h: Introduce member_definition_flag
59:14simple_preprocessor.cpp: Recognise pointers
59:14simple_preprocessor.cpp: Recognise pointers
59:14simple_preprocessor.cpp: Recognise pointers
59:46handmade_debug.cpp: Dereference a pointer and skip printing it if it's null
59:46handmade_debug.cpp: Dereference a pointer and skip printing it if it's null
59:46handmade_debug.cpp: Dereference a pointer and skip printing it if it's null
1:00:43Run the game and see it starting to make more sense
1:00:43Run the game and see it starting to make more sense
1:00:43Run the game and see it starting to make more sense
1:00:55handmade_debug.cpp: Set TestCollisionVolumeGroup parameters
1:00:55handmade_debug.cpp: Set TestCollisionVolumeGroup parameters
1:00:55handmade_debug.cpp: Set TestCollisionVolumeGroup parameters
1:03:01Run the game and see this information
1:03:01Run the game and see this information
1:03:01Run the game and see this information
1:03:13handmade_debug.cpp: Set another lot of values, but note that the generator does not know how to handle them
1:03:13handmade_debug.cpp: Set another lot of values, but note that the generator does not know how to handle them
1:03:13handmade_debug.cpp: Set another lot of values, but note that the generator does not know how to handle them
1:03:47handmade_sim_region.h and handmade.h: Introduce counted_pointer
1:03:47handmade_sim_region.h and handmade.h: Introduce counted_pointer
1:03:47handmade_sim_region.h and handmade.h: Introduce counted_pointer
1:04:43simple_preprocessor.cpp: Note that the parser must be aware of how to handle these counted pointers
1:04:43simple_preprocessor.cpp: Note that the parser must be aware of how to handle these counted pointers
1:04:43simple_preprocessor.cpp: Note that the parser must be aware of how to handle these counted pointers
1:05:20On building on our knowledge to progress from basic introspection to metaprogramming
1:05:20On building on our knowledge to progress from basic introspection to metaprogramming
1:05:20On building on our knowledge to progress from basic introspection to metaprogramming
1:06:24Q&A
1:06:24Q&A
1:06:24Q&A
1:07:22ChronalDragon So when you say you've built up multiple layers of metaprogramming, do you mean your metaprograms output things like what we wrote today?
1:07:22ChronalDragon So when you say you've built up multiple layers of metaprogramming, do you mean your metaprograms output things like what we wrote today?
1:07:22ChronalDragon So when you say you've built up multiple layers of metaprogramming, do you mean your metaprograms output things like what we wrote today?
1:07:59nxsy Isn't offsetof fairly safe to rely on with remotely recent compilers?
1:07:59nxsy Isn't offsetof fairly safe to rely on with remotely recent compilers?
1:07:59nxsy Isn't offsetof fairly safe to rely on with remotely recent compilers?
1:08:26handmade.cpp: Try using offsetof
1:08:26handmade.cpp: Try using offsetof
1:08:26handmade.cpp: Try using offsetof
1:10:25blah238 Someone said that the string function you were looking for was called strdup
1:10:25blah238 Someone said that the string function you were looking for was called strdup
1:10:25blah238 Someone said that the string function you were looking for was called strdup
1:10:43garryjohanson In the episode of the Jeff and Casey Show "The Wolf Doesn't Want to Come Anymore" you mentioned that you use metaprogramming techniques to make up for modern language shortcomings. Curious what functionality you have used metaprogramming to achieve that you would have found prohibitive in modern languages? Can you suggest any specific usages to pursue for either program robustness, optimization, etc.?
1:10:43garryjohanson In the episode of the Jeff and Casey Show "The Wolf Doesn't Want to Come Anymore" you mentioned that you use metaprogramming techniques to make up for modern language shortcomings. Curious what functionality you have used metaprogramming to achieve that you would have found prohibitive in modern languages? Can you suggest any specific usages to pursue for either program robustness, optimization, etc.?
1:10:43garryjohanson In the episode of the Jeff and Casey Show "The Wolf Doesn't Want to Come Anymore" you mentioned that you use metaprogramming techniques to make up for modern language shortcomings. Curious what functionality you have used metaprogramming to achieve that you would have found prohibitive in modern languages? Can you suggest any specific usages to pursue for either program robustness, optimization, etc.?
1:12:25ChronalDragon To rephrase, are your "multiply layered" metaprograms outputting further metaprograms? Or is it a single layer that has enough complexity to be considered more than a single pass? (Not sure how to phrase, I was mostly trying to prompt further discussion of what you've mentioned previously)
1:12:25ChronalDragon To rephrase, are your "multiply layered" metaprograms outputting further metaprograms? Or is it a single layer that has enough complexity to be considered more than a single pass? (Not sure how to phrase, I was mostly trying to prompt further discussion of what you've mentioned previously)
1:12:25ChronalDragon To rephrase, are your "multiply layered" metaprograms outputting further metaprograms? Or is it a single layer that has enough complexity to be considered more than a single pass? (Not sure how to phrase, I was mostly trying to prompt further discussion of what you've mentioned previously)
1:14:04JamesWidman Odd... offsetof is defined in MSVC's <stddef.h>, and is specified in C '89 as belonging to that header... Did I miss something?
1:14:04JamesWidman Odd... offsetof is defined in MSVC's <stddef.h>, and is specified in C '89 as belonging to that header... Did I miss something?
1:14:04JamesWidman Odd... offsetof is defined in MSVC's <stddef.h>, and is specified in C '89 as belonging to that header... Did I miss something?
1:15:12Debugger: Use the test project to Go to Definition of offsetof
1:15:12Debugger: Use the test project to Go to Definition of offsetof
1:15:12Debugger: Use the test project to Go to Definition of offsetof
1:17:09binjimin Based on what Jonathan Blow has so far, do you think JAI will have the metaprogramming capabilities that you'd want? If not, what do you think it is missing?
1:17:09binjimin Based on what Jonathan Blow has so far, do you think JAI will have the metaprogramming capabilities that you'd want? If not, what do you think it is missing?
1:17:09binjimin Based on what Jonathan Blow has so far, do you think JAI will have the metaprogramming capabilities that you'd want? If not, what do you think it is missing?
1:18:23paulsm1th You said in a previous stream that you don't really program in C anymore, you basically program in "Caseylang". Does that refer to your metaprogramming tools or is there more to it than that?
1:18:23paulsm1th You said in a previous stream that you don't really program in C anymore, you basically program in "Caseylang". Does that refer to your metaprogramming tools or is there more to it than that?
1:18:23paulsm1th You said in a previous stream that you don't really program in C anymore, you basically program in "Caseylang". Does that refer to your metaprogramming tools or is there more to it than that?
1:18:38d7samurai You're not using header files for OpenGL / Direct3D?
1:18:38d7samurai You're not using header files for OpenGL / Direct3D?
1:18:38d7samurai You're not using header files for OpenGL / Direct3D?
1:18:48sjohn_c Have you worked with any functional languages? Haskell or maybe Scala?
1:18:48sjohn_c Have you worked with any functional languages? Haskell or maybe Scala?
1:18:48sjohn_c Have you worked with any functional languages? Haskell or maybe Scala?
1:19:25blah238 Maybe a bit off topic but going along with the Master Spy thing, have you ever done a stealth game and, if so, what particular programming challenges do stealth mechanics bring that you don't usually have to deal with?
1:19:25blah238 Maybe a bit off topic but going along with the Master Spy thing, have you ever done a stealth game and, if so, what particular programming challenges do stealth mechanics bring that you don't usually have to deal with?
1:19:25blah238 Maybe a bit off topic but going along with the Master Spy thing, have you ever done a stealth game and, if so, what particular programming challenges do stealth mechanics bring that you don't usually have to deal with?
1:20:54Stephenlast Is the syntax of Casey-Lang still very close to C?
1:20:54Stephenlast Is the syntax of Casey-Lang still very close to C?
1:20:54Stephenlast Is the syntax of Casey-Lang still very close to C?
1:21:09insofaras Your metaprogramming tools sound very useful, will you ever open source them, maybe in your will if nothing else?
1:21:09insofaras Your metaprogramming tools sound very useful, will you ever open source them, maybe in your will if nothing else?
1:21:09insofaras Your metaprogramming tools sound very useful, will you ever open source them, maybe in your will if nothing else?
1:22:08Shoozza Will you write your own installer for Handmade Hero? Or just zip it and be done with it?
1:22:08Shoozza Will you write your own installer for Handmade Hero? Or just zip it and be done with it?
1:22:08Shoozza Will you write your own installer for Handmade Hero? Or just zip it and be done with it?
1:23:24boondoggle42 How about writing a Casey-Approved GUI debugger for Jai?
1:23:24boondoggle42 How about writing a Casey-Approved GUI debugger for Jai?
1:23:24boondoggle42 How about writing a Casey-Approved GUI debugger for Jai?
1:24:15JamesWidman I'm looking forward to additional visualizers in the debug view (e.g. a small grid view with a dot or line from (0,0) to represent a v2 along with the decimal digits). Do you think that would be worthwhile?
1:24:15JamesWidman I'm looking forward to additional visualizers in the debug view (e.g. a small grid view with a dot or line from (0,0) to represent a v2 along with the decimal digits). Do you think that would be worthwhile?
1:24:15JamesWidman I'm looking forward to additional visualizers in the debug view (e.g. a small grid view with a dot or line from (0,0) to represent a v2 along with the decimal digits). Do you think that would be worthwhile?
1:25:28garryjohanson Do you ever metaprogram the sims stuff and the job queue?
1:25:28garryjohanson Do you ever metaprogram the sims stuff and the job queue?
1:25:28garryjohanson Do you ever metaprogram the sims stuff and the job queue?
1:27:31vSealos Is there any feature you would add to Jai?
1:27:31vSealos Is there any feature you would add to Jai?
1:27:31vSealos Is there any feature you would add to Jai?
1:30:58Close it down
1:30:58Close it down
1:30:58Close it down
1:33:14Announcement: F2P discussion between Casey and Shawn McGrath on Thursday
1:33:14Announcement: F2P discussion between Casey and Shawn McGrath on Thursday
1:33:14Announcement: F2P discussion between Casey and Shawn McGrath on Thursday