Обсуждение принципов работы современных компиляторов
Модераторы: Hawk, Romeo, Absurd, DeeJayC, WinMain
-
- Сообщения: 1228
- Зарегистрирован: 26 фев 2004, 13:24
- Откуда: Pietari, Venäjä
- Контактная информация:
Вы тупой чтоли? Речь о том что и i++, ++i, i+=1 и i+1 транслируются в одну и ту же псевдоинструкцию vreg_x=add vreg_y, 1, и дальше компилятор будет работать только с ней до самого конца где в результате понижения (т.н. "lowering") она будет заменена на инкремент. Разница только в том какой из виртуальных регистров будет использован охватывающем выражении - vreg_x или vreg_y. Но в следующем выражении всегда всегда будет использован vreg_x кроме того случая когда не было присваивания (i+1).
2B OR NOT(2B) = FF
Ну если ты мнишь себя умней всего ВАК, то у меня вопрос. Сколько заплатил за диагноз?
Писать можно на чём угодно, но зачем же так себя ограничивать? Пиши на c.
- Romeo
- Сообщения: 3126
- Зарегистрирован: 02 мар 2004, 17:25
- Откуда: Крым, Севастополь
- Контактная информация:
В очередной раз утверждаюсь в мысли, что Сионист просто не умеет читать. Заквотил предложение, построил на нём обличительную саркастическую речь, а следующее предложение даже не удосужился прочесть. По законам жанра после таких фейлов весь сарказм должен вернуться автору, а сам автор обличения должен провалиться под землю от стыда после того, как перечитает первоначальный пост собеседника. Но наш Сионист не таков. Стыд ему не ведом, да и перечитывать он не только не станет, а попросту не умеет.
Entites should not be multiplied beyond necessity @ William Occam
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.
Высшая аттестационная комиссия, то есть комитет, утверждающий учёные степени, звания.Absurd писал(а):Что такое ВАК?
Ну если ВАК утвердил степень, а ты один вдруг решил, что кандидат наук тупой, то как это ещё интерпретировать?По какому каналу вы получили информацию что я считаю себя умнее ВАК?
В отличие от некоторых как раз умею.да и перечитывать он не только не станет, а попросту не умеет.
Писать можно на чём угодно, но зачем же так себя ограничивать? Пиши на c.
-
- Сообщения: 1228
- Зарегистрирован: 26 фев 2004, 13:24
- Откуда: Pietari, Venäjä
- Контактная информация:
Ну попробуйте пособеседоваться в команду Intel C++ или clang. В России есть такие позиции. О результатах напишете тут. По мне так необходимый пласт знаний о том как код на С++ превращается в код машинный у вас отсутствует начисто. Есть чисто умозрительные представления.Ну если ВАК утвердил степень, а ты один вдруг решил, что кандидат наук тупой, то как это ещё интерпретировать?
2B OR NOT(2B) = FF
Сначала попробуй пособеседоваться на место всего ВАК.
У тебя, судя по утверждению о не возможности соблюсти стандарт языка. А с ними нет и возможности оценивать знания. На самом же деле стандарт реально соблюдается: ++i возвращает новое значение i, а i++ - старое, при этом оба оператора увеличивают i на единицу.По мне так необходимый пласт знаний о том как код на С++ превращается в код машинный у вас отсутствует начисто. Есть чисто умозрительные представления.
Писать можно на чём угодно, но зачем же так себя ограничивать? Пиши на c.
-
- Сообщения: 1228
- Зарегистрирован: 26 фев 2004, 13:24
- Откуда: Pietari, Venäjä
- Контактная информация:
Пиписькометрией заниматься не намерен. Вообще считаю то махание регалиями которые вы тут затеяли эпическим вашим провалом.Сначала попробуй пособеседоваться на место всего ВАК.
Я нигде не писал о невозможности соблюсти стандарт языка. Я писал что префиксный и постфиксный инкремент, а также суммирование с литеральной единицей, в результате в результате обработки синтаксического дерева программы конвертируются в одну и ту же IR (*) инструкцию, с которой далее бакенд компилятора и работает, то естьУ тебя, судя по утверждению о не возможности соблюсти стандарт языка.
a) сортирует список IR инструкций в таком порядке чтобы не вычислять одно и то же по N раз, но чтобы не ломались зависимости вычислений друг от друга
б) заменяет IR инструкции на реальные машинные инструкции наиболее выгодным образом, подбирая инструкции с минимальным количеством тактов, по возможности их укладывая на входной конвейер таким образом чтобы они могли выполниться параллельно.
*: intermediate representation, "псевдоассемблер"
2B OR NOT(2B) = FF
- Romeo
- Сообщения: 3126
- Зарегистрирован: 02 мар 2004, 17:25
- Откуда: Крым, Севастополь
- Контактная информация:
Судя по вот этому:Сионист писал(а):В отличие от некоторых как раз умею.
может и умеешь, но так и не перечитал.Сионист писал(а):++i возвращает новое значение i, а i++ - старое, при этом оба оператора увеличивают i на единицу.
Entites should not be multiplied beyond necessity @ William Occam
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.
То есть всем этим операторам соответствует и один и тот же фрагмент кода и вернуть из операторов разные значения уже не возможно, однако стандарт требует возврата разных значений: префиксная форма должна возвращать новое значение, а постфиксная - старое. Мало того, инкремент по стандарту меняет саму величину, а сложение с литеральной единицей - нет. Сложение только возвращает сумму, то есть новое значение переменной в случае, если бы вместо сложения был инкремент, но само значение переменной остаётся старым. В случае, когда значение оператора ни куда не принимается, ++i, i++, i+=1 и i=i+1 могут быть скомпилированы в одну и ту же инструкцию. Но только могут быть скомпилированы в одну инструкцию, а не компилируются в одну инструкцию независимо от места применения.Я нигде не писал о невозможности соблюсти стандарт языка. Я писал что префиксный и постфиксный инкремент, а также суммирование с литеральной единицей, в результате в результате обработки синтаксического дерева программы конвертируются в одну и ту же IR (*) инструкцию, с которой далее бакенд компилятора и работает
Код: Выделить всё
;t=i++;
Код: Выделить всё
;t=++i;
Код: Выделить всё
;++i;
Код: Выделить всё
;i++;
Писать можно на чём угодно, но зачем же так себя ограничивать? Пиши на c.