We are currently in the process of converting the website to the new design. Some pages, like this one, are still broken. We appreciate your patience.
Bitwise»Episode Guide
End-to-End Workflow & Clean-Up
?
?

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:09Recap and set the stage for the day
🗩
0:09Recap and set the stage for the day
🗩
0:09Recap and set the stage for the day
🗩
1:10Review the C code generation work done on Day 010 Extra1
📖
1:10Review the C code generation work done on Day 010 Extra1
📖
1:10Review the C code generation work done on Day 010 Extra1
📖
2:37Run the program to see our generated output
🏃
2:37Run the program to see our generated output
🏃
2:37Run the program to see our generated output
🏃
3:16Toggle on example_test()
3:16Toggle on example_test()
3:16Toggle on example_test()
3:43Run it to see the result of example_test()
🏃
3:43Run it to see the result of example_test()
🏃
3:43Run it to see the result of example_test()
🏃
3:54Continue to review the C code generation work done on Day 010 Extra2
📖
3:54Continue to review the C code generation work done on Day 010 Extra2
📖
3:54Continue to review the C code generation work done on Day 010 Extra2
📖
8:45Determine to work on the end-to-end workflow
🗩
8:45Determine to work on the end-to-end workflow
🗩
8:45Determine to work on the end-to-end workflow
🗩
10:46Create ion.c and introduce ion_compile_file() and ion_compile_str(), and the general utility read_file()
10:46Create ion.c and introduce ion_compile_file() and ion_compile_str(), and the general utility read_file()
10:46Create ion.c and introduce ion_compile_file() and ion_compile_str(), and the general utility read_file()
27:28badflydog pervognsen You should probably use "rb" in fread, I believe the CRT messes with newlines otherwise
🗪
27:28badflydog pervognsen You should probably use "rb" in fread, I believe the CRT messes with newlines otherwise
🗪
27:28badflydog pervognsen You should probably use "rb" in fread, I believe the CRT messes with newlines otherwise
🗪
27:31Fix read_file() to pass "rb" as the second argument to fopen()
27:31Fix read_file() to pass "rb" as the second argument to fopen()
27:31Fix read_file() to pass "rb" as the second argument to fopen()
27:42Run it to see that it works
🏃
27:42Run it to see that it works
🏃
27:42Run it to see that it works
🏃
27:50Explain how fopen() works on Windows
🗩
27:50Explain how fopen() works on Windows
🗩
27:50Explain how fopen() works on Windows
🗩
28:44nothings2 Unless it's actually a single-line file, I suspect it's actually the ^Z at the end of the file, not the CR-LF stuff
🗪
28:44nothings2 Unless it's actually a single-line file, I suspect it's actually the ^Z at the end of the file, not the CR-LF stuff
🗪
28:44nothings2 Unless it's actually a single-line file, I suspect it's actually the ^Z at the end of the file, not the CR-LF stuff
🗪
29:37Introduce ion_test()
29:37Introduce ion_test()
29:37Introduce ion_test()
30:18nothings2 pervognsen The loop should be totally unnecessary for reading an actual file, although reading from a tty or network stream redirected or something, sure
🗪
30:18nothings2 pervognsen The loop should be totally unnecessary for reading an actual file, although reading from a tty or network stream redirected or something, sure
🗪
30:18nothings2 pervognsen The loop should be totally unnecessary for reading an actual file, although reading from a tty or network stream redirected or something, sure
🗪
31:11Create test1.ion
31:11Create test1.ion
31:11Create test1.ion
31:38nothings2 For what it's worth, Posix says "Upon successful completion, fread() shall return the number of elements successfully read which is less than items only if a read error or end-of-file is encountered."
🗪
31:38nothings2 For what it's worth, Posix says "Upon successful completion, fread() shall return the number of elements successfully read which is less than items only if a read error or end-of-file is encountered."
🗪
31:38nothings2 For what it's worth, Posix says "Upon successful completion, fread() shall return the number of elements successfully read which is less than items only if a read error or end-of-file is encountered."
🗪
31:51Make read_file() read in the entire file in one call
31:51Make read_file() read in the entire file in one call
31:51Make read_file() read in the entire file in one call
32:29james4k Zeal looks nice, thanks whoever pointed that out
🗪
32:29james4k Zeal looks nice, thanks whoever pointed that out
🗪
32:29james4k Zeal looks nice, thanks whoever pointed that out
🗪
32:51Run it to see that it still works
🏃
32:51Run it to see that it still works
🏃
32:51Run it to see that it still works
🏃
33:10Enable ion_compile_file() to handle empty files
33:10Enable ion_compile_file() to handle empty files
33:10Enable ion_compile_file() to handle empty files
34:37Run it to see that it actually worked
🏃
34:37Run it to see that it actually worked
🏃
34:37Run it to see that it actually worked
🏃
35:08Enable read_file() to handle 0-length files
35:08Enable read_file() to handle 0-length files
35:08Enable read_file() to handle 0-length files
36:14Run it to see that it works
🏃
36:14Run it to see that it works
🏃
36:14Run it to see that it works
🏃
36:36Add a load of test code to test1.ion
36:36Add a load of test code to test1.ion
36:36Add a load of test code to test1.ion
38:30badflydog Probably Intel shortcuts, I believe you can disable them in the Intel control panel
🗪
38:30badflydog Probably Intel shortcuts, I believe you can disable them in the Intel control panel
🗪
38:30badflydog Probably Intel shortcuts, I believe you can disable them in the Intel control panel
🗪
39:06Finish up adding test code to test1.ion
39:06Finish up adding test code to test1.ion
39:06Finish up adding test code to test1.ion
39:38Run it to see our generated output
🏃
39:38Run it to see our generated output
🏃
39:38Run it to see our generated output
🏃
39:43twitchplaysp0ng Will there be a syntax definition for Ion?
🗪
39:43twitchplaysp0ng Will there be a syntax definition for Ion?
🗪
39:43twitchplaysp0ng Will there be a syntax definition for Ion?
🗪
40:03Introduce write_file()
40:03Introduce write_file()
40:03Introduce write_file()
43:34Run it to find that it works
🏃
43:34Run it to find that it works
🏃
43:34Run it to find that it works
🏃
44:02Enjoy MSCV's regex-matching search
💢
44:02Enjoy MSCV's regex-matching search
💢
44:02Enjoy MSCV's regex-matching search
💢
45:05Introduce get_ext() and replace_ext()
45:05Introduce get_ext() and replace_ext()
45:05Introduce get_ext() and replace_ext()
52:17Run it to see how these file naming functions work
🏃
52:17Run it to see how these file naming functions work
🏃
52:17Run it to see how these file naming functions work
🏃
53:04Enable ion_compile_file() to write out to file
53:04Enable ion_compile_file() to write out to file
53:04Enable ion_compile_file() to write out to file
54:12Run it to find that we successfully write out a .c file
🏃
54:12Run it to find that we successfully write out a .c file
🏃
54:12Run it to find that we successfully write out a .c file
🏃
55:00badflydog In before POSIX strdup warning
🗪
55:00badflydog In before POSIX strdup warning
🗪
55:00badflydog In before POSIX strdup warning
🗪
55:09badflydog pervognsen You should use "wb" in write file as well
🗪
55:09badflydog pervognsen You should use "wb" in write file as well
🗪
55:09badflydog pervognsen You should use "wb" in write file as well
🗪
55:54Temporarily change write_file() to pass "wb" to fopen(), and inspect the (undesired) generated output
55:54Temporarily change write_file() to pass "wb" to fopen(), and inspect the (undesired) generated output
55:54Temporarily change write_file() to pass "wb" to fopen(), and inspect the (undesired) generated output
56:59Create generate_test.py to facilitate the production of many lines of Ion code
56:59Create generate_test.py to facilitate the production of many lines of Ion code
56:59Create generate_test.py to facilitate the production of many lines of Ion code
1:02:01heasummn pervognsen Do we want to focus heavily on optimisation in the C version since we will rewrite it eventually?
🗪
1:02:01heasummn pervognsen Do we want to focus heavily on optimisation in the C version since we will rewrite it eventually?
🗪
1:02:01heasummn pervognsen Do we want to focus heavily on optimisation in the C version since we will rewrite it eventually?
🗪
1:03:00Change generate_test.py to use regex
1:03:00Change generate_test.py to use regex
1:03:00Change generate_test.py to use regex
1:05:20Run it to see that it works
🏃
1:05:20Run it to see that it works
🏃
1:05:20Run it to see that it works
🏃
1:05:25Enable generate_test.py to generate a fair amount of code
1:05:25Enable generate_test.py to generate a fair amount of code
1:05:25Enable generate_test.py to generate a fair amount of code
1:07:42Determine to compare the compilation times of gcc and ion
🏃
1:07:42Determine to compare the compilation times of gcc and ion
🏃
1:07:42Determine to compare the compilation times of gcc and ion
🏃
1:08:10Enable syntax_error() and fatal_syntax_error() to report the line number containing the error
1:08:10Enable syntax_error() and fatal_syntax_error() to report the line number containing the error
1:08:10Enable syntax_error() and fatal_syntax_error() to report the line number containing the error
1:10:02Run it and hit an error on line 1
🏃
1:10:02Run it and hit an error on line 1
🏃
1:10:02Run it and hit an error on line 1
🏃
1:10:11Enable main() to call init_keywords(), the latter to set arena_end after calling KEYWORD(typedef), and increase the ARENA_BLOCK_SIZE from 1024 to 1024 * 1024
1:10:11Enable main() to call init_keywords(), the latter to set arena_end after calling KEYWORD(typedef), and increase the ARENA_BLOCK_SIZE from 1024 to 1024 * 1024
1:10:11Enable main() to call init_keywords(), the latter to set arena_end after calling KEYWORD(typedef), and increase the ARENA_BLOCK_SIZE from 1024 to 1024 * 1024
1:12:55Run it to find that it does the right thing
🏃
1:12:55Run it to find that it does the right thing
🏃
1:12:55Run it to find that it does the right thing
🏃
1:13:25Introduce ion_main(), and print out compilation success / failure
1:13:25Introduce ion_main(), and print out compilation success / failure
1:13:25Introduce ion_main(), and print out compilation success / failure
1:16:00Run it (successfully) on test1.ion and (unsuccessfully) on test2.ion
🏃
1:16:00Run it (successfully) on test1.ion and (unsuccessfully) on test2.ion
🏃
1:16:00Run it (successfully) on test1.ion and (unsuccessfully) on test2.ion
🏃
1:16:52Enable init_stream() and the error handling functions to handle anonymous sources (i.e. ones lacking a file path)
1:16:52Enable init_stream() and the error handling functions to handle anonymous sources (i.e. ones lacking a file path)
1:16:52Enable init_stream() and the error handling functions to handle anonymous sources (i.e. ones lacking a file path)
1:20:14Run it and no longer hit the "FATAL: Undeclared name" error
🏃
1:20:14Run it and no longer hit the "FATAL: Undeclared name" error
🏃
1:20:14Run it and no longer hit the "FATAL: Undeclared name" error
🏃
1:20:58Make ion_compile_file() pass the path to init_stream()
1:20:58Make ion_compile_file() pass the path to init_stream()
1:20:58Make ion_compile_file() pass the path to init_stream()
1:21:04Run it to find that it all works as desired
🏃
1:21:04Run it to find that it all works as desired
🏃
1:21:04Run it to find that it all works as desired
🏃
1:21:18Introduce SrcLoc struct, and pull fatal(), syntax_error() and fatal_syntax_error() out into a new error.c file, and introduce loc_syntax_error()
1:21:18Introduce SrcLoc struct, and pull fatal(), syntax_error() and fatal_syntax_error() out into a new error.c file, and introduce loc_syntax_error()
1:21:18Introduce SrcLoc struct, and pull fatal(), syntax_error() and fatal_syntax_error() out into a new error.c file, and introduce loc_syntax_error()
1:28:00Run it to find that it all works
🏃
1:28:00Run it to find that it all works
🏃
1:28:00Run it to find that it all works
🏃
1:28:08Rename loc_syntax_error() to error(), make resolve_typespec() call it, and provoke a "must denote a type" error
1:28:08Rename loc_syntax_error() to error(), make resolve_typespec() call it, and provoke a "must denote a type" error
1:28:08Rename loc_syntax_error() to error(), make resolve_typespec() call it, and provoke a "must denote a type" error
1:31:09Run it, correctly hit the error, but segfault
🏃
1:31:09Run it, correctly hit the error, but segfault
🏃
1:31:09Run it, correctly hit the error, but segfault
🏃
1:31:16Introduce fatal_error() for resolve_typespec() to call
1:31:16Introduce fatal_error() for resolve_typespec() to call
1:31:16Introduce fatal_error() for resolve_typespec() to call
1:31:57Run it to find that it works
🏃
1:31:57Run it to find that it works
🏃
1:31:57Run it to find that it works
🏃
1:32:06Q&A
🗩
1:32:06Q&A
🗩
1:32:06Q&A
🗩
1:32:20heasummn pervognsen You do sizeof(p), that should have a (?)
🗪
1:32:20heasummn pervognsen You do sizeof(p), that should have a (?)
🗪
1:32:20heasummn pervognsen You do sizeof(p), that should have a (?)
🗪
1:32:29Fix generate_test.py as per heasummn's suggestion
1:32:29Fix generate_test.py as per heasummn's suggestion
1:32:29Fix generate_test.py as per heasummn's suggestion
1:33:11Run it find that it worked
🏃
1:33:11Run it find that it worked
🏃
1:33:11Run it find that it worked
🏃
1:33:13Make generate_test.py produce much more code
1:33:13Make generate_test.py produce much more code
1:33:13Make generate_test.py produce much more code
1:33:18Run it to find that it compiles slowly
🏃
1:33:18Run it to find that it compiles slowly
🏃
1:33:18Run it to find that it compiles slowly
🏃
1:34:45praet_a51 Also path is declared but not used
🗪
1:34:45praet_a51 Also path is declared but not used
🗪
1:34:45praet_a51 Also path is declared but not used
🗪
1:35:04Fix ion_main() to pass path to ion_compile_file()
1:35:04Fix ion_main() to pass path to ion_compile_file()
1:35:04Fix ion_main() to pass path to ion_compile_file()
1:35:13cubercaleb pervognsen Can you run a test with -O2 or -O3 to see how fast ion is with optimizations?
🗪
1:35:13cubercaleb pervognsen Can you run a test with -O2 or -O3 to see how fast ion is with optimizations?
🗪
1:35:13cubercaleb pervognsen Can you run a test with -O2 or -O3 to see how fast ion is with optimizations?
🗪
1:35:22Compile Ion with -O3 to see that it's still slower than it should be
1:35:22Compile Ion with -O3 to see that it's still slower than it should be
1:35:22Compile Ion with -O3 to see that it's still slower than it should be
1:35:51xanatos387 As far as speed goes, we still don't have a hashtable interning right?
🗪
1:35:51xanatos387 As far as speed goes, we still don't have a hashtable interning right?
🗪
1:35:51xanatos387 As far as speed goes, we still don't have a hashtable interning right?
🗪
1:36:09Make generate_test.py produce 16× more code
1:36:09Make generate_test.py produce 16× more code
1:36:09Make generate_test.py produce 16× more code
1:36:41Run it to find that it takes forever
🏃
1:36:41Run it to find that it takes forever
🏃
1:36:41Run it to find that it takes forever
🏃
1:36:51praet_a51 Could trading from disk itself be an issue as well
🗪
1:36:51praet_a51 Could trading from disk itself be an issue as well
🗪
1:36:51praet_a51 Could trading from disk itself be an issue as well
🗪
1:37:40twitchplaysp0ng Where in the code is n^2
🗪
1:37:40twitchplaysp0ng Where in the code is n^2
🗪
1:37:40twitchplaysp0ng Where in the code is n^2
🗪
1:38:58heasummn Could you use Visual Studio's profiler to see what's causing the most slowdown?
🗪
1:38:58heasummn Could you use Visual Studio's profiler to see what's causing the most slowdown?
🗪
1:38:58heasummn Could you use Visual Studio's profiler to see what's causing the most slowdown?
🗪
1:39:01See how long it took
🏃
1:39:01See how long it took
🏃
1:39:01See how long it took
🏃
1:39:35praet_a51 Are we optimising a bit today or will that start of tomorrow
🗪
1:39:35praet_a51 Are we optimising a bit today or will that start of tomorrow
🗪
1:39:35praet_a51 Are we optimising a bit today or will that start of tomorrow
🗪
1:39:41godling72 pervognsen Isn't a bit of premature optimization? You aren't close to having 650k of real ion code?
🗪
1:39:41godling72 pervognsen Isn't a bit of premature optimization? You aren't close to having 650k of real ion code?
🗪
1:39:41godling72 pervognsen Isn't a bit of premature optimization? You aren't close to having 650k of real ion code?
🗪
1:40:06Stop recording
🗩
1:40:06Stop recording
🗩
1:40:06Stop recording
🗩