Каковы плюсы и минусы интерпретируемых языков?

Сейчас изучаю Perl. Каковы плюсы и минусы интерпретируемых языков?


person Nathan Campos    schedule 22.10.2009    source источник


Ответы (9)


Явная копия из википедии, поэтому я сделаю эту вики-страницу сообщества.

Преимущества языков перевода

Интерпретируемые языки дают программам определенную дополнительную гибкость по сравнению с компилируемыми языками. Возможности, которые проще реализовать в интерпретаторах, чем в компиляторах, включают (но не ограничиваются ими):

  • независимость от платформы (например, байтовый код Java)
  • отражение и рефлексивное использование оценщика (например, функция eval первого порядка)
  • динамическая типизация
  • простота отладки (легче получить информацию об исходном коде на интерпретируемых языках)
  • небольшой размер программы (поскольку интерпретируемые языки имеют гибкость при выборе кода инструкции)
  • динамическое определение объема
  • автоматическое управление памятью

Недостатки языков перевода

Выполнение интерпретатором обычно намного менее эффективно, чем выполнение обычной программы. Это происходит потому, что либо каждая инструкция должна передавать интерпретацию во время выполнения, либо, как в более новых реализациях, код должен быть скомпилирован в промежуточное представление перед каждым выполнением. Виртуальная машина является частичным решением проблемы производительности, поскольку определенный промежуточный язык намного ближе к машинному языку и, следовательно, легче переводится во время выполнения. Другой недостаток - необходимость в интерпретаторе на локальной машине, чтобы выполнение стало возможным.

person Community    schedule 22.10.2009

Плюсы:

  • Быстрое прототипирование (без цикла записи, компиляции и выполнения)
  • Кросс-платформенный (при условии, что для каждой платформы существуют интерпретаторы)

Минусы:

  • Производительность (не такая быстрая, как у скомпилированных языков)
person t_scho    schedule 22.10.2009
comment
C / C ++ может быть кроссплатформенным ;-) - person jldupont; 23.10.2009
comment
Я разрабатываю на C ++, и он очень кроссплатформенный. - person Nathan Campos; 23.10.2009
comment
Я не говорю, что неинтерпретируемые языки не являются кроссплатформенными, я просто говорю, что это положительный атрибут, общий для интерпретируемых языков :) - person t_scho; 23.10.2009
comment
Он имеет в виду, что двоичный файл является кроссплатформенным, в то время как вы говорите, что исходный код кроссплатформенный для C / C ++. - person countunique; 26.05.2014

Самый большой недостаток? Большинство скажет скорость выполнения, но не всегда верно. Большинство современных интерпретируемых языков в наши дни преобразуют файлы для интерпретации в промежуточное состояние при сборке, которое при выполнении превращается в машинный код, как и любой другой язык. Поскольку в наши дни в виртуальных машинах с этими языками в основном преобладает умное кэширование, это не должно быть большой проблемой. Это, конечно, не означает, что производительность не является проблемой для интерпретируемых языков, просто она часто не так плоха, как многие предполагают.

Имейте в виду, что даже при проблемах с производительностью зачастую легче достичь тех же задач, что и скомпилированный язык, с менее и более эффективным кодом, что делает потерю производительности во время компиляции незначительной во время выполнения программы.

Лично для меня самым большим недостатком является необходимость того, чтобы интерпретатор всегда присутствовал до того, как может произойти выполнение. Это довольно часто снижает переносимость, особенно потому, что интерпретируемые языки не всегда являются кросс-платформенными.

person Nathan Kleyn    schedule 22.10.2009
comment
который при выполнении преобразуется в байт-код, как и любой другой язык. Собственно скомпилированный и исполняемый код (типичный для таких языков, как C и C ++ (кроме .NET)) не включает байт-код. - person Pulseczar; 07.06.2016
comment
@Pulseczar Извините, вы совершенно правы, это ошибка, которую я отредактировал - я имел в виду машинный код. Промежуточное состояние, о котором я упоминал, часто является байт-кодом. - person Nathan Kleyn; 08.06.2016

Против:

  • Самый большой недостаток - это, наверное, скорость выполнения.

Pro:

  • Самым большим плюсом, вероятно, является время на оборачиваемость, то есть цикл итераций тестирования кода.
person jldupont    schedule 22.10.2009

Говоря очевидным и широким, скомпилированные языки, как правило, имеют более высокую производительность, чем интерпретируемые, поскольку компиляция исключает необходимость в интерпретаторе времени выполнения.

Скомпилированные языки больше подходят для коммерческого программного обеспечения для настольных ПК, поскольку исходный код не поставляется вместе с ним.

Интерпретируемые языки, как правило, немного быстрее изучаются, поскольку они позволяют быстро редактировать / запускать / повторять, не дожидаясь компилятора. По моему опыту, они также имеют тенденцию быть более высокого уровня, что также упрощает их.

person Adam Bard    schedule 22.10.2009

В Википедии есть страница о преимуществах и недостатках. Любой значительно продвинутый интерпретируемый язык может быть фактически скомпилирован в собственный двоичный файл, тем самым стирая границы между плюсами и минусами интерпретируемого языка.

PERL - один из тех языков, которые стирают границы. Несмотря на то, что он известен как мощный язык сценариев, вы можете скомпилировать его как родной.

person Andrew Keith    schedule 22.10.2009

«Медлительность» динамических языков, таких как PERL, больше не может быть проблемой. Вот отличная презентация последних тенденций в области динамического языка:

http://steve-yegge.blogspot.com/2008/05/dynamic-languages-strike-back.html

person srini.venigalla    schedule 23.10.2009

Поскольку Java интерпретируется как язык

Плюсы:

  • Совместимость. Виртуальная машина Java одобряет эту концепцию: «Напиши один раз, запусти везде».
  • Безопасность: программа работает в JVM, поэтому сбой не влияет на файлы операционной системы.
  • Управление памятью.

Минусы:

  • Виртуальная машина Java имеет множество реализаций, например, при написании программы, использующей функции Java 8, эта программа должна работать на JVM версии не ниже 8.
person Mohamed Ali    schedule 15.07.2017

Существенным преимуществом интерпретируемого языка является то, что его не нужно компилировать для каждой целевой аппаратной части отдельно.

Недостаток в том, что это замедляет выполнение кода.

person Ravi Ranjan Singh    schedule 05.04.2020