Is Python interpreted (like Javascript or PHP)?

As the varied responses will tell you, the line between interpreted and compiled is no longer as clear as it was when such terms were coined. In fact, it’s also something of a mistake to consider languages as being either interpreted or compiled, as different implementations of languages may do different things. These days you can find both C interpreters and Javascript compilers.

Even when looking at an implementation, things still aren’t clear-cut. There are layers of interpretation. Here are a few of the gradations between interpreted and compiled:

  1. Pure interpretation. Pretty much what it says on the tin. Read a line of source and immediately do what it says. This isn’t actually done by many production languages – pretty much just things like shell scripts.

  2. Tokenisation + interpretation. A trivial optimization on the above. Rather than interpret each line from scratch, it’s first tokenized (that is, rather than seeing a string like “print 52 + x”, it’s translated into a stream of tokens (eg. [PRINT_STATEMENT, INTEGER(52), PLUS_SIGN, IDENTIFIER('x')] ) to avoid repeatedly performing that state of interpretation. Many versions of basic worked this way.

  3. Bytecode compilation. This is the approach taken by languages like Java and C# (though see below). The code is transformed into instructions for a “virtual machine”. These instructions are then interpreted. This is also the approach taken by python (or at least cpython, the most common implementation.) The Jython and Ironpython implementations also take this approach, but compile to the bytecode for the Java and C# virtual machines respectively.

  4. Bytecode + Just in Time compilation. As above, but rather than interpreting the bytecodes, the code that would be performed is compiled from the bytecode at the point of execution and then run. In some cases, this can actually outperform native compilation, as it is free to perform runtime analysis on the code, and can use specific features of the current processor (while static compilation may need to compile for a lowest common denominator CPU). Later versions of Java, and C# use this approach. Psyco performs this for python.

  5. Native machine-code compilation. The code is compiled to the machine code of the target system. You may think we’ve now completely eliminated interpretation, but even here there are subtleties. Some machine code instructions are not actually directly implemented in hardware, but are in fact implemented via microcode – even machine code is sometimes interpreted!

Leave a Comment

Hata!: SQLSTATE[HY000] [1045] Access denied for user 'divattrend_liink'@'localhost' (using password: YES)