cholev> 1. Транслятор это перевод кода с одного языка программирования до другого. Пример с VB.NET до C# cholev> 2 Интерпретируемые языки это скриптовые языки- VBScript, Java script. VB6 с 1998г и интерпретируемий (через IDE) и компилируемый через exe, dll. Современные VB.NET; C# компилируется посложнее- вот здесь некоторое объяснение https://freecontent.manning.com/how-is-c-compiled/ Iva> возможно я отстал, но транслятор языка - это перевод языка высокого уровня в ассемблер или в машинные коды. cholev> Тонкости терминов. Сейчас это называется компиляция. Опишу сразу все.
Машкод - это тот код, который исполняется процессором, аппаратно. То есть процессор берет байт из ОЗУ в текущем месте, "смотрит" его, и выполняет определенную операцию, в зависимости от значения этого кода. Чаще всего инструкция имеет параметры, то есть еще один или несколько байт подгружаются за кодом операции, сколько именно определяется кодом операции.
Ассемблирвание - это перевд программы на языке ассемблера в машкод. Программа ассемблера работает в 2 прохода (обычно), сначала она собирает метаданные, вычисляет сколько будет меток и по каким адресам, составляет список. На втором прохде каждая строка программы преобразуется в один или несколько байт машкода и получается "бинарник".
Если этот "бинарник" предназначен для конкретной ОС, в него еще будут добавлены заголовок и хвост.
Например, ".exe" файл предназначенный под ДОС имеет PSP область, и еще может содержать много сегментов кода и данных, плюс оверлей. Не суть.
Ассемблирование есть
трансляция, то есть перевод программы транслируемого языка в машкод. Ассемблер по сути своей единственный язык низкого уровня. Команды в нем все аппаратные - те которые процессор может выполнить.
Язык среднего уровня тоже транслируется, но команды (операторы) в нем не являются командами аппаратными, их процессор выполнять напрямую не может. При трансляции языка среднего уровня один оператор заменяется несколькими ассемблерными командами (исполняемыми кодами).
Например: напрсал программист if (A = 0) B:=B+1; это будет заменено на:
if_proc:
mov ax,word ptr A_per
cmp ax,0
jne if_proc_done
mov bx,word ptr B_per
inc bx ; здесь на самом деле будет другое
mov word ptr B_per
if_proc_done ... Ну это так примерно и навскидку
Это
трансляция.
Теперь про языки высокого уровня, интерпретацию и компиляцию.
Интерпретируемый язык, это что-то вроде виртуального процессора. (если совсем на пальцах)
Тут в мшкодах на настоящем процессоре крутится не программа написанная на языке высокого уровня, а крутится программа интерпретатор.
Такой интерпретатор читает прорамму высокого уровня и "понимает" что нужно сделать. То есть напимер Turbo Basic, если видит "PRINT A+B", то он запустит подпрограмму сложения A и B, а потом запустит подпрограмму вывода на экран результата. и т. д.
Компиляция это не трансляция. Компиляция это объединение двух элементов. При компиляции создается "бинарник" в котором содержится программа написанная на языке ВУ, и ее интерпретатор. Когда мы запускаем скомпилированную программу, то в ней запускается интерпретатор, который начинает на лету исполнять программу ЯВУ.
Это сообщение редактировалось 23.08.2023 в 15:46