172 похожих чатов

Тогда в чем вопрос? Если вычислимость является аксиомой для всех

sconst, то это самый тривиальный случай — компилятор может просто начинать вычислять

27 ответов

25 просмотров

Конечно может, у него есть такое право. А @iccsf утверждает, что это его обязанность.

Маjко-Lubinéts Автор вопроса
Mikail Bagishov
Конечно может, у него есть такое право. А @iccsf у...

А по какому критерию компилятор будет решать что ему вычислять, а что нет, если все sconst вычислимы? if rand() == 1?

Маjко-Lubinéts Автор вопроса
Маjко-Lubinéts Автор вопроса
Mikail Bagishov
Ну например по такому, или каждое пятое.

Хорошо, допустим. Почему компилятор должен каждую твою функцию компилировать в эквивалентное внутреннее представление, а не заменять каждую пятую на return 0?

Mikail Bagishov
Ну например по такому, или каждое пятое.

На самом деле, я даже могу привести пример где это осмысленно: компилятор 1) доказал, что конст-выражение корректно. 2) опасается, что выражение потребует для вычисления более 10**18 единичных шагов 3) предполагает, что функция будет вызываться редко. Тогда он: 1) может при каждом запуске функции честно вычислять это выражение (это точно корректное поведение) 2) по идее, может завернуть в лейзи-статик (но я не на 100% уверен, что так можно) И сильно сэкономить на компиляции

Маjко-Lubinéts Автор вопроса
Mikail Bagishov
На самом деле, я даже могу привести пример где это...

Я предпочту чтобы компилятор вел себя предсказуемо, спасибо

Маjко Lubinéts
Хорошо, допустим. Почему компилятор должен каждую ...

Потому что тут есть конкретное as-if rule: есть программа на расте, есть абстрактная машина, есть набор поведений этой программв на этой машине. Поведение бинарника на реальной машине должно быть одним из поведений исходной программы на абстрактрой машине

Маjко Lubinéts
Я предпочту чтобы компилятор вел себя предсказуемо...

Так и пишем в стандарт: "реализация должна вести себя предсказуемо по мнению mersinvald и mikailbag"?:)

Маjко-Lubinéts Автор вопроса
Mikail Bagishov
Так и пишем в стандарт: "реализация должна вести с...

Если функция помечена как sconst и все ее параметры помечены как sconst, результат тоже является sconst и обязан быть вычислен во время компиляции

Mikail Bagishov
Потому что тут есть конкретное as-if rule: есть пр...

Ну и если компилятор заменит тело функции на return 0, то (кроме вырожденных случаев типа в функции было UB или функция никогда не вызывалась) as-if rule сломается

Маjко Lubinéts
Если функция помечена как sconst и все ее параметр...

То есть в оперативной памяти компилятора на миг должно появится значение выражения? Или в бинарнике? Или в бинарнике, но до применения к нему оптимизаций?

Börgar
да, все со своим cost

нет, просто я не смог найти, чтобы там требовали от компилятора вычисления на этапе компиляции. Там как-то хитро сделано и вводится новые типы constant expression

Börgar
ну его мохно в темплейт кинуть, во

А разве это заставит компилятор вычислить точное значение?

Alexander "SonnySlave" Zaitsev
и?

а мономорфизация же всегда в компайл-тайме

Börgar
а ♂hunded bucks♂ можно?

тогда откуда такое утверждение?

Börgar
из опыта, тк я бедній щкольник

тут опыт не интересен. тут интересно формальное описание

Похожие вопросы

Обсуждают сегодня

а через ESC-код ?
Alexey Kulakov
29
30500 за редактор? )
Владимир
47
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
13
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
program test; {$mode delphi} procedure proc(v: int32); overload; begin end; procedure proc(v: int64); overload; begin end; var x: uint64; begin proc(x); end. Уж не знаю...
notme
6
Как передать управляющий символ в открытую через CreateProcess консоль? Собсна, есть процедура: procedure TRedirectThread.WriteData(Data: OEMString); var Written: Cardinal;...
Serjone
6
Вот еще странный косяк, подскажите как бороться. Я git clone сделал себе всего embassy и примеры там запускаю. Всё хорошо. Но вот решил в cargo.toml зависимости не как в приме...
Lukutin R2AJP
1
вы делали что-то подобное и как? может есть либы готовые? увидел картинку нокода, где всё линиями соединено и стало интересно попробовать то же в ddl на lua сделать. решил с ч...
Victor
8
Ребят в СИ можно реализовать ООП?
Николай
33
Карта сайта