68 lines
		
	
	
		
			8.8 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
		
		
			
		
	
	
			68 lines
		
	
	
		
			8.8 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
| 
								 | 
							
								---
							 | 
						|||
| 
								 | 
							
								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/)
							 |