Is it compiled or interpreted? 14 languages at a glance
Almost every language here compiles your code. They differ in what the compile produces, and in whether an optimizer works before the program runs, while it runs, or not at all.
| Language | How the usual implementation runs it | JIT |
|---|---|---|
| Python | Bytecode on a virtual machine | CPython: no. PyPy: yes. |
| Java | Bytecode on the JVM | Yes, two tiers. |
| JavaScript | Bytecode on a virtual machine inside the engine | V8: yes. QuickJS: no. |
| TypeScript | Compiled to JavaScript, then bytecode on a virtual machine | V8: yes. |
| C++ | Machine code, compiled ahead of time | No JIT. Static optimization. |
| C# | IL on the .NET runtime, or native code | Yes, tiered. Ahead-of-time also available. |
| Go | Machine code, compiled ahead of time | No JIT. |
| Rust | Machine code, compiled ahead of time | No JIT. |
| Kotlin | Bytecode on the JVM, or native code | On the JVM: yes. |
| Swift | Machine code, compiled ahead of time | No JIT. |
| Ruby | Bytecode on a virtual machine | Optional (YJIT). |
| PHP | Opcodes on a virtual machine | Optional. |
| Lua | Bytecode on a virtual machine | Standard Lua: no. LuaJIT: yes. |
| Perl | Op tree in memory | No. |
The table lists the usual implementation of each language. Other implementations exist: PyPy for Python, LuaJIT for Lua, GraalVM Native Image for Java, NativeAOT for C#, and Static Hermes for JavaScript. A language has no speed of its own. Each implementation has one, and it depends on how much optimization its authors built into it.
Read what the words mean, see the measured times, or read the objections.