Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 29.02.2020, 11:21
Кандидат Javascript-наук
Отправить личное сообщение для jaroslav.tavgen Посмотреть профиль Найти все сообщения от jaroslav.tavgen
 
Регистрация: 18.09.2014
Сообщений: 128

Компилируемые и интерпретируемые языки
Кто-нибудь знает, где можно почитать ХОРОШУЮ матчать про сабж?

Потому что удивительное дело, но то, что я читал, - это всё время какой-то бред.

Например, такой:

https://guide.freecodecamp.org/compu...ted-languages/
Цитата:
In a compiled language, the target machine directly translates the program. In an interpreted language, the source code is not directly translated by the target machine. Instead, a different program, aka the interpreter, reads and executes the code.
(Что ещё за "target machine"? Может быть, на ней всё-таки какой-то софт запускается? И в одном случае это компилятор, а в другом - интерпретатор, и эти два названия никак не объясняют разницы между ними)

или такой:
https://kb.iu.edu/d/agsz
Цитата:
The difference between an interpreted and a compiled language lies in the result of the process of interpreting or compiling. An interpreter produces a result from a program, while a compiler produces a program written in assembly language. The assembler of architecture then turns the resulting program into binary code.
(ШТА? Я думал, что всё, что запускается на компьютере, по определению переводится машинные коды, репрезентацией которых является ассемблер)

или такой:
https://en.wikipedia.org/wiki/Interpreted_language
Цитата:
An interpreted language is a type of programming language for which most of its implementations execute instructions directly and freely, without previously compiling a program into machine-language instructions. The interpreter executes the program directly, translating each statement into a sequence of one or more subroutines, and then into another language (often machine code).
(здесь мне нравятся фразы "most of", "directly" и "freely" - понимай как хочешь).

В общем, определений и статей много, а сути - мало.

Я в итоге для себя сделал вывод, что компилируемый язык - это язык, который прежде, чем выполнить программу, создаёт EXE-файл (и его аналоги в других ОС), а потом его запускает. Интерпретируемый язык, по сути делает то же самое (превращает написанный код в ассемблер), только по пути совершает ещё много промежуточных действий (суть которых я и пытаюсь понять). Отдельный EXE-файл либо не создаётся либо создаётся, а потом удаляется.

Т.е., мне кажется, что я понимаю. что такое компилируемый язык, но не понимаю, что такое интерпретируемый. Есть ли что-то ТОЛКОВОЕ, что можно об этом почитать? Спасибо!

Последний раз редактировалось jaroslav.tavgen, 29.02.2020 в 11:39.
Ответить с цитированием
  #2 (permalink)  
Старый 29.02.2020, 11:31
Аватар для Aetae
Тлен
Отправить личное сообщение для Aetae Посмотреть профиль Найти все сообщения от Aetae
 
Регистрация: 02.01.2010
Сообщений: 6,588

Хрень какая-то, всё же очевидно.

Компилируемый язык компилируется. Т.е. ты пишешь код, компилируешь его и отдаёшь результат компиляции пользователю.
Пользователь просто запускает полученное на исполнение.

Интерпретируемый язык интерпретируется. Т.е ты пишешь код, и отдаёшь этот код пользователю.
Пользователь запускает интерпретатор(явно или не явно) и скармливает ему полученное.

В первом случае результат компиляции может быть несовместим с платформой пользователя.

Во втором случае у пользователя может не оказаться интерпретатора.
__________________
29375, 35
Ответить с цитированием
  #3 (permalink)  
Старый 29.02.2020, 11:37
Кандидат Javascript-наук
Отправить личное сообщение для jaroslav.tavgen Посмотреть профиль Найти все сообщения от jaroslav.tavgen
 
Регистрация: 18.09.2014
Сообщений: 128

Сообщение от Aetae Посмотреть сообщение
Интерпретируемый язык интерпретируется. Т.е ты пишешь код, и отдаёшь этот код пользователю.
Почему? Если я делаю страницу на PHP, то пользователь видит страницу и не видит PHP-кода.
Ответить с цитированием
  #4 (permalink)  
Старый 29.02.2020, 11:45
Аватар для Aetae
Тлен
Отправить личное сообщение для Aetae Посмотреть профиль Найти все сообщения от Aetae
 
Регистрация: 02.01.2010
Сообщений: 6,588

jaroslav.tavgen, в данном случае "пользователь" - твой сервер.
(а во время разработки на своей машине - ты сам)

Главное в том, что финальный продукт твоей работы как программиста - код, а не результат компиляции.
__________________
29375, 35

Последний раз редактировалось Aetae, 29.02.2020 в 11:48.
Ответить с цитированием
  #5 (permalink)  
Старый 29.02.2020, 12:17
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,989

Сообщение от jaroslav.tavgen
Интерпретируемый язык, по сути делает то же самое (превращает написанный код в ассемблер)
Зачем?

Например C, компилируемый, на этапах компиляции создает объектный код, а далее сборщик из объектного кода (здесь не только собственное творение, но и подключаемые библиотеки) создает машинный код, исполняемый.

А РНР (новые версии) это и не компилируемый, и не интерпретируемый язык в их чистом виде. Это нечто среднее между ними, это интерпретирующий транслятор. Он транслирует сценарии в байткод (опткод, его можно кешировать), который затем выполняется.

Последний раз редактировалось laimas, 29.02.2020 в 12:31.
Ответить с цитированием
  #6 (permalink)  
Старый 29.02.2020, 12:39
Аватар для Aetae
Тлен
Отправить личное сообщение для Aetae Посмотреть профиль Найти все сообщения от Aetae
 
Регистрация: 02.01.2010
Сообщений: 6,588

laimas, вот зачем ты всё усложняешь. Ты б ещё про Java рассказал.)
Для начала пусть разберётся с основами.
__________________
29375, 35
Ответить с цитированием
  #7 (permalink)  
Старый 29.02.2020, 13:06
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,989

Сообщение от Aetae
laimas, вот зачем ты всё усложняешь.
Так это не я усложняю, это автор думает, что для этого один язык перемалывают в другой, в ассемблер, и только затем ...
Ответить с цитированием
  #8 (permalink)  
Старый 29.02.2020, 13:09
Кандидат Javascript-наук
Отправить личное сообщение для jaroslav.tavgen Посмотреть профиль Найти все сообщения от jaroslav.tavgen
 
Регистрация: 18.09.2014
Сообщений: 128

Сообщение от Aetae Посмотреть сообщение
jaroslav.tavgen, в данном случае "пользователь" - твой сервер.
(а во время разработки на своей машине - ты сам)

Главное в том, что финальный продукт твоей работы как программиста - код, а не результат компиляции.
Если честно, выглядит натянуто: в одном случае "пользователь" - это сервер, а в другом - человек, совсем разные сущности.

Я иногда пишу десктопные программы на PHP (запускаю их либо в IDE либо из коммандной строки). Никакого сервера (или браузера как в случае с JavaScript). php.exe в таком случае - это компилятор или интерпретатор (для простоты возьмём PHP 5)? А почему?
Ответить с цитированием
  #9 (permalink)  
Старый 29.02.2020, 13:10
Кандидат Javascript-наук
Отправить личное сообщение для jaroslav.tavgen Посмотреть профиль Найти все сообщения от jaroslav.tavgen
 
Регистрация: 18.09.2014
Сообщений: 128

Сообщение от laimas Посмотреть сообщение
Так это не я усложняю, это автор думает, что для этого один язык перемалывают в другой, в ассемблер, и только затем ...
В итоге всё всё равно выполняется на ассемблере (или, если быть более точным, в машинных кодах, которые ассемблер отображает).
Ответить с цитированием
  #10 (permalink)  
Старый 29.02.2020, 13:14
Аватар для Aetae
Тлен
Отправить личное сообщение для Aetae Посмотреть профиль Найти все сообщения от Aetae
 
Регистрация: 02.01.2010
Сообщений: 6,588

php.exe - интерпретатор.
Пользователь - конкретная машина.

Как уже сказано выше - разница меж компилируемыми и интерпретируемыми языками не в чём то магическом, а лишь в конечном продукте подлежащем распространению.

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

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

Это если упрощать. В реальности всё это сильно перемешано, лишь основа неизменна - что именно считается конечным продуктом.
__________________
29375, 35

Последний раз редактировалось Aetae, 29.02.2020 в 13:27.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Помогите решить задачу языки, заранее, спасибо Vadim Zhizherin Общие вопросы Javascript 3 19.10.2018 19:53
Будущее веба: разные языки для клиентской разработки FINoM Оффтопик 45 30.12.2011 17:56
Языки высоко уровня zzz Оффтопик 1 16.08.2009 12:05