Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.12.10;
Скачать: CL | DM;

Вниз

Компиляторы, интерпретаторы и трансляторы   Найти похожие ветки 

 
Cyrax ©   (2006-11-20 13:44) [0]

1. Трансляторы, компиляторы и интерпретаторы
Транслятор (в пер. с англ. - "переводчик") – это программа, принимающая на вход программу на одном языке и преобразующая её в программу на другом языке. Исходными и це-левыми языками могут быть как языки высокого уровня, так и низкого (промежуточный байт код или язык ассемблера), в том числе и машинный код.
Примеры трансляторов: assembler (язык ассемблера -> машинный код), дизассемблер (язык ассемблера -> машинный код), компиляторы и декомпиляторы языков высокого уровня, утилита, преобразующая pascal-код  в C-код, javac (транслятор Java) и др.
Компилятор – это частный случай (разновидность) трансляторов. А именно, такой транслятор, который преобразует программу на некотором языке программирования в машинный код. В строгом понимании под машинным кодом следует понимать машинный код процессора. Именно такого понимания придерживаются авторы книги "PHP 5" Дмитрий Котеров и Алексей Костарев, рассматривающие процесс преобразования кода с языка высокого уровня на промежу-точный код (например, байт-код или p-код) как трансляцию (трансляцию в широком понимании, не относящейся к компиляции). С другой стороны, промежуточный код тоже можно рассматри-вать как машинный, только машиной уже является не процессор, а виртуальная машина (CLR для .NET и JVM для Java). Такая абстракция позволяет представить процесс преобразования кода с языка высокого уровня на промежуточный код как компиляцию (разновидность трансляции). Та-кой подход наиболее распространён. Универсальность первого подхода заключается в том, что он не противоречит второму подходу, поскольку компилятор – это транслятор.
Следует отметить, что процесс преобразования процессорного кода в промежуточ-ный нельзя рассматривать как компиляцию (это трансляция процессорного кода в промежуточ-ный), поскольку компиляция подразумевает обработку сверху вниз, т.е. от языка более высокого уровня к языку более низкого (тогда как трансляция может происходить в любом направлении, в том числе и на одном уровне (например, pascal -> С)).
Интерпретатор – это программа, "просматривающая" код на некотором языке про-граммирования и "выполняющая" одну его инструкцию за другой. Основной функцией про-грамм, транслирующих (в частности, компилирующих) и интерпретирующих код является та, ко-торая выполняется на последнем этапе работы таких программ. Поэтому программы, которые сначала транслируют (компилируют согласно второму подходу в понимании компиляторов) код на языке высокого уровня в промежуточный код, а затем его интерпретируют, называют интер-претаторами (с оптимизирующим транслятором (первый подход) или компилирующего типа (второй подход)).
Ключевые отличие интерпретаторов от компиляторов:
1. интерпретатор обнаруживает синтаксические ошибки только когда интерпретиру-ет данную инструкцию
2. интерпретируемые языки позволяют формировать и изменять команды в процессе выполнения программы (для компилируемых языков это возможно только на этапе работы пре-процессора с помощью макросов)
2. интерпретатор ещё и "выполняет" преобразуемый код (естественно, с помощью процессора)
В определении интерпретаторов также существует два подхода. Согласно первому подходу (авторы книги "PHP 5" Дмитрий Котеров и Алексей Костарев) интерпретаторы не явля-ются подмножеством трансляторов, поскольку интерпретаторы не выдают на выходе преобразо-ванного кода программы. Второй подход относит интерпретаторы к множеству трансляторов, по-скольку интерпретатор всё же транслирует инструкции в машинный код (которые сразу же вы-полняет процессор), хотя и не выдаёт преобразованный код программы.

Ниже приведена таблица, иллюстрирующая различия в подходах к пониманию трансляторов, компиляторов и интерпретаторов.

Строгий подход Абстрактный подход
Сторонники авторы книги "PHP 5" Дмитрий Ко-теров и Алексей Костарев Авторы большинства статей в Ин-тернете
Классификация программ, преобра-зующих программный код Трансляторы и интерпретаторы. Компиляторы – частный случай трансляторов Трансляторы.
Компиляторы и интерпретаторы – частные случаи трансляторов
Характеристика интерпретаторов, выполняющих предварительную трансляцию в промежуточный код Интерпретатор с оптимизирующим транслятором или интерпретирую-щий транслятор (с основной функци-ей интерпретации) Интерпретатор компилирующего типа

Чистые компиляторы: C, C++, Pascal, Assembler
Чистые интерпретаторы: Basic, JavaScript, JScript, командный язык DOS (выполняю-щий bat-файлы), shell (командный язык Unix), Python и его разновидности, JVM (виртуальная машина Java), PHP до версии 3, CLR (общеязыковая среда исполнения технологии .NET).
Интерпретаторы с оптимизирующей трансляцией: PHP с версии 4, Perl
Трансляторы в промежуточный код: .NET-языки (Visual C#, Visual J#, Visual Basic .NET, Visual C++ .NET), javac (транслятор Java).

______________________________________________________________
Зацените статью и, собственно, своё мнение (только не обо мне, а об изложенном)...


 
Cyrax ©   (2006-11-20 13:46) [1]

Так, с таблицеё чё-то не вышло. Сейчас будет...


 
Александр Иванов ©   (2006-11-20 13:50) [2]

Слишком много букв, причем о вещах, которые уже описаны в толстенных книгах.


 
Игорь Шевченко ©   (2006-11-20 13:59) [3]


> Зацените статью


Графоманство


 
Курдль ©   (2006-11-20 14:04) [4]

Определение компилятора дано неточно (под это определение подходит и ассемблер).
Ключевые отличия интерпретатора от транслятора даны неправильно.
То, что они обнаруживают ошибки лишь во время выполнения - это вторично.
Кстати, интерпретаторы могут иметь в своем составе (или находиться в среде совместно с) анализаторами кода, выявляющими ошибки до выполнения.


 
KilkennyCat ©   (2006-11-20 14:04) [5]

ой.


 
Cyrax ©   (2006-11-20 14:09) [6]

Игорь Шевченко ©   (20.11.06 13:59) [3]

Зато всё по полочкам...

Александр Иванов ©   (20.11.06 13:50) [2]
Слишком много букв, причем о вещах, которые уже описаны в толстенных книгах.

В этих толстенных книгах везде написано по-разному. Причём об одних и тех же вещах - то копмилятор, то транслятор (или интерпретатор). Толковых разьяснений я ещё не встречал (только это, которое сам сочинил).
Я что -гений ?:))


 
boriskb ©   (2006-11-20 14:10) [7]

Cyrax ©   (20.11.06 13:44)

Дельная вещь.
Ты разобрался.
В голове улеглось
Чтобы лучше улеглось, все постарался систематизировано записать.
Я так часто делал.

Только на всеобщее обозрение не надо было выставлять.
:)


 
KilkennyCat ©   (2006-11-20 14:11) [8]

> Я что -гений ?:))

нет. ибо все гениальное - просто. а тут все слишком сложно. хотя можно было бы уложиться в два предложения.


 
Джо ©   (2006-11-20 14:12) [9]

Много ошибок и неточностей. Например:
Чистые интерпретаторы: ... JVM (виртуальная машина Java).
Ну, и см.  [4] Курдль ©.


 
Cyrax ©   (2006-11-20 14:14) [10]

boriskb ©   (20.11.06 14:10) [7]

Возможно, выпендрёж...
Впрочем, я хотел обсудить детали. Чтоб не писать всё заново - копирнул.
Вот 4-й пост - вот это и нужно...


 
click   (2006-11-20 14:22) [11]

с дефисами проблемы имхо...
а в остальном... чтош, мысли в слух тебе удалось весьма похвально отформатировать...


 
Cyrax ©   (2006-11-20 14:27) [12]

Курдль ©   (20.11.06 14:04) [4]
Определение компилятора дано неточно (под это определение подходит и ассемблер).

Ну так чем ассемблер (не язык, а транслятор) не компилятор ??

Кстати, интерпретаторы могут иметь в своем составе (или находиться в среде совместно с) анализаторами кода, выявляющими ошибки до выполнения.

Ну а это уже не чистые интерпретаторы...

Джо ©   (20.11.06 14:12) [9]
Много ошибок и неточностей. Например:
Чистые интерпретаторы: ... JVM (виртуальная машина Java).

Что - не чистый ?


 
Vga ©   (2006-11-20 14:35) [13]

> Джо ©   (20.11.06 14:12) [9]
> Много ошибок и неточностей. Например:
> Чистые интерпретаторы: ... JVM (виртуальная машина Java)
> .
>
> Что - не чистый ?

Это виртуальная машина. Причем, вполне может и сперва откомпилировать код, а потом запускать (JIT-компиляция).


 
Джо ©   (2006-11-20 14:39) [14]

> [12] Cyrax ©   (20.11.06 14:27)
> Что - не чистый ?

Совершенно верно. Равно как и технология .Net в которой также используется JIT-компиляция.


 
Курдль ©   (2006-11-20 14:41) [15]


> Cyrax ©   (20.11.06 14:27) [12]
> Ну так чем ассемблер (не язык, а транслятор) не компилятор ??


Ассемблер отличается от компилятора тем, что он транслирует одно предложение ЯП строго в одну машинную команду.

Основным отличием интерпретатора является то, что он транслирует и сразу инициирует выполнение предложения за предложением.


 
Курдль ©   (2006-11-20 14:43) [16]


> Джо ©   (20.11.06 14:39) [14]


> Vga ©   (20.11.06 14:35) [13]


Такие трансляторы называют Common-трансляторами.


 
Vga ©   (2006-11-20 14:46) [17]

> [16] Курдль ©   (20.11.06 14:43)

А как называют трансляторы вроде lua, которая сперва компилирует программу в байткод своей VM, потом выполняет на ней без фокусов типа JIT?


 
Cyrax ©   (2006-11-20 15:00) [18]

Курдль ©   (20.11.06 14:41) [15]
Ассемблер отличается от компилятора тем, что он транслирует одно предложение ЯП строго в одну машинную команду.

Одна команда asm -> одна команда процессора ?  Это что - фокус ?
Но даже если взять какой-то гипотетический язык выше машкода, где
одна команда языка -> одна команда процессора, то это тоже будет компилятор...

Основным отличием интерпретатора является то, что он транслирует и сразу инициирует выполнение предложения за предложением.

Да, JVM - не чистый интерпретатор, т.к. компилит весь код в натив (JIT"ом), только потом его запускает...
Но вот JIT - чистый копмилятор...


 
Anatoly Podgoretsky ©   (2006-11-20 15:04) [19]

> Cyrax  (20.11.2006 15:00:18)  [18]

Компилятор/Интерпритарор к ассемблеру не имеют отношения, есть и интерпритирующие ассемблеры.


 
Курдль ©   (2006-11-20 15:05) [20]


> Cyrax ©   (20.11.06 15:00) [18]
> Одна команда asm -> одна команда процессора ?  Это что - фокус ?


А ты не задумывался, почему не бывает "чистого" ассемблера, а он всегда с какими-то мерзкими добавочками типа "Ассемблер 386" или "Ассемблер РС"?

Дальше ты начинаешь утомлять. Я дал тебе точное определение и отличия трансляторов (возможно, они устарели).


 
Cyrax ©   (2006-11-20 15:38) [21]

Anatoly Podgoretsky ©   (20.11.06 15:04) [19]
Компилятор/Интерпритарор к ассемблеру не имеют отношения, есть и интерпритирующие ассемблеры.

Интерпретирующий ассемблер - интерпретатор, компилирующий - компилятор (и транслятор)...


 
oldman ©   (2006-11-20 18:39) [22]


> Транслятор (в пер. с англ. - "переводчик") – это программа,
>  принимающая на вход программу на одном языке и преобразующая
> её в программу на другом языке.


Мдя...


 
DrPass ©   (2006-11-20 18:44) [23]


> компилирующий - компилятор

А есть ли компилирующие ассемблеры? Компиляция подразумевает преобразование. Ассемблер по сути выполняет только подстановку - машинные коды вместо их символических обозначений


 
oldman ©   (2006-11-20 18:46) [24]


> DrPass ©   (20.11.06 18:44) [23]
> Ассемблер по сути выполняет только подстановку - машинные коды вместо их символических обозначений


давно???


 
Anatoly Podgoretsky ©   (2006-11-20 19:50) [25]

> DrPass  (20.11.2006 18:44:23)  [23]

MacroAssembler


 
DrPass ©   (2006-11-21 00:07) [26]


> oldman ©   (20.11.06 18:46) [24]
> давно???

Изначально


> Anatoly Podgoretsky ©   (20.11.06 19:50) [25]

Все то же самое, только перед сборкой прогоняет исходник через мощный препроцессор.


 
MeF Dei Corvi ©   (2006-11-21 00:47) [27]


> Ассемблер по сути выполняет только подстановку - машинные
> коды вместо их символических обозначений

А подстановка не есть преобразование?
К тому же есть ассемблеры, анализирующие код на лишние недостижимые команды.
FASM, например, очень интересный ассемблер.
http://ru.wikipedia.org/wiki/FASM



Страницы: 1 вся ветка

Текущий архив: 2006.12.10;
Скачать: CL | DM;

Наверх




Память: 0.55 MB
Время: 0.036 c
2-1164377355
*Стажер*
2006-11-24 17:09
2006.12.10
Ассоциация файла с программой


10-1126113296
kblc
2005-09-07 21:14
2006.12.10
inproc com-server


4-1154078564
leonidus
2006-07-28 13:22
2006.12.10
Работа с Shell_NotifyIcon


10-1126181335
WhiteMag
2005-09-08 16:08
2006.12.10
Уничтожение сервера приложений


2-1164189213
MmMmMmM
2006-11-22 12:53
2006.12.10
Edit Text + array of Char