Компилируемые и интерпретируемые языки
Кто-нибудь знает, где можно почитать ХОРОШУЮ матчать про сабж?
Потому что удивительное дело, но то, что я читал, - это всё время какой-то бред. Например, такой: https://guide.freecodecamp.org/compu...ted-languages/ Цитата:
или такой: https://kb.iu.edu/d/agsz Цитата:
или такой: https://en.wikipedia.org/wiki/Interpreted_language Цитата:
В общем, определений и статей много, а сути - мало. Я в итоге для себя сделал вывод, что компилируемый язык - это язык, который прежде, чем выполнить программу, создаёт EXE-файл (и его аналоги в других ОС), а потом его запускает. Интерпретируемый язык, по сути делает то же самое (превращает написанный код в ассемблер), только по пути совершает ещё много промежуточных действий (суть которых я и пытаюсь понять). Отдельный EXE-файл либо не создаётся либо создаётся, а потом удаляется. Т.е., мне кажется, что я понимаю. что такое компилируемый язык, но не понимаю, что такое интерпретируемый. Есть ли что-то ТОЛКОВОЕ, что можно об этом почитать? Спасибо! |
Хрень какая-то, всё же очевидно.
Компилируемый язык компилируется. Т.е. ты пишешь код, компилируешь его и отдаёшь результат компиляции пользователю. Пользователь просто запускает полученное на исполнение. Интерпретируемый язык интерпретируется. Т.е ты пишешь код, и отдаёшь этот код пользователю. Пользователь запускает интерпретатор(явно или не явно) и скармливает ему полученное. В первом случае результат компиляции может быть несовместим с платформой пользователя. Во втором случае у пользователя может не оказаться интерпретатора. |
Цитата:
|
jaroslav.tavgen, в данном случае "пользователь" - твой сервер.
(а во время разработки на своей машине - ты сам) Главное в том, что финальный продукт твоей работы как программиста - код, а не результат компиляции. |
Цитата:
Например C, компилируемый, на этапах компиляции создает объектный код, а далее сборщик из объектного кода (здесь не только собственное творение, но и подключаемые библиотеки) создает машинный код, исполняемый. А РНР (новые версии) это и не компилируемый, и не интерпретируемый язык в их чистом виде. Это нечто среднее между ними, это интерпретирующий транслятор. Он транслирует сценарии в байткод (опткод, его можно кешировать), который затем выполняется. |
laimas, вот зачем ты всё усложняешь. Ты б ещё про Java рассказал.)
Для начала пусть разберётся с основами. |
Цитата:
|
Цитата:
Я иногда пишу десктопные программы на PHP (запускаю их либо в IDE либо из коммандной строки). Никакого сервера (или браузера как в случае с JavaScript). php.exe в таком случае - это компилятор или интерпретатор (для простоты возьмём PHP 5)? А почему? |
Цитата:
|
php.exe - интерпретатор.
Пользователь - конкретная машина. Как уже сказано выше - разница меж компилируемыми и интерпретируемыми языками не в чём то магическом, а лишь в конечном продукте подлежащем распространению. Преимущество компилируемых языков в том, что компиляция не ограничена по времени, компилятор может потратить столько времени, сколько нужно, чтоб получить оптимальный машинный код под конкретную платформу. Недостаток в том, что под каждую платформу свой машинный код, а следовательно под каждую платформу следует компилировать отдельно. Преимущество интерпретируемых языков в том, что интерпретатор конкретной платформы интерпретирует код в машинный сразу под эту платформу. Вы же распространяете только код, не заботясь о конечной платформе. Недостаток в том, что ваш код превращается интерпретатором в машинный на лету, а потому преобразование должно быть произведено максимально быстро. Времени на глубокие оптимизации у интерпретатора нет. Это если упрощать. В реальности всё это сильно перемешано, лишь основа неизменна - что именно считается конечным продуктом. |
Часовой пояс GMT +3, время: 14:24. |