First: What can a CPU actually do? It'll have an instruction set and registers x86, arm, etc If you give it a series of instructions, it can run them Reminder: Computers fundementally process data Game engine, web browser, etc. High level vs. low level: How close to the actual instructions are we? Let's compile a C program and see what happens Role of the optimizer Compare and contrast: Python numeric data types vs. C numeric data types size? Speed of running Python Closer to the instructions the CPU can do = faster Kinda like emulators Comes in levels: Compiles: C, C++, Rust, most older languages Compiles just in time: C# Compiles to the JVM: Java, Julia Doesn't compile at all: Python, perl, BASH, most scripting languages Language family tree C family influence in popular languages Language follows organizational strategies Example: Object-oriented programming Can be done in C C++ adds support for it Data structure integration: Newer languages usually have it Example: C++ map How are locations handled? An address is a consistent size So we can make a list of addresses easy Since they're the same size The things at the addresses could be different sizes Python: We hide that we're using addresses C: The programmer should know how to use addresses C++ is somewhere in the middle An example issue: How big is the user's file? Maybe we have no idea... Python: Open and just read it We'll add more space if we need to This is fine as long as we have plenty of memory C: Carefully metered space usage Kind of a pain when programming A philisophical question: Will AI increase use of languages like C compared to languages like Python?