--- For instance, you'd think addition is dead simple, right? a + b = c. But in machine code, there's no platonic idea of a number; it's all just ones and zeroes in fixed-length slots in memory. Let's say your CPU register is 16 bits, of which the largest unsigned integer you can store is 65535 (2^16-1, the "-1" because of zero). If "a" is 60000 and "b" is 10000, then what is "c"? Ruby is smart enough to recognize that c will be too large for the CPU to handle in one 16-bit word, so it will break the problem up behind the scenes. It will correctly answer 70000. The logic to do all of the work behind the scenes to handle the conversion from one-word to multiple-word numbers and display the result as a single number involves the execution of thousands of lines of machine code. ---
--- There are three big downsides to using compilers as vs. writing machine code yourself:
One, compilers themselves tend to be slow to run, because they're so complex. So every time you change anything in your program,