From 90e65d320f69d6741d8e105465534d784f6e9fbd Mon Sep 17 00:00:00 2001 From: Matt Mascarenhas Date: Wed, 27 Jun 2018 19:51:53 +0100 Subject: [PATCH] Annotate bitwise043 --- pervognsen/bitwise/bitwise/bitwise043.hmml | 37 ++++++++++++++++++++++ 1 file changed, 37 insertions(+) create mode 100644 pervognsen/bitwise/bitwise/bitwise043.hmml diff --git a/pervognsen/bitwise/bitwise/bitwise043.hmml b/pervognsen/bitwise/bitwise/bitwise043.hmml new file mode 100644 index 0000000..8ea4fe7 --- /dev/null +++ b/pervognsen/bitwise/bitwise/bitwise043.hmml @@ -0,0 +1,37 @@ +[video member=pervognsen stream_platform=twitch project=bitwise title="Domain-Specific Languages In Python" vod_platform=youtube id=4gJOiQbhWWM annotator=Miblo] +[0:09][Recap and set the stage for the day][:speech] +[0:34][Review some off-stream :optimisation on the lowered jump table-based switch statement][:asm :language :speech] +[5:30][Being careful of associativity when flattening expressions and register allocations, with another mention of the Sethi–Ullman algorithm[ref + site=Wikipedia + page="Sethi–Ullman algorithm" + url=https://en.wikipedia.org/wiki/Sethi%E2%80%93Ullman_algorithm]][:asm :language :speech] +[12:00][Setup to cover domain-specific languages in Python][:language :speech] +[15:46][Dive into building up an abstract syntax tree for our logic design code, starting by :parsing the & operator][:"data structure" :language] +[20:42][:Run it to find that it does execute][:language] +[21:11][Parse the | operator and introduce UnaryNode][:language :parsing] +[24:02][Note why __not__ doesn't exist in Python][:language :speech] +[25:11][Guard against erroneous boolean comparison of variables][:parsing] +[25:54][:Run it to see our intended error] +[27:50][Fix the \~ Node to use __invert__ (rather than __inv__)][:parsing] +[28:13][Note that we're building up a graph rather than a tree][:parsing :speech] +[30:43][Introduce the notion of a ConstantNode, and as_node()][:language :parsing] +[34:30][A few words on Python's reverse operator overload methods][:language :speech] +[38:18][Rename InputNode to VariableNode and input() to var()][:language :parsing] +[39:16][Consider how to handle out-of-range errors for bitwise-not in Python][:language :parsing :speech] +[44:12][Enable as_node() to handle out-of-range errors on ints by taking their least significant bit][:language] +[45:05][@elavid][I guess "1 & x" tries to run the int class __and__ function first, and when that throws some exception it tries Per's __rand__ function instead][:language] +[47:27][Determine to create a simple interpreter][:language :parsing :speech] +[49:09][Embark on a simple interpreter, introducing evaluate() and related functions][:language :parsing] +[57:02][Test evaluate() to see that it all works as expected][:language :parsing :run] +[1:01:28][Construct a nested tree 16 levels deep for evaluate() to evaluate][:language] +[1:06:33][:Run it to see that the :performance of our evaluate() is terrible, on 16 and 32 levels deep][:language :parsing] +[1:07:47][Introduce eval() to cache values for evaluate() to call][:language] +[1:12:15][:Run it to see that the state does get filled in][:language] +[1:12:41][Increase our nested tree to 32 levels deep][:language] +[1:13:19][:Run it to see that it is now instantaneous][:performance] +[1:14:51][Reflect on our Python-based interpreter][:speech] +[1:15:37][Q&A][:speech] +[1:15:47][@rickylqhan][What's your endgame?] +[1:17:11][@garryjohanson][@pervognsen So this is off-topic, but do you think the Intel 8086 chip will be within the direct scope of this project, or is it more complicated than what we are attempting?] +[1:18:17][That's it for today][:speech] +[/video]