Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 20.08.2014, 16:31   #1
DakotaZ
Пользователь
 
Регистрация: 31.07.2014
Сообщений: 48
По умолчанию Вопрос про интерпретаторы и компиляторы

Добрый день.

Хочу задать вопрос, возможно не самый заумный, но важный для понимания.
Точнее несколько.

1) У меня стоит mingw32, он компилирует в абсолютный код или в ассемблер?

2) Я правильно понял, интерпретатор не транслирует исходный код в абсолютный или в ассемблерный(имеется ввиду исполняемый модуль в результате), он попросту берет исходный код и сразу же его выполняет?

3) А компилятор в обязательном порядке выдает транслированный код, готовый для исполнения в любой момент?

Вопросы немного абстрактные, тем не менее хотелось бы получить ответы/уточнения.
Заранее спасибо.
DakotaZ вне форума Ответить с цитированием
Старый 20.08.2014, 17:04   #2
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

1)ассемблер есть представление команд процессора.
а бинарник содержит их.
итого, по умолчанию компилятор выдает нам бинарный файл(ексешник например) целевой платформы.
но вроде как можно заставить его выдать нам асм листинг, а не бинарник.

2)да.

3)зависит от параметров, можно скомпилировать библиотеку, которая не предназначена для выполнения.(её подключают в другое приложение, которое уже выполняет её функции).

PS:да и что такое абсолютный код?
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 20.08.2014, 18:00   #3
Smitt&Wesson
Старожил
 
Аватар для Smitt&Wesson
 
Регистрация: 31.05.2010
Сообщений: 13,543
По умолчанию

Пепел Феникса, не вводите человека в заблуждение.
1. Ассемблер, - это мнемоническое представление машинных команд + спецификации самого Ассемблера. Ассемблер, это двухпроходный транслятор мнемоники в исполняемый код. 1-й проход - выполяется проверка на ошибки, формирование машинных команд без адресов и формирование стека меток. 2-й проход - производится присвоение командам физических адресов меток.

2. Да.

3. Не в обязательном. Можно из исходного кода получить объектный, а потом из объектного - мнемонические команды компилируемой программы.
По большому счёту, компиляторы это многопроходные трансляторы.
1. Проверка синтаксиса и типизации.
2. Линковка - формируются связи между модулями.
3. Оптимизация - из модулей убирается всё лишнее. оставляется только нужное. Есть два вида оптимизации а) по быстродействию б) по размеру кода
4. Компоновка - модули располагаются в объектном файле наиболее оптимальным образом.
5. Из объектного файла, формируется непосредственно исполняемый код тот, что мы называем экзешниками.
Пиши пьяным, редактируй трезвым.
Справочник по алгоритмам С++ Builder

Последний раз редактировалось Smitt&Wesson; 20.08.2014 в 18:10.
Smitt&Wesson вне форума Ответить с цитированием
Старый 20.08.2014, 20:10   #4
DakotaZ
Пользователь
 
Регистрация: 31.07.2014
Сообщений: 48
По умолчанию

Исчерпывающие ответы, все ясно и понятно.
Спасибо всем участникам
Но есть еще вопрос, как понять по какому принципу производится 3й проход в моем компиляторе?
Или это все можно узнать в документации к компилятору, если да, то где найти документацию к компилятору c++ из под mingw32.
Также интересует, у всех-ли компиляторов 5 проходов?
И как обстоит дело с интерпретаторами в этом плане.

P.s. Особая благодарность пользователю Smitt&Wesson за подробное описание.

Последний раз редактировалось DakotaZ; 20.08.2014 в 20:20.
DakotaZ вне форума Ответить с цитированием
Старый 20.08.2014, 20:27   #5
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,709
По умолчанию

Цитата:
Но есть еще вопрос, как понять по какому принципу производится 3й проход в моем компиляторе?
По ключам...
https://gcc.gnu.org/onlinedocs/gcc/O...e-Options.html
http://gcc.gnu.org/onlinedocs/gcc-4....on-Levels.html

Цитата:
Также интересует, у всех-ли компиляторов 5 проходов?
В том или ином виде... ну если брать серьезных игроков, а не поделки.

Цитата:
И как обстоит дело с интерпретаторами в этом плане.
Тут кто как разгулялся... вон jit, pyc есть уже давно
p51x вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как парсят скрипт интерпретаторы? Alex Defsen Общие вопросы Delphi 2 10.01.2011 20:50
Интерпретаторы UNIX docbrain Linux (Ubuntu, Debian, Red Hat, CentOS, Mint) 3 22.08.2010 20:20
Вопрос про Свойство Visible и про иконки в imagelist Kappi4 Компоненты Delphi 2 21.05.2010 13:10
Вопрос наверное про функции, а так точно даже не знаю про что. (Вопрос начинющего #6) Albert2008 Общие вопросы Delphi 4 21.08.2008 15:33
У меня вопрос про базы данных,а точнее про таблицы!!! Alexij Общие вопросы Delphi 1 13.04.2008 23:24