I'll try to answer from the perspective of a language implementer/designer and as a user.

I'll also try to answer as broadly and generally as possible, but disclaimer: these lists may not apply to specific languages and implementations. And these lists will not be exhaustive.

As a User

Pros

  • Better guarantees about behavior. An interpreter can more easily be written to make user code behave the same no matter what platform it runs on.
  • An interpreter is more likely to be available on many platforms. This is not a guarantee, of course, but it's much simpler to port a well-written C, C++, Rust, etc., interpreter than it is to write a backend for yet another platform, especially when many platforms are much the same (you may have x64, but on Linux and Windows) with subtle and not-so-subtle differences.
    • You can probably port the interpreter to a weird platform yourself. Related to the portability of interpreters, you might be able to port it yourself, as a user, should that be necessary.
  • Your code can often avoid a compile step. Another thing that is not a guarantee, but you may be able to skip compilation. This has many great effects:
    • Faster feedback loop for development.
    • No need to recompile when you update a library.
    • No need for a complicated build process. Okay, this one may not be true in some cases, but it does happen.

Cons

  • Performance sucks. The rule of thumb is that every layer of interpretation is one order of magnitude slower. This holds surprisingly well across many languages and implementations, so users basically have to assume their code will run 10x slower.
    • More memory consumption. Related to the above, when you run your program under an interpreter, you need memory for your program and for the interpreter.
    • Startup time can be prohibitive. Because this is something that had been a problem for several language implementations (JVM, Python, Julia, among others), I thought I'd better mention it specifically.
  • The interpreter is a runtime dependency. You now have to install the interpreter on every machine where the code will run. Have fun.
  • Existing developer tools don't work. You have to wait on the implementer or some driven soul to do it. Or do it yourself.

As an Implementer

Pros

  • It's much easier to make the language behave the same on diverse platforms. No special hacks for weird platforms if your implementation language is good enough or has good enough libraries. (Personal note: I implemented a library of two's-complement arithmetic in portable C that avoids UB. This is some of my secret sauce to make C "good enough.")
    • It's easier to define all behavior. Undefined behavior is bad, and it makes users unhappy. With an interpreter, you can more easily define behaviors in your language and eschew the excuse for poor design that undefined behavior is.
  • It's easier to test. With an interpreter, you're testing the same code on every platform modulo some small bits. With a compiler, you test a different backend for every platform.
  • Portability is as easy as you make it. You can make it easy to port your interpreter to more platforms. It all depends on you, not a finicky platform you don't control.
  • You don't need some general-ish AST format. You can use whatever data structures make sense instead of transforming them into SSA, CPS, or some other form of IR that can enable optimization.
    • You don't need to write optimizations for your language or to target a specific IR format. Related to the above, you can depend on the optimizations of your implementation language and/or avoid the need to use LLVM or some other pre-made optimizer versus writing your own optimizations, which are tricky to get right. (Note: as @SK-logic says, this is technically not required for compilers, and you could implement optimizations in an interpreter. What I meant was that users generally expect optimizations in a compiler because then the extra compile step is "worth it," but they don't expect them in interpreters. In fact, they often don't want them in interpreters because it slows down startup time even more, which loses the feedback loop advantage.)
  • It's easier to sandbox code in an interpreter. Of course, not every interpreter has sandboxing features, but it's still easier to do in an interpreter, and it is done at runtime, which means avoiding static analysis which is complicated, misses truly adversarial code, and had a lot of false positives. Honestly, I don't know why every interpreter doesn't have some sandboxing.

Cons

  • Performance sucks. Developers need a reason to use your language. Now, performance is not that reason.
    • It's easier to make things slower than needed. Related to the above, it's easier to write the interpreter in such a way that some or all operations are slow. Directly executing a custom AST? How much pointer chasing are you doing? I bet it's a lot.
  • You now have to convince end users to install an interpreter. Okay, they might have to install a compiler, unless developers ship binaries, but developers often do ship binaries to make install easy for the same reason you don't want to make end users install an interpreter: they want to reduce friction.
  • Existing developer tools don't work. Better make them work or implement them yourself, which is more work. And that just sounds so boring.
Answer from Gavin D. Howard on Stack Exchange
Top answer
1 of 5
13

I'll try to answer from the perspective of a language implementer/designer and as a user.

I'll also try to answer as broadly and generally as possible, but disclaimer: these lists may not apply to specific languages and implementations. And these lists will not be exhaustive.

As a User

Pros

  • Better guarantees about behavior. An interpreter can more easily be written to make user code behave the same no matter what platform it runs on.
  • An interpreter is more likely to be available on many platforms. This is not a guarantee, of course, but it's much simpler to port a well-written C, C++, Rust, etc., interpreter than it is to write a backend for yet another platform, especially when many platforms are much the same (you may have x64, but on Linux and Windows) with subtle and not-so-subtle differences.
    • You can probably port the interpreter to a weird platform yourself. Related to the portability of interpreters, you might be able to port it yourself, as a user, should that be necessary.
  • Your code can often avoid a compile step. Another thing that is not a guarantee, but you may be able to skip compilation. This has many great effects:
    • Faster feedback loop for development.
    • No need to recompile when you update a library.
    • No need for a complicated build process. Okay, this one may not be true in some cases, but it does happen.

Cons

  • Performance sucks. The rule of thumb is that every layer of interpretation is one order of magnitude slower. This holds surprisingly well across many languages and implementations, so users basically have to assume their code will run 10x slower.
    • More memory consumption. Related to the above, when you run your program under an interpreter, you need memory for your program and for the interpreter.
    • Startup time can be prohibitive. Because this is something that had been a problem for several language implementations (JVM, Python, Julia, among others), I thought I'd better mention it specifically.
  • The interpreter is a runtime dependency. You now have to install the interpreter on every machine where the code will run. Have fun.
  • Existing developer tools don't work. You have to wait on the implementer or some driven soul to do it. Or do it yourself.

As an Implementer

Pros

  • It's much easier to make the language behave the same on diverse platforms. No special hacks for weird platforms if your implementation language is good enough or has good enough libraries. (Personal note: I implemented a library of two's-complement arithmetic in portable C that avoids UB. This is some of my secret sauce to make C "good enough.")
    • It's easier to define all behavior. Undefined behavior is bad, and it makes users unhappy. With an interpreter, you can more easily define behaviors in your language and eschew the excuse for poor design that undefined behavior is.
  • It's easier to test. With an interpreter, you're testing the same code on every platform modulo some small bits. With a compiler, you test a different backend for every platform.
  • Portability is as easy as you make it. You can make it easy to port your interpreter to more platforms. It all depends on you, not a finicky platform you don't control.
  • You don't need some general-ish AST format. You can use whatever data structures make sense instead of transforming them into SSA, CPS, or some other form of IR that can enable optimization.
    • You don't need to write optimizations for your language or to target a specific IR format. Related to the above, you can depend on the optimizations of your implementation language and/or avoid the need to use LLVM or some other pre-made optimizer versus writing your own optimizations, which are tricky to get right. (Note: as @SK-logic says, this is technically not required for compilers, and you could implement optimizations in an interpreter. What I meant was that users generally expect optimizations in a compiler because then the extra compile step is "worth it," but they don't expect them in interpreters. In fact, they often don't want them in interpreters because it slows down startup time even more, which loses the feedback loop advantage.)
  • It's easier to sandbox code in an interpreter. Of course, not every interpreter has sandboxing features, but it's still easier to do in an interpreter, and it is done at runtime, which means avoiding static analysis which is complicated, misses truly adversarial code, and had a lot of false positives. Honestly, I don't know why every interpreter doesn't have some sandboxing.

Cons

  • Performance sucks. Developers need a reason to use your language. Now, performance is not that reason.
    • It's easier to make things slower than needed. Related to the above, it's easier to write the interpreter in such a way that some or all operations are slow. Directly executing a custom AST? How much pointer chasing are you doing? I bet it's a lot.
  • You now have to convince end users to install an interpreter. Okay, they might have to install a compiler, unless developers ship binaries, but developers often do ship binaries to make install easy for the same reason you don't want to make end users install an interpreter: they want to reduce friction.
  • Existing developer tools don't work. Better make them work or implement them yourself, which is more work. And that just sounds so boring.
2 of 5
3

In addition to what was said in the other answers:

You'd normally design a language with typically interpreted semantics, as in - some form of a dynamic scoping, dynamic dispatch (probably, duck typing), some form of managed memory, etc., in case if you need a scripting language. An interactive language for a command line interface, for example, or embedded scripting language to control the behaviour of some application.

In such cases interpretation makes sense - firstly, most statements will only be executed once, so no need to waste time compiling them. Secondly, such languages often require very tight interoperability with the functionality of the host system, while code may not be trusted and may require sandboxing. Some believe both are easier to achieve with interpretation.

Having said that, the line between compilation and interpretation is very blurred, all the languages mentioned in the question are in fact bytecode-compiled, and there's quite a few interactive REPLs built on top of natively compiled languages (some Common Lisp implementations, for example).

Top answer
1 of 9
17

Blatant copy from wikipedia so I'll make this community wiki.

Advantages of interpreted languages

Interpreted languages give programs certain extra flexibility over compiled languages. Features that are easier to implement in interpreters than in compilers include (but are not limited to):

  • platform independence (Java's byte code, for example)
  • reflection and reflective usage of the evaluator (e.g. a first-order eval function)
  • dynamic typing
  • ease of debugging (it is easier to get source code information in interpreted languages)
  • small program size (since interpreted languages have flexibility to choose instruction code)
  • dynamic scoping
  • automatic memory management

Disadvantages of interpreted languages

An execution by an interpreter is usually much less efficient than regular program execution. It happens because either every instruction should pass an interpretation at runtime or as in newer implementations, the code has to be compiled to an intermediate representation before every execution. The virtual machine is a partial solution to the performance issue as the defined intermediate-language is much closer to machine language and thus easier to be translated at run-time. Another disadvantage is the need for an interpreter on the local machine to make the execution possible.

2 of 9
6

Pros:

  • Rapid prototyping (no write, compile, execute cycle)
  • Cross-platform (assuming interpreters exist for each platform)

Cons:

  • Performance (won't be as fast as compiled languages)
People also ask

What are the advantages of using an interpreted language?

One advantage is that you can write code and see the results immediately, making it great for prototyping and iterative development. Interpreted languages also tend to have simpler syntax and are often easier to learn compared to compiled languages.

🌐
lenovo.com
lenovo.com › home
An Introduction to the World of Interpreted Languages | Lenovo US
What is an interpreted language?

An interpreted language is a programming language that executes instructions directly, without the need for a separate compilation step. The instructions are translated and executed line by line, making it easier and quicker to develop and test code.

🌐
lenovo.com
lenovo.com › home
An Introduction to the World of Interpreted Languages | Lenovo US
Which programming languages are commonly interpreted?

Some popular interpreted languages include Python, JavaScript, Ruby, Perl, and PHP. These languages are widely used in web development, scripting, and automation tasks due to their ease of use and quick development process.

🌐
lenovo.com
lenovo.com › home
An Introduction to the World of Interpreted Languages | Lenovo US
🌐
Reddit
reddit.com › r/learnprogramming › what is the advantage of an interpreted language over a compiled language?
What is the advantage of an interpreted language over a compiled language? : r/learnprogramming
June 23, 2022 - Interpreted languages have the advantage that all one needs to execute a program is an interpreter installed on your system. The same* Python program can be run on a variety of OSes, as long as you've installed Python on your computer. Compiled languages, OTOH, are built for a specific architecture.
🌐
Medium
medium.com › @ahmetbeskazalioglu › compiled-and-interpreted-programming-languages-advantages-disadvantages-and-language-selection-b260ff8d2a50
Compiled and Interpreted Programming Languages: Advantages, Disadvantages, and Language Selection Guide for Projects | by Ahmet BESKAZALIOGLU | Medium
November 11, 2024 - Thanks to interpreters, the code is executed line by line, providing a platform-independent structure. This feature is a considerable advantage, especially in rapid prototyping and cross-platform application development processes.
🌐
freeCodeCamp
freecodecamp.org › news › compiled-versus-interpreted-languages
Interpreted vs Compiled Programming Languages: What's the Difference?
January 10, 2020 - In this case, your friend is the interpreter for the interpreted version of the recipe. Compiled languages are converted directly into machine code that the processor can execute. As a result, they tend to be faster and more efficient to execute than interpreted languages. They also give the developer more control over hardware aspects, like memory management and CPU usage. Compiled languages need a “build” step – they need to be manually compiled first. You need to “rebuild” the program every time you need to make a change.
Find elsewhere
🌐
Pythonista Planet
pythonistaplanet.com › interpreted-languages
What Are Interpreted Languages? Pros and Cons – Pythonista Planet
June 16, 2022 - Let’s dive deep and understand the pros and cons of interpreted languages. An interpreted language is more flexible compared to a compiled language because interpreted language executes the program code itself, thus making the code ...
🌐
Wikipedia
en.wikipedia.org › wiki › Interpreter_(computing)
Interpreter (computing) - Wikipedia
1 week ago - The source language is compiled into "F code" (a bytecode), which is then interpreted by a virtual machine. ... An abstract syntax tree interpreter transforms source code into an abstract syntax tree (AST), then interprets it directly, or uses it to generate native code via JIT compilation. In this approach, each sentence needs to be parsed just once. As an advantage over bytecode, AST keeps the global program structure and relations between statements (which is lost in a bytecode representation), and when compressed provides a more compact representation.
🌐
Wikibooks
en.wikibooks.org › wiki › Introduction_to_Programming_Languages › Interpreted_Programs
Introduction to Programming Languages/Interpreted Programs - Wikibooks, open books for an open world
However, contrary to the compiler, the interpreter does not need to parse all the source code before executing it. That is, only those pieces of the program text that are reachable by the execution flow of the program need to be translated. Thus, the interpreter does a kind of lazy translation. ... The main advantage of an interpreter over a compiler is portability.
🌐
Lenovo
lenovo.com › home
An Introduction to the World of Interpreted Languages | Lenovo US
These languages are widely used in web development, scripting, and automation tasks due to their ease of use and quick development process. One advantage is that you can write code and see the results immediately, making it great for prototyping and iterative development.
🌐
Quora
quora.com › What-are-the-reasons-for-using-interpreted-languages-instead-of-compiled-languages-even-though-compilers-generally-offer-faster-execution-speeds
What are the reasons for using interpreted languages instead of compiled languages, even though compilers generally offer faster execution speeds? - Quora
Answer (1 of 5): Interpreted languages are better for the developer. Interpreters have zero compile and link time. They have better debuggers as well. If we consider Smalltalk from the 1980’s an interpreted language, even though it may JIT ...
🌐
DEV Community
dev.to › gridou › interpreted-vs-compiled-languages-understanding-the-difference-4ak8
Interpreted vs. Compiled Languages: Understanding the Difference - DEV Community
March 13, 2025 - Compiled languages typically use Ahead-of-Time (AOT) compilation, where the entire source code is translated into machine code before execution. This results in optimized performance since the program does not require further compilation at runtime. ✅ Faster Execution – Since the code is precompiled, execution is significantly faster compared to interpreted languages.
🌐
LinkedIn
linkedin.com › all › software engineering practices
What are the advantages and disadvantages of using an interpreted language?
January 12, 2024 - Another advantage of interpreted languages is that they are portable and cross-platform. This means that you can run the same code on different operating systems and hardware platforms without any modification or recompilation.
🌐
Study.com
study.com › computer science › computer programming › programming languages
Interpreted Languages | Study.com
Interpreted languages offer several significant advantages for developers. First, they enable faster development cycles since code can be tested immediately without waiting for compilation, allowing for rapid prototyping and iterative development.
🌐
Codidact
software.codidact.com › posts › 280648 › 280658
Interpreted language: What is its benefit for being written in that way ? - Software Development
It happens "instantly" for the user. It doesn't require the existence of a specific compiler (which is much harder to embed into an application), doesn't have to deal with separate executable files, doesn't have to go thru a compile step, a ...
🌐
ScienceDirect
sciencedirect.com › topics › computer-science › interpreted-programming-language
Interpreted Programming Language - an overview | ScienceDirect Topics
An interpreted programming language is a type of language that is executed line by line, allowing for faster program development due to the advantages of interpreters over compilers.
🌐
IBM
ibm.com › docs › en › zos-basic-skills
Compiled versus interpreted languages
During the design of an application, you might need to decide whether to use a compiled language or an interpreted language for the application source code.
🌐
Quora
quora.com › What-are-the-benefits-of-using-an-interpreted-language
What are the benefits of using an interpreted language? - Quora
December 30, 2022 - Answer: The main benefits of using an interpreted language include faster development times, greater flexibility for making changes, more efficient debugging, and better support for scripting.
🌐
Dsbscience
dsbscience.com › freepubs › start_programming › node6.html
4.1 Interpreted vs. Compiled Languages
Interpreted languages include the MS-Dos Batch language (the OS itself is the interpreter), shell scripts in Unix/Linux systems, Java, Perl and BASICA (a very old BASIC language). Advantages of interpreted languages include relative ease of programming (since once you type your instructions ...
🌐
AlgoCademy
algocademy.com › blog › understanding-the-difference-between-compiled-and-interpreted-languages
Understanding the Difference Between Compiled and Interpreted Languages – AlgoCademy Blog
Platform Dependence: Executables are often specific to the operating system and hardware architecture they were compiled for. Longer Development Cycle: The compile-link-run cycle can slow down the development process, especially for large projects. Less Flexible: Making changes requires recompiling the entire program or affected modules. Interpreted languages are programming languages where the source code is executed line by line by an interpreter at runtime, without the need for prior compilation into machine code.