
При выборе языка программирования необходимо учитывать две особенности: язык должен предоставлять все необходимые строительные блоки для планируемого программного проекта, а программирование и реализация проекта должны быть максимально простыми. Легкость восприятия и простота кода имеют большое значение для обеспечения последнего, поскольку эти характеристики облегчают начало и изучение языка программирования, а также его повседневное использование.
Для того чтобы инструкции написанной программы были понятны компьютеру или процессору, исходный код современных языков программирования сначала должен быть преобразован в машиночитаемую форму. Это делается с помощью компилятора или интерпретатора в зависимости от языка программирования. Что именно делают эти два инструмента? И чем они отличаются друг от друга?
Что такое интерпретатор?
Интерпретатор — это компьютерная программа, которая обрабатывает исходный код программного проекта во время его выполнения (т.е. в процессе работы) и действует как интерфейс между проектом и процессором. Интерпретаторы всегда обрабатывают код построчно, так что отдельные инструкции каждой строки считываются, анализируются и преобразуются для процессора одна за другой. Это также относится к повторяющимся инструкциям, которые выполняются каждый раз, когда они появляются. Интерпретаторы используют свои собственные внутренние библиотеки для обработки программного кода: как только строка исходного кода преобразуется в соответствующие машиночитаемые инструкции, она отправляется непосредственно в процессор.
Процесс преобразования не завершается, пока весь код не будет интерпретирован. Он остановится раньше, только если в процессе обработки произошла ошибка. Это значительно облегчает отладку, поскольку при возникновении ошибки сразу же определяется строка кода, содержащая ошибку.
К наиболее популярным языкам программирования, которые в основном полагаются на интерпретатор при преобразовании исходного кода в машинный, относятся BASIC, Perl, Python, Ruby и PHP. Их часто называют «интерпретируемыми языками».
Что такое компилятор?
Компилятор — это компьютерная программа, которая полностью преобразует исходный код программного проекта в машинный код перед его запуском. Только после этого проект запускается процессором, что означает, что все инструкции в машинном коде доступны ему с самого начала. Таким образом, процессор имеет все необходимые части, готовые к запуску данного программного обеспечения, обработке входных данных и генерации выходных. Во многих случаях в процессе компиляции происходит важный промежуточный этап: перед преобразованием в машинный код большинство компиляторов сначала преобразуют его в промежуточный код (т.е. «объектный код»), который часто совместим с различными платформами и может также использоваться интерпретатором.
При генерации кода компиляторы определяют порядок, в котором инструкции передаются в процессор. Если инструкции не зависят друг от друга, процессор может даже выполнять их одновременно.
К числу чисто компилируемых языков относятся влиятельные языки C, C++ и Pascal.
Компиляторы и интерпретаторы: обзор различий в таблице
И компиляторы, и интерпретаторы используются для преобразования написанного программного кода в машиночитаемый исполняемый формат. Компьютерным процессорам требуется этот преобразованный код для выполнения программ на таких языках, как C, C++, PHP, Python и Ruby, что делает эти два инструмента необходимыми для использования настольных компьютеров, ноутбуков и смартфонов. Краткие описания, приведенные выше, уже показали, что между компиляторами и интерпретаторами существуют важные различия, которые необходимо учитывать, особенно при выборе подходящего языка программирования для нового программного обеспечения. В следующей таблице приведены наиболее важные моменты при сравнении компиляторов и интерпретаторов:
Интерпретатор | Компилятор | |
---|---|---|
Когда преобразуется исходный код? | во время работы программного обеспечения | перед запуском программы |
Процедура преобразования | построчно | всегда полный код |
Уведомление об ошибке кода | после каждой строки | собирается после полной компиляции |
Скорость преобразования | высокая | низкая |
Эффективность преобразования | низкая | высокая |
Объем опытно-конструкторских работ | низкий | высокий |
Распространенные языки | PHP, Perl, Python, Ruby, BASIC | C, C++, Pascal |
Рассмотрев различия между компиляторами и интерпретаторами, вы сможете увидеть их сильные и слабые стороны, когда речь идет о преобразовании исходного кода. Программы с интерпретаторами могут быть запущены сразу же, и поэтому их можно начинать гораздо быстрее. Разработка также намного проще, чем в случае использования компилятора, поскольку процесс отладки (т.е. исправление ошибок) выполняется с преобразованием строка за строкой. Программы, использующие компилятор, должны сначала преобразовать весь код, прежде чем произойдет отладка, и прежде чем приложение может быть запущено. Однако после запуска программы компилятор больше не нужен, в то время как интерпретатор будет продолжать использовать вычислительную мощность.
Преимущество | Недостаток | |
---|---|---|
Интерпретатор | более простой процесс разработки (особенно в плане отладки) | неэффективный процесс преобразования и низкая скорость выполнения |
Компилятор | Посылает процессору готовый к использованию исполняемый машинный код | любые изменения, внесенные в код (например, отладка, программные расширения и т.д.), потребуют его повторного преобразования. |
Гибридное решение, объединяющее компиляторы и интерпретаторы: компилятор «точно в срок».
Существует еще одна модель, называемая компилятором «точно в срок», которая устраняет недостатки каждого решения по преобразованию. Этот особый тип компилятора, который иногда называют компретором (портманто из компилятора и интерпретатора), функционирует не так, как обычные компиляторы. Он преобразует исходный код во время его выполнения, подобно интерпретаторам. Это приводит к упрощению процесса разработки в дополнение к высокой скорости выполнения (благодаря компилятору).
Java — один из самых известных примеров языка, который полагается на компиляцию «точно в срок»: JIT-компилятор, входящий в состав JavaRuntime Environment (JRE), повышает производительность Java-приложений за счет преобразования ранее созданного байткода в машинный код во время выполнения.
В целях защиты вашей конфиденциальности видео не будет загружаться, пока вы не нажмете на него.