Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Прочее";
Текущий архив: 2006.12.10;
Скачать: [xml.tar.bz2];

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.54 MB
Время: 0.057 c
15-1164010694
Ольга
2006-11-20 11:18
2006.12.10
как убрать ошибку "invalid variant type conversion"


15-1163956742
vasIzmax
2006-11-19 20:19
2006.12.10
Не нарушая пункт 6. Please!


15-1163994143
Slider007
2006-11-20 06:42
2006.12.10
С днем рождения ! 20 ноября


15-1163872173
POP
2006-11-18 20:49
2006.12.10
Типы данных, cardinal


9-1135854478
Аццкий_рыцарь:)
2005-12-29 14:07
2006.12.10
DoCollision B DelphiX





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский