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

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

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

27 ответов

6 просмотров

Конечно может, у него есть такое право. А @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
из опыта, тк я бедній щкольник

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

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

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

я не магистр хаскеля, но разве не может лейзи тип конвертнуться в не-лейзи запросив вычисление содержимого прям при инициализации?
deadgnom32 λ madao
100
короче сгенерила мне эта штука код на ассемблере: struc string val { common local .value dq .value .value: if ~val eq db val end if db 0 } fo...
Vi Chapmann Chapmann
12
Всем привет! Массив вводится с клавиатуры, кол-во элементов неизвестно, поэтому я указал arr db 100 dup(?) С нахождением максимума проблем нет, а вот минимум почему-то всегд...
En Vind Av Sorg
11
Помогите, пожалуйста, делаю программу для для подсчёта корней квадратного уравнения, знаю, что есть куча недочётов, недоработок, но основная проблема в том, что почему-то при ...
NYC
13
#include <stdio.h> int main(void) { int n; scanf("%d", &n); int digits1[n] = {0}; int digits2[n] = {0}; я не могу таким образом заранее массив нулями заполнить?
Linus
12
в сях есть множество как в питоне? для удаление дубликатов
Linus
25
читать файл максимально быстро? странный вопрос))
zamtmn
53
я про форму записи. смысл указывать что 8 байтный регистр 8 байт?
Aiwan \ (•◡•) / _bot
10
Вроде бы вопрос уже заезжанный, но тем не менее У меня есть функция menu() которая выводит набор возможных действий, а затем спрашивает у пользователя что он хотел бы сделать....
David Golovatin
3
а зачем этот вопрос для удаления из чата?
Mёdkinson Medvezhkin
63
Карта сайта