29.02.2020, 11:21
|
Кандидат Javascript-наук
|
|
Регистрация: 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.
|
|
29.02.2020, 11:31
|
|
Тлен
|
|
Регистрация: 02.01.2010
Сообщений: 6,588
|
|
Хрень какая-то, всё же очевидно.
Компилируемый язык компилируется. Т.е. ты пишешь код, компилируешь его и отдаёшь результат компиляции пользователю.
Пользователь просто запускает полученное на исполнение.
Интерпретируемый язык интерпретируется. Т.е ты пишешь код, и отдаёшь этот код пользователю.
Пользователь запускает интерпретатор(явно или не явно) и скармливает ему полученное.
В первом случае результат компиляции может быть несовместим с платформой пользователя.
Во втором случае у пользователя может не оказаться интерпретатора.
__________________
29375, 35
|
|
29.02.2020, 11:37
|
Кандидат Javascript-наук
|
|
Регистрация: 18.09.2014
Сообщений: 128
|
|
Сообщение от Aetae
|
Интерпретируемый язык интерпретируется. Т.е ты пишешь код, и отдаёшь этот код пользователю.
|
Почему? Если я делаю страницу на PHP, то пользователь видит страницу и не видит PHP-кода.
|
|
29.02.2020, 11:45
|
|
Тлен
|
|
Регистрация: 02.01.2010
Сообщений: 6,588
|
|
jaroslav.tavgen, в данном случае "пользователь" - твой сервер.
(а во время разработки на своей машине - ты сам)
Главное в том, что финальный продукт твоей работы как программиста - код, а не результат компиляции.
__________________
29375, 35
Последний раз редактировалось Aetae, 29.02.2020 в 11:48.
|
|
29.02.2020, 12:17
|
Профессор
|
|
Регистрация: 14.01.2015
Сообщений: 12,989
|
|
Сообщение от jaroslav.tavgen
|
Интерпретируемый язык, по сути делает то же самое (превращает написанный код в ассемблер)
|
Зачем?
Например C, компилируемый, на этапах компиляции создает объектный код, а далее сборщик из объектного кода (здесь не только собственное творение, но и подключаемые библиотеки) создает машинный код, исполняемый.
А РНР (новые версии) это и не компилируемый, и не интерпретируемый язык в их чистом виде. Это нечто среднее между ними, это интерпретирующий транслятор. Он транслирует сценарии в байткод (опткод, его можно кешировать), который затем выполняется.
Последний раз редактировалось laimas, 29.02.2020 в 12:31.
|
|
29.02.2020, 12:39
|
|
Тлен
|
|
Регистрация: 02.01.2010
Сообщений: 6,588
|
|
laimas, вот зачем ты всё усложняешь. Ты б ещё про Java рассказал.)
Для начала пусть разберётся с основами.
__________________
29375, 35
|
|
29.02.2020, 13:06
|
Профессор
|
|
Регистрация: 14.01.2015
Сообщений: 12,989
|
|
Сообщение от Aetae
|
laimas, вот зачем ты всё усложняешь.
|
Так это не я усложняю, это автор думает, что для этого один язык перемалывают в другой, в ассемблер, и только затем ...
|
|
29.02.2020, 13:09
|
Кандидат Javascript-наук
|
|
Регистрация: 18.09.2014
Сообщений: 128
|
|
Сообщение от Aetae
|
jaroslav.tavgen, в данном случае "пользователь" - твой сервер.
(а во время разработки на своей машине - ты сам)
Главное в том, что финальный продукт твоей работы как программиста - код, а не результат компиляции.
|
Если честно, выглядит натянуто: в одном случае "пользователь" - это сервер, а в другом - человек, совсем разные сущности.
Я иногда пишу десктопные программы на PHP (запускаю их либо в IDE либо из коммандной строки). Никакого сервера (или браузера как в случае с JavaScript). php.exe в таком случае - это компилятор или интерпретатор (для простоты возьмём PHP 5)? А почему?
|
|
29.02.2020, 13:10
|
Кандидат Javascript-наук
|
|
Регистрация: 18.09.2014
Сообщений: 128
|
|
Сообщение от laimas
|
Так это не я усложняю, это автор думает, что для этого один язык перемалывают в другой, в ассемблер, и только затем ...
|
В итоге всё всё равно выполняется на ассемблере (или, если быть более точным, в машинных кодах, которые ассемблер отображает).
|
|
29.02.2020, 13:14
|
|
Тлен
|
|
Регистрация: 02.01.2010
Сообщений: 6,588
|
|
php.exe - интерпретатор.
Пользователь - конкретная машина.
Как уже сказано выше - разница меж компилируемыми и интерпретируемыми языками не в чём то магическом, а лишь в конечном продукте подлежащем распространению.
Преимущество компилируемых языков в том, что компиляция не ограничена по времени, компилятор может потратить столько времени, сколько нужно, чтоб получить оптимальный машинный код под конкретную платформу.
Недостаток в том, что под каждую платформу свой машинный код, а следовательно под каждую платформу следует компилировать отдельно.
Преимущество интерпретируемых языков в том, что интерпретатор конкретной платформы интерпретирует код в машинный сразу под эту платформу. Вы же распространяете только код, не заботясь о конечной платформе.
Недостаток в том, что ваш код превращается интерпретатором в машинный на лету, а потому преобразование должно быть произведено максимально быстро. Времени на глубокие оптимизации у интерпретатора нет.
Это если упрощать. В реальности всё это сильно перемешано, лишь основа неизменна - что именно считается конечным продуктом.
__________________
29375, 35
Последний раз редактировалось Aetae, 29.02.2020 в 13:27.
|
|
|
|