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

Если у меня есть строковый литерал, который используется только в

компайл-тайме, дает ли мне кто-то гарантии что он не попадет в бинарь? Если да, то кто?
Варианты ответа:
Стандарт.
Компилятор.
Линкер.
Гарантий нет.

40 ответов

42 просмотра

гарантий нет

гарантий нет, скорее всего точно попадет в бинарь

Aleksei Kuznetsov-Kuznetsov Автор вопроса
Rustam
гарантий нет, скорее всего точно попадет в бинарь

в больших компиляторах сейчас не попадает, даже без оптимизаций

Гарантирует стандарт C++26 (конкретно https://wg21.link/P2361 )

Aleksei Kuznetsov-Kuznetsov Автор вопроса

Хмм, там достаточно конкретный список использований. Покрывает ли бумага такой кейс https://godbolt.org/z/sxTGhr1Wh? Выглядит как будто нет

Aleksei Kuznetsov Kuznetsov
Хмм, там достаточно конкретный список использовани...

у вас именно такой use case, когда в рантайме используется лишь часть строкового литерала?

Aleksei Kuznetsov-Kuznetsov Автор вопроса
Vlad
у вас именно такой use case, когда в рантайме испо...

нет, представте что там нормальная хеш функция, используется весь литерал

Aleksei Kuznetsov Kuznetsov
нет, представте что там нормальная хеш функция, ис...

тогда нет, ваш use case этой бумагой не покрывается

немного не в тему, но зачем вам вообще нужна такая гарантия?

тогда вам правильно сказали, что гарантий нет можете завести баг в кланге, если он не покрывает ваш use case, хотя мог бы

Aleksei Kuznetsov-Kuznetsov Автор вопроса
Vlad
тогда вам правильно сказали, что гарантий нет мож...

Ну я спрашиваю как раз потому что наблюдаю что компиляторы выкидывают строки в таких юзкейсах. Но не нашел нигде чем бы это было гарантировано

Aleksei Kuznetsov-Kuznetsov Автор вопроса
blue hatred
немного не в тему, но зачем вам вообще нужна такая...

Меньше строк - меньше бинарь - меньше вероятностей что уедет что-то конфиденциальное в бинарь

Aleksei Kuznetsov Kuznetsov
Ну я спрашиваю как раз потому что наблюдаю что ком...

гарантировано quality of implementation, так сказать скорее всего оно довольно давно было заточено для -Os

Aleksei Kuznetsov-Kuznetsov Автор вопроса
Vlad
гарантировано quality of implementation, так сказа...

Удивило что даже без оптимизаций все ведут себя так

Aleksei Kuznetsov Kuznetsov
Меньше строк - меньше бинарь - меньше вероятностей...

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

blue hatred
немного не в тему, но зачем вам вообще нужна такая...

В эмбеддед обычно по определённым адресам пришибают метаинфу для скриптов и валидации что натягивают прошивку именно от этого девайса, а не левак. Даже иногда мини подписи туда толкают или контрольные суммы. Обычно за таблицей векторов прерываний. Не факт, что ему это надо, но такие практики есть)

Vladimir123
В эмбеддед обычно по определённым адресам пришибаю...

ну как уже было сказано выше, имплементации имеют моду выкидывать мусор, поэтому лучше опираться на это и сделать consteval функции для подобных строк, чтобы уж точно гарантировать, что они будут использованы только во время компиляции

blue hatred
ну как уже было сказано выше, имплементации имеют ...

Точно, посмотрел внимательнее - у него задача наоборот, чтобы гарантированно не попало в бинарь

Vladimir123
В эмбеддед обычно по определённым адресам пришибаю...

могу привести вот такой пример с CRC-64 https://godbolt.org/z/PfcaE8vse правда для него вам нужен C++20

Vladimir123
Точно, посмотрел внимательнее - у него задача наоб...

я тоже слеповат, не заметил, что вообще не тому человеку отвечал :D

Как ГЭККом разжились, неплохо стало, даже Когти Смерти почти не беспокоят

Vadim Ushakov
Как ГЭККом разжились, неплохо стало, даже Когти См...

я как увидел слово ГЭКК в одном из чатов сразу зашел что это тут обсуждается, и не ошибся, то самое

🐙 Antony Polukhin
Гарантирует стандарт C++26 (конкретно https://wg21...

Это прям 100% или опционально? И если да, то чем мотивирована такая обязательность (понятно, что неиспользуемый в рантайме литерал можно выкинуть, но зачем обязывать это делать)?

Aleksei Kuznetsov Kuznetsov
Меньше строк - меньше бинарь - меньше вероятностей...

Хреновый способ сохранения секретности был выбран

disba1ancer
Хреновый способ сохранения секретности был выбран

ну если довести до логического финала (вообще не иметь бинарь) то вполне себе надёжный (нет бинаря — утекать неоткуда)

disba1ancer
Это прям 100% или опционально? И если да, то чем м...

Обязательно. Просто это все делают, так что прописали в стандарте )

🐙 Antony Polukhin
Обязательно. Просто это все делают, так что пропис...

Имхо поспешили, хватило бы разрешения так делать

🐙 Antony Polukhin
Обязательно. Просто это все делают, так что пропис...

Кстати, там noexcept в механизм частичной специализации не собираются завозить? Чтобы делать такое: template <typename T> struct Foo; template <typename Ret, typename ... Args, bool nx> struct Foo<Ret(Args...) noexcept(nx)> { ... };

Denis P
так оно и сейчас вроде работает?

Там требуется тип. В типе можно писать noexcept(expr)?

Denis P
Foo<void() noexcept(true)> вы про это?

Да. Я не уверен, что так можно

Denis P
так оно и сейчас вроде работает?

Только в gcc и шланге и является расширением

Denis P
Foo<void() noexcept(true)> вы про это?

Надо чтобы вместо true выводился параметр шаблона в специализации

Denis P
он и выводится в специализации же?

Формально нет, но gcc и шланг умеют

disba1ancer
Формально нет, но gcc и шланг умеют

в 23 стандарте видимо пофиксят)

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

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

30500 за редактор? )
Владимир
47
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
вы делали что-то подобное и как? может есть либы готовые? увидел картинку нокода, где всё линиями соединено и стало интересно попробовать то же в ddl на lua сделать. решил с ч...
Victor
8
Подскажите пожалуйста, как в CustomDrawCell(Sender: TcxCustomGridTableView; ACanvas: TcxCanvas; AViewInfo: TcxGridTableDataCellViewInfo; var ADone: Boolean); получить наз...
A Z
7
Ребят в СИ можно реализовать ООП?
Николай
33
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
Раз начали говорить про embassy, то присоединюсь со своими парой вопросов. 1) Есть ли сопоставимые аналоги для асинхронного кода в emdebbed? 2) Можно ли внутри задач embassy ...
NI_isx
6
Как передать управляющий символ в открытую через CreateProcess консоль? Собсна, есть процедура: procedure TRedirectThread.WriteData(Data: OEMString); var Written: Cardinal;...
Serjone
1
Он в одиночку это дело запилил или была какая-то команда?
Aquinary
12
~ 2m21s  nix shell github:nixos/nixpkgs#stack ~  stack ghc -- --version error: … while calling the 'derivationStrict' builtin at /builtin/derivation.nix:...
Rebuild your mind.
6
Карта сайта