freeCodeCamp/guide/russian/computer-science/compiled-versus-interpreted.../index.md

68 lines
8.8 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

---
title: Compiled Versus Interpreted Languages
localeTitle: Скомпилированные и интерпретируемые языки
---
## Скомпилированные и интерпретируемые языки
Каждая программа представляет собой набор инструкций, будь то добавить два номера или отправить запрос через Интернет. Компиляторы и интерпретаторы воспринимают читаемый код и преобразуют его в машиночитаемый машинный код. На скомпилированном языке целевая машина напрямую переводит программу. В интерпретируемом языке исходный код непосредственно не переводится на целевую машину. Вместо этого ругая_ программа, так называемый интерпретатор, считывает и выполняет код.
### Хорошо ... но что это на _самом деле_ означает?
Итак, скажем, у вас есть рецепт hummus, который вы хотите сделать, но он находится на древнегреческом языке. Есть два пути, которыми вы, как не-древнегреческий оратор, могли следовать его указаниям.
Во-первых, если кто-то перевел его на английский язык уже для вас. Вы (и любой, кто мог говорить по-английски) могли получить английскую версию и сделать hummus. Это скомпилированная версия.
Во-вторых, если у вас есть друг, который знает Древнегреческий. Ваш друг может сидеть рядом с вами и переводить древнегреческий на английский, по очереди, как вы идете. В этом случае ваш друг является переводчиком. Это интерпретированная версия.
### Скомпилированные языки
Компилированные языки преобразуются непосредственно в машинный код, который может выполнять процессор. В результате они, как правило, работают быстрее и эффективнее, чем интерпретируемые языки. Они также дают разработчику больше контроля над аппаратными аспектами, такими как управление памятью и использование ЦП.
Компилированные языки нуждаются в шаге «build» - их сначала нужно скомпилировать вручную. Вам нужно «перестроить» программу каждый раз, когда вам нужно внести изменения. В нашем примере hummus весь перевод написан до того, как он доберется до вас. Если первоначальный автор решил, что хочет использовать другой вид оливкового масла, весь рецепт нужно будет перевести снова, а затем отправить к вам.
Примерами чистых компилируемых языков являются C, C ++, Erlang, Haskell, Rust и Go.
### Интерпретированные языки
Интерпретаторы будут запускать программу по очереди и выполнять каждую команду. Теперь, если автор решил, что хочет использовать другой вид оливкового масла, он может поцарапать старый и добавить новый. Затем ваш переводчик может передать это изменение вам, как это происходит.
Когда-то, как известно, интерпретируемые языки были значительно медленнее, чем скомпилированные языки. Но с разработкой [компиляции](https://guide.freecodecamp.org/computer-science/just-in-time-compilation) « [точно в срок»](https://guide.freecodecamp.org/computer-science/just-in-time-compilation) этот разрыв сокращается.
Примерами распространенных интерпретируемых языков являются PHP, Ruby, Python и JavaScript.
### Небольшой оговорка
Большинство языков программирования могут иметь как скомпилированные, так и интерпретируемые реализации. Сам язык не обязательно компилируется или интерпретируется. Однако для простоты их обычно называют такими.
Строго говоря, термины, интерпретируемые языком и скомпилированным языком, не определены должным образом, поскольку теоретически любой язык программирования может быть интерпретирован или скомпилирован. В современной реализации на языке программирования все более популярным становится платформа для предоставления обоих вариантов. например, Python может выполняться либо как скомпилированная программа, либо как интерпретируемый язык в интерактивном режиме.
**Большинство инструментов командной строки, CLI и оболочек теоретически могут быть классифицированы как интерпретируемые языки.**
### Преимущества и недостатки
#### Преимущества скомпилированных языков
Программы, скомпилированные в собственный код во время компиляции, обычно имеют тенденцию быть быстрее, чем те, которые были переведены во время выполнения из-за накладных расходов на процесс перевода.
#### Недостатки скомпилированных языков
Наиболее значительными недостатками являются: -
* Дополнительное время, необходимое для завершения всего этапа компиляции перед тестированием, и
* Платформенная зависимость генерируемого двоичного кода.
#### Преимущества интерпретируемых языков
Интерпретированный язык предоставляет реализации некоторую дополнительную гибкость по сравнению с компилируемыми реализациями. Поскольку интерпретаторы сами выполняют код исходной программы, сам код является независимым от платформы (например, байтовый код Java). Другие функции включают динамическую типизацию и меньший размер исполняемой программы.
#### Недостатки интерпретируемых языков
Наиболее заметным недостатком является типичная скорость выполнения по сравнению с скомпилированными языками.
#### Дополнительная информация:
[Википедия - Скомпилированный язык](https://en.wikipedia.org/wiki/Compiled_language)
[Википедия - Интерпретированный язык](https://en.wikipedia.org/wiki/Interpreted_language)
[articlemer.com - В чем разница между скомпилированным и интерпретируемым языком?](http://www.programmerinterview.com/index.php/general-miscellaneous/whats-the-difference-between-a-compiled-and-an-interpreted-language/)