Сейчас изучаю Perl. Каковы плюсы и минусы интерпретируемых языков?
Каковы плюсы и минусы интерпретируемых языков?
Ответы (9)
Явная копия из википедии, поэтому я сделаю эту вики-страницу сообщества.
Преимущества языков перевода
Интерпретируемые языки дают программам определенную дополнительную гибкость по сравнению с компилируемыми языками. Возможности, которые проще реализовать в интерпретаторах, чем в компиляторах, включают (но не ограничиваются ими):
- независимость от платформы (например, байтовый код Java)
- отражение и рефлексивное использование оценщика (например, функция eval первого порядка)
- динамическая типизация
- простота отладки (легче получить информацию об исходном коде на интерпретируемых языках)
- небольшой размер программы (поскольку интерпретируемые языки имеют гибкость при выборе кода инструкции)
- динамическое определение объема
- автоматическое управление памятью
Недостатки языков перевода
Выполнение интерпретатором обычно намного менее эффективно, чем выполнение обычной программы. Это происходит потому, что либо каждая инструкция должна передавать интерпретацию во время выполнения, либо, как в более новых реализациях, код должен быть скомпилирован в промежуточное представление перед каждым выполнением. Виртуальная машина является частичным решением проблемы производительности, поскольку определенный промежуточный язык намного ближе к машинному языку и, следовательно, легче переводится во время выполнения. Другой недостаток - необходимость в интерпретаторе на локальной машине, чтобы выполнение стало возможным.
Плюсы:
- Быстрое прототипирование (без цикла записи, компиляции и выполнения)
- Кросс-платформенный (при условии, что для каждой платформы существуют интерпретаторы)
Минусы:
- Производительность (не такая быстрая, как у скомпилированных языков)
Самый большой недостаток? Большинство скажет скорость выполнения, но не всегда верно. Большинство современных интерпретируемых языков в наши дни преобразуют файлы для интерпретации в промежуточное состояние при сборке, которое при выполнении превращается в машинный код, как и любой другой язык. Поскольку в наши дни в виртуальных машинах с этими языками в основном преобладает умное кэширование, это не должно быть большой проблемой. Это, конечно, не означает, что производительность не является проблемой для интерпретируемых языков, просто она часто не так плоха, как многие предполагают.
Имейте в виду, что даже при проблемах с производительностью зачастую легче достичь тех же задач, что и скомпилированный язык, с менее и более эффективным кодом, что делает потерю производительности во время компиляции незначительной во время выполнения программы.
Лично для меня самым большим недостатком является необходимость того, чтобы интерпретатор всегда присутствовал до того, как может произойти выполнение. Это довольно часто снижает переносимость, особенно потому, что интерпретируемые языки не всегда являются кросс-платформенными.
Против:
- Самый большой недостаток - это, наверное, скорость выполнения.
Pro:
- Самым большим плюсом, вероятно, является время на оборачиваемость, то есть цикл итераций тестирования кода.
Говоря очевидным и широким, скомпилированные языки, как правило, имеют более высокую производительность, чем интерпретируемые, поскольку компиляция исключает необходимость в интерпретаторе времени выполнения.
Скомпилированные языки больше подходят для коммерческого программного обеспечения для настольных ПК, поскольку исходный код не поставляется вместе с ним.
Интерпретируемые языки, как правило, немного быстрее изучаются, поскольку они позволяют быстро редактировать / запускать / повторять, не дожидаясь компилятора. По моему опыту, они также имеют тенденцию быть более высокого уровня, что также упрощает их.
В Википедии есть страница о преимуществах и недостатках. Любой значительно продвинутый интерпретируемый язык может быть фактически скомпилирован в собственный двоичный файл, тем самым стирая границы между плюсами и минусами интерпретируемого языка.
PERL - один из тех языков, которые стирают границы. Несмотря на то, что он известен как мощный язык сценариев, вы можете скомпилировать его как родной.
«Медлительность» динамических языков, таких как PERL, больше не может быть проблемой. Вот отличная презентация последних тенденций в области динамического языка:
http://steve-yegge.blogspot.com/2008/05/dynamic-languages-strike-back.html
Поскольку Java интерпретируется как язык
Плюсы:
- Совместимость. Виртуальная машина Java одобряет эту концепцию: «Напиши один раз, запусти везде».
- Безопасность: программа работает в JVM, поэтому сбой не влияет на файлы операционной системы.
- Управление памятью.
Минусы:
- Виртуальная машина Java имеет множество реализаций, например, при написании программы, использующей функции Java 8, эта программа должна работать на JVM версии не ниже 8.
Существенным преимуществом интерпретируемого языка является то, что его не нужно компилировать для каждой целевой аппаратной части отдельно.
Недостаток в том, что это замедляет выполнение кода.