Обсуждение принципов работы современных компиляторов

Модераторы: Hawk, Romeo, Absurd, DeeJayC, WinMain

Absurd
Сообщения: 1228
Зарегистрирован: 26 фев 2004, 13:24
Откуда: Pietari, Venäjä
Контактная информация:

Переменная получает значение виртуального регистра, существующего только на этапе парсинга. Всё. Рантайму здесь уже просто нет места. А вместе с рантаймом отрицается уже и определение алгоритма, да и назначение процессора.
А так и есть. При помощи шаблонов и constexpr выражений любители С++ уже научились рендерить 3D сцены (*). То есть в исходнике С++ содердится 3D сцена. Во время компиляции происходит трассировка лучей. В результате получается exe, который при запуске просто сохраняет уже готовое отрендеренное изображение в png файл.

Есть только нюанс что любой нетривиальной программе нужно обрабатывать данные полученные из устройств ввода-вывода. Для этого рантайм и нужен.

*:http://bolero-murakami.github.io/Sprout/
А что же по-твоему означает "новое значение"? У всех нормальных людей именно то, что раньше было старое, а теперь оно другое.
Если вы создаете, скажем, новый объект это не значит что раньше на его месте был старый.
2B OR NOT(2B) = FF
Аватара пользователя
Сионист
Сообщения: 1211
Зарегистрирован: 31 мар 2014, 06:18

А так и есть. При помощи шаблонов и constexpr выражений любители С++ уже научились рендерить 3D сцены. То есть в исходнике С++ содердится 3D сцена. Во время компиляции происходит трассировка лучей. В результате получается exe, который при запуске просто сохраняет уже готовое отрендеренное изображение в png файл.
Бред. Сцена в готовом виде в исходнике не может существовать хотябы потому, что эта сцена меняется в зависимости от действий персонажей. Загрузи любую игру и убедись. Более того, даже модели отдельных объектов, из которых сцена собирается, могут загружаться из файлов данных во время исполнения приложения.
Absurd писал(а):Если вы создаете, скажем, новый объект это не значит что раньше на его месте был старый.
Новый объект имеет начальное, или исходное значение, а ни как не новое. Именно потому, что то, что только что создано, не могло иметь старого значения.
Писать можно на чём угодно, но зачем же так себя ограничивать? Пиши на c.
Absurd
Сообщения: 1228
Зарегистрирован: 26 фев 2004, 13:24
Откуда: Pietari, Venäjä
Контактная информация:

Сцена в готовом виде в исходнике не может существовать хотябы потому, что эта сцена меняется в зависимости от действий персонажей.
Я там выше уже добавил ссылочку: http://bolero-murakami.github.io/Sprout/
2B OR NOT(2B) = FF
Аватара пользователя
Сионист
Сообщения: 1211
Зарегистрирован: 31 мар 2014, 06:18

И что? Противоречие это не отменяет, как и отрицание определения алгоритма и назначения процессора.
Писать можно на чём угодно, но зачем же так себя ограничивать? Пиши на c.
Absurd
Сообщения: 1228
Зарегистрирован: 26 фев 2004, 13:24
Откуда: Pietari, Venäjä
Контактная информация:

Какое противоречие? Не было никакого противоречия. Была какая-то херня связанная с тем что вы не умеете читать.
2B OR NOT(2B) = FF
Аватара пользователя
Сионист
Сообщения: 1211
Зарегистрирован: 31 мар 2014, 06:18

Это ты не в состоянии прочитать даже свой пост. В отличие от меня.
Писать можно на чём угодно, но зачем же так себя ограничивать? Пиши на c.
Absurd
Сообщения: 1228
Зарегистрирован: 26 фев 2004, 13:24
Откуда: Pietari, Venäjä
Контактная информация:

Кстати, при компиляции вашего кода

Код: Выделить всё

int a = 1;
std::cout<<++a<<'\n'.
Оператор инкремента не будет сгенерирован вообще. 1+1 будет редуцировано до "2". Литеральная двойка и будет передана параметром в operator<<;
2B OR NOT(2B) = FF
Аватара пользователя
Сионист
Сообщения: 1211
Зарегистрирован: 31 мар 2014, 06:18

1. Не смешно.
2.

Код: Выделить всё

int i;
std::cin>>i;
std::cout<<++i<<std::endl;
и

Код: Выделить всё

int i;
std::cin>>i;
std::cout<<i++<<std::endl;
тоже выводят разные значения при одном и том же вводе. Причём, зависящие от того, что именно вводить. И этого тоже требует стандарт.
Писать можно на чём угодно, но зачем же так себя ограничивать? Пиши на c.
Absurd
Сообщения: 1228
Зарегистрирован: 26 фев 2004, 13:24
Откуда: Pietari, Venäjä
Контактная информация:

И как это противоречит тому что я писал что рантайм нужен для обработки данных полученных из устройств ввода-вывода? Вот вы сейчас обрабатываете данные полученные с эмулятора терминала, то есть с устройства ввода-вывода.
2B OR NOT(2B) = FF
Аватара пользователя
Romeo
Сообщения: 3126
Зарегистрирован: 02 мар 2004, 17:25
Откуда: Крым, Севастополь
Контактная информация:

Сионист, я был неправ, когда написал, что ты не умеешь читать. На самом деле ты исправно читаешь, всё, что тут пишут. Но, вот ведь незадача, понимаешь только часть: видишь какие-то отдельные знакомые слова и выражения. Если они не складываются в привычную для тебя картинку, то начинаешь спорить. Поверь, как только ты полностью поймёшь посты Абсурда, то всё сложится и спорить будет не о чём, так как они логичны до безобразия. Сейчас же, делая пост за постом, вырывая отдельные фразы из контекста и полностью закрывая глаза на оставшуюся часть, оставшуюся для тебя непонятной, ты лишь демонстрируешь свою необразованность и отсутствие конструктивности мышления. Я уже ни раз сталкивался с тобой в подобных спорах, когда ты не понимаешь очевидного и настойчиво пишешь какой-то бред. Меня всегда хватало ненадолго, и я быстро завершал спор словами о бессмысленности дальнейшего обсуждения. Так что я снимаю шляпу перед героическим терпением Абсурда.

P.S. Вынес спор о компиляторе в отдельную тему.
Entites should not be multiplied beyond necessity @ William Occam
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.
Ответить