Транслятор или процессор языка программирования — это компьютерная программа , которая преобразует программные инструкции, написанные в удобной для человека форме, в коды машинного языка, которые компьютеры понимают и обрабатывают. Это общий термин, который может относиться к компилятору , ассемблеру или интерпретатору — всему, что преобразует код с одного компьютерного языка на другой. [1] [2] К ним относятся переводы между высокоуровневыми и понятными человеку компьютерными языками, такими как C++ и Java , языками промежуточного уровня, такими как байт-код Java , низкоуровневыми языками, такими как язык ассемблера и машинный код , и между аналогичными уровнями языка на разных вычислительных платформах , а также с любого из них на любой другой из них. [1] Программное обеспечение и аппаратное обеспечение представляют собой различные уровни абстракции в вычислениях. Программное обеспечение обычно пишется на высокоуровневых языках программирования, которые проще понимать и которыми легче манипулировать людям, в то время как аппаратные реализации включают низкоуровневые описания физических компонентов и их взаимосвязей. Трансляторные вычисления облегчают преобразование между этими уровнями абстракции. [3] В целом, вычислительные трансляторы играют решающую роль в преодолении разрыва между программными и аппаратными реализациями, позволяя разработчикам использовать сильные стороны каждой платформы и оптимизировать производительность, энергоэффективность и другие показатели в соответствии с конкретными требованиями приложения. [4]
Процесс разработки программного обеспечения заметно отличается в зависимости от типа транслятора, используемого разработчиком, это, конечно, отличается от транслятора к транслятору. Этапы процесса разработки, на которые влияет транслятор, включают начальный этап программирования, этап отладки и, что наиболее важно, процесс выполнения. Факторы, которые затрагиваются на этих этапах, включают производительность кода, скорость обратной связи для процесса отладки, языковые возможности и независимость от платформы. Некоторые из наиболее известных процессоров языка программирования, используемых для трансляции кода, — это компиляторы , интерпретаторы и ассемблеры . [5]
Программное обеспечение компилятора взаимодействует с исходным кодом , преобразуя его, как правило, из языка программирования более высокого уровня в объектный код , который впоследствии может быть выполнен центральным процессором (ЦП) компьютера . [6] Объектный код, созданный компилятором, состоит из машиночитаемого кода , который может быть обработан компьютером. Этот этап вычислительного процесса известен как компиляция. Использование компилятора приводит к разделению процессов трансляции и выполнения. После компиляции новый объектный код сохраняется отдельно от исходного кода, в результате чего исходный код больше не требуется для процесса выполнения. В программах компиляторов процесс трансляции происходит один раз, что приводит к эффективному коду, который может быть выполнен быстро любое количество раз. [6]
Трансляция высокоуровневого кода с помощью компилятора имеет явные преимущества. [7]
При трансляции высокоуровневого кода с помощью компилятора имеются явные недостатки. [7]
Некоторые известные языки программирования, использующие компиляторы, включают: [8]
Программы-интерпретаторы функционируют, интерпретируя высокоуровневый код в машинный код, одновременно выполняя инструкции строка за строкой. В отличие от компиляторов, интерпретаторам не нужно компилировать код перед выполнением инструкций. Процесс трансляции и выполнения выполняется одновременно и прерывается в случае ошибки в программе. Использование интерпретатора позволяет разработчикам тестировать и изменять код в реальном времени. Это упрощает процесс отладки, а также помогает создавать более эффективный код. Поскольку процесс трансляции и выполнения выполняется одновременно, время выполнения программ-интерпретаторов существенно. [5]
Перевод высокоуровневого кода с помощью интерпретатора имеет очевидные преимущества.
При переводе высокоуровневого кода с помощью интерпретатора имеются явные недостатки. [7]
Некоторые известные языки программирования, использующие интерпретаторы, включают в себя: [5]
Программа ассемблера функционирует путем преобразования низкоуровневого ассемблерного кода в обычный машинный код, который может быть прочитан центральным процессором. Цель языка ассемблера, как и других языков кодирования, состоит в том, чтобы сделать процесс программирования более удобным для пользователя, чем программирование на машинном языке. Языки ассемблера используют мнемонические устройства и символические адреса для различения кода операции, операндов и определенных адресов памяти. Многие из этих компонентов нелегко читаются людьми, и поэтому мнемоника, символы и метки делают код расшифровываемым. Ассемблер работает, обрабатывая код по одной строке за раз, а затем переходит к следующей инструкции. Чтобы устранить проблемы, возникающие из-за адресации мест, процесс трансляции, известный как ассемблер, обычно выполняется в двухпроходном процессе. Первый проход ассемблера выполняется для определения двоичных адресов, соответствующих символическим именам. Это необходимо для того, чтобы направлять второй проход, который является построчным переводом на машинный язык. [9]
Обычно используемые ассемблеры включают в себя: