Страница 3 из 4
Re: Find в списке, когда указаны начало и конец
Добавлено: 31 янв 2016, 08:08
Absurd
То есть всем этим операторам соответствует и один и тот же фрагмент кода и вернуть из операторов разные значения уже не возможно, однако стандарт требует возврата разных значений: префиксная форма должна возвращать новое значение, а постфиксная - старое.
Ну я и пишу - "vreg1 = add vreg0, 1". После этой инструкции виртуальный регистр vreg1 содержит новое значение, vreg0 - старое. Использование префиксного или постфиксного инкремента влияет только на то какой из них будет задействован в текущем контексте.
;t=i++;
и
Код cpp:
;t=++i;
соответствуют разным цепочкам инструкций,
Нет, после работы фронтенда компилятора будет одна IR инструкция в обоих случаях - add. После обработки IR бакендом может не быть ни одной.
Добавлено: 31 янв 2016, 08:12
Сионист
Ну я и пишу - "vreg1 = add vreg0, 1". После этой инструкции виртуальный регистр vreg1 содержит новое значение, vreg0 - старое. Использование префиксного или постфиксного инкремента влияет только на то какой из них будет задействован в текущем контексте.
Выше утверждалось, что виртуальные регистры присваиваются ровно один раз и получают значения в зависимости от того, была ли инициализация.
Нет, после работы фронтенда компилятора будет одна IR инструкция в обоих случаях
Тогда каким образом
и
выведет разные значения? А тест показывает, что эти фрагменты выводят разные значения. И того же требует стандарт. И инструкция не add, а inc, этого требует идеология языка, так как в обоих случаях только inc гарантирует максимальную производительность. Но в одном случае сначала inc, потом mov, а в другом наоборот, или даже два раза mov и между ними inc.
После обработки IR бакендом может не быть ни одной.
Не смешно.
Re: Find в списке, когда указаны начало и конец
Добавлено: 31 янв 2016, 08:21
Absurd
Ну я и пишу - "vreg1 = add vreg0, 1". После этой инструкции виртуальный регистр vreg1 содержит новое значение, vreg0 - старое. Использование префиксного или постфиксного инкремента влияет только на то какой из них будет задействован в текущем контексте.
Выше утверждалось, что виртуальные регистры присваиваются ровно один раз и получают значения в зависимости от того, была ли инициализация.
Ну да, присваиваются ровно один раз и навсегда. Получают в качестве значения либо литерал, либо результат операции над литералами и другими виртуальными регистрами, либо значение Ф-формы. А в чем вы нашли противоречие?
Re: Find в списке, когда указаны начало и конец
Добавлено: 31 янв 2016, 08:22
Сионист
В том, что только что у одного уже было новое значение.
Добавлено: 31 янв 2016, 08:28
Absurd
Тогда каким образом
...
выведет разные значения?
Еще раз, медленно и печально: при парсинге первого куска переменная t будет связана со значением виртуального регистра vreg1 который содержит новое значение, а при парсинге второго куска переменная t будет связана со значением виртуального регистра vreg0 который содержит старое значение. Я терпеливый, если нужно 100 мессаг чтобы это разжевать, будет 100 мессаг, нужно 1000 - будет тысяча.
В том, что только что у одного уже было новое значение.
Не могли бы указать точное место откуда вы это взяли?
Добавлено: 31 янв 2016, 08:29
Сионист
То есть ты отрицаешь рантайм. Отлично.
Absurd писал(а):Не могли бы указать точное место откуда вы это взяли?
Ну я и пишу - "vreg1 = add vreg0, 1". После этой инструкции виртуальный регистр vreg1 содержит новое значение, vreg0 - старое.
Ромео, так кто читать не умеет? Даже свои же посты.
Добавлено: 31 янв 2016, 08:37
Absurd
Ну я и пишу - "vreg1 = add vreg0, 1". После этой инструкции виртуальный регистр vreg1 содержит новое значение, vreg0 - старое.
Ромео, так кто читать не умеет? Даже свои же посты.
Потрудитесь доказать наличие логических противоречий у меня. Есть же нормальный научный подход:
Посылка 1, Посылка 2 ... Посылка N. Следствие 1, Следствие 2, Противоречие между следствием 1 и 2, вердикт - Absurd трепло.
Единственный изъян который я вижу, это то что не указана предкондиция - до этой инструкции регистра vreg1 не существует. Ссылаться на виртуальные регистры которые еще не сществуют, но появятся в дальнейшем позволяет только Ф-форма. Посткондиция ("После этой инструкции ...") же указана верно. Но это не ошибка, а умолчание одной из деталей.
То есть ты отрицаешь рантайм. Отлично.
Опять же, буду рад выслушать цепочку рассуждений которая привела вас к такому выводу.
Добавлено: 31 янв 2016, 09:08
Сионист
Вообще то уже между посылками:
1. Виртуальный регистр
присваивается ровно один раз.
2. Виртуальный регистр
имеет новое значение.
Absurd писал(а):Опять же, буду рад выслушать цепочку рассуждений которая привела вас к такому выводу.
А какая здесь нужна цепочка? Переменная получает значение виртуального регистра, существующего только на этапе парсинга. Всё. Рантайму здесь уже просто нет места. А вместе с рантаймом отрицается уже и определение алгоритма, да и назначение процессора. О какой либо компиляции после этого можно уже забыть.
Re: Find в списке, когда указаны начало и конец
Добавлено: 31 янв 2016, 09:18
Absurd
1. Виртуальный регистр присваивается ровно один раз.
2. Виртуальный регистр имеет новое значение.
Тут есть противоречие только если предположить что виртуальный регистр ранее содержал другое, старое, значение. Но я это нигде не писал.
Re: Find в списке, когда указаны начало и конец
Добавлено: 31 янв 2016, 09:20
Сионист
А что же по-твоему означает "новое значение"? У всех нормальных людей именно то, что раньше было старое, а теперь оно другое.