C is not interpreted by the CPU directly, but neither is Python interpreted by the Python interpreter directly -- it is also compiled, in that case to a bytecode representation. All serious (and most trivial) languages these days are compiled. The target may be a CPU, or the microcode of a CPU, or a virtual machine. In all cases, the target interprets the compilation results. Well, JIT might be something a bit different, as it changes the program as it runs it; something now that even CPUs do (Transmeta). Anyway, it's just to say that there's not actually any fundamental difference between the "compiled" languages (like C or Java) and the "interpreted" languages (like Python or Smalltalk).