Re[12]: C++ illegal instruction
От: alpha21264 СССР  
Дата: 13.08.25 08:09
Оценка:
Здравствуйте, so5team, Вы писали:

A>>У меня написано, что нужно маркировать изменяемые параметры, а не константные.

A>>Вот если сделать так, то при этом контроль будет. А хлама будет гораздо меньше.

S>Это можно сделать только в новом языке забив на совместимость. Например, в Rust-е так и поступили.


Ну, моё нытьё — оно действительно о том, что язык и его кумпилятор развиваются не туда. Имею право поныть.

S>Но ведь вы говорите о C++, а в C++ вот так. И вы можете либо забить на наличие const и отгрести приключений, либо принять тот факт, что в C++ через const отмечаются неизменяемые параметры и получать от этого бенефиты.


Для этого нужно ввести в стандарт всего одно ключевое слово neconst, и один флаг кумпилятора — как интерпретировать ситуацию, когда не задан ни тот ни другой модификатор. Я бы справился с этой задачей за один рабочий день.

Да, я уже лазил в потроха gcc, и научил его понимать переменные русскими буквами. Поэтому у меня длиннее. (ирония/самоирония)

S>И что-то мне подсказывает, что на Rust вы просто так не перейдете.


Разумеецца. Потому что геморроя много, а польза сомнительна.
Ну так и весь мир(тм) не переходит. Значит я не так уж и не прав.

Да, я люблю, когда язык мне помогает.
Но мне не нравится ситуация, когда я "тащу коня на себе". Конь не для этого.

<троллинг-мода>
Ну вот мы уже третий день разговариваем о том, что вы жить не можете без модификатора const.
А как вы отлаживаете ситуации, когда программист плюс с минусом перепутал?
Или у вас в программах нет плюсов и минусов (а есть только плюсы)?
</троллинг-мода>

PS.
А давайте на нашем сайте введём тег "троллинг-мода".
Мне кажется, что он будет востребован.

Течёт вода Кубань-реки куда велят большевики.
Re[13]: C++ illegal instruction
От: so5team https://stiffstream.com
Дата: 13.08.25 08:13
Оценка:
Здравствуйте, alpha21264, Вы писали:

A>Для этого нужно ввести в стандарт всего одно ключевое слово neconst, и один флаг кумпилятора — как интерпретировать ситуацию, когда не задан ни тот ни другой модификатор. Я бы справился с этой задачей за один рабочий день.


В два стандарта: в стандарт C++, и в стандарт Си.
Re[13]: C++ illegal instruction
От: Pzz Россия https://github.com/alexpevzner
Дата: 13.08.25 08:19
Оценка: +1 :)
Здравствуйте, alpha21264, Вы писали:

A>Для этого нужно ввести в стандарт всего одно ключевое слово neconst, и один флаг кумпилятора — как интерпретировать ситуацию, когда не задан ни тот ни другой модификатор. Я бы справился с этой задачей за один рабочий день.


Его надо еще по-разному интерпретировать в твоих исходниках и в хидерах.

A>Да, я уже лазил в потроха gcc, и научил его понимать переменные русскими буквами. Поэтому у меня длиннее. (ирония/самоирония)


Я тебя расстрою. У ослика еще длиннее.

A>PS.

A>А давайте на нашем сайте введём тег "троллинг-мода".
A>Мне кажется, что он будет востребован.
A>

Это такой способ сказать модератору, "а я в домике"?
Re[12]: C++ illegal instruction
От: rg45 СССР  
Дата: 13.08.25 08:21
Оценка:
Здравствуйте, Pzz, Вы писали:

Pzz>>>Мой любимый пример: x = (flag ? sin : cos)(y); Опыт показывает, что эта простая конструкция приводит многих собеседователей в тупик, в диапазоне от "а что это значит?" и до "а что, так можно?".


A>>Должен признаться, что понял, что делает этот код, только после 15 минут разглядывания.


Pzz>Ну, молодец.


Pzz>А я по молодости разок-другой такое в продакшене применил (разумеется не с sin/cos, с какой-то другой парой функций с одинаковым прототипом). Сейчас бы я так делать не стал. Народ реально не догоняет (к огромному моему удивлению).


Я бы тоже не стал использовать такую конструкцию, и не только потому, что это ставит кого-то в тупик, а потому что выражение (flag ? sin : cos) имеет тип указателя на функцию. Т.е дополнительная косвенность появляется совершенно необосновано. Рассуждения примерно те же, что и в случае ++i vs i++. Подробнее здесь: 9. Не пессимизируйте преждевременно.
--
Справедливость выше закона. А человечность выше справедливости.
Отредактировано 13.08.2025 8:22 rg45 . Предыдущая версия .
Re[13]: C++ illegal instruction
От: Pzz Россия https://github.com/alexpevzner
Дата: 13.08.25 08:26
Оценка:
Здравствуйте, rg45, Вы писали:

Pzz>>А я по молодости разок-другой такое в продакшене применил (разумеется не с sin/cos, с какой-то другой парой функций с одинаковым прототипом). Сейчас бы я так делать не стал. Народ реально не догоняет (к огромному моему удивлению).


R>Я бы тоже не стал использовать такую конструкцию, и не только потому, что это ставит кого-то в тупик, а потому что выражение (flag ? sin : cos) имеет тип указателя на функцию. Т.е дополнительная косвенность появляется совершенно необосновано. Рассуждения примерно те же, что и в случае ++i vs i++. Подробнее здесь: 9. Не пессимизируйте преждевременно.


Это вообще не проблема. Вменяемый компилятор эту косвенность свернёт.

Более того, на процессоре, который поддерживает MOV с условием (ARM, относительно свежие x86), он таки может выбрать косвенность и сэконимить один переход, вычислив выражение в скобках без переходов.
Re[14]: C++ illegal instruction
От: rg45 СССР  
Дата: 13.08.25 08:28
Оценка:
Здравствуйте, Pzz, Вы писали:

R>>Я бы тоже не стал использовать такую конструкцию, и не только потому, что это ставит кого-то в тупик, а потому что выражение (flag ? sin : cos) имеет тип указателя на функцию. Т.е дополнительная косвенность появляется совершенно необосновано. Рассуждения примерно те же, что и в случае ++i vs i++. Подробнее здесь: 9. Не пессимизируйте преждевременно.


Pzz>Это вообще не проблема. Вменяемый компилятор эту косвенность свернёт.


Стопудово свернет. Точно так же, как сгенерирует одинаковый код для ++i и i++. Но это вовсе не означает, что нет проблемы. Ты текст по ссылке-то открой.
--
Справедливость выше закона. А человечность выше справедливости.
Re[13]: C++ illegal instruction
От: so5team https://stiffstream.com
Дата: 13.08.25 08:30
Оценка:
Здравствуйте, rg45, Вы писали:

R>Я бы тоже не стал использовать такую конструкцию, и не только потому, что это ставит кого-то в тупик, а потому что выражение (flag ? sin : cos) имеет тип указателя на функцию.


А, кстати говоря, есть ли гарантия, что у std::sin можно взять указатель на функцию?

Почему-то у меня в голове крутится смутное воспоминание на запрет на взятие указателя на функции стандартной библиотеки. Типа на самом деле std::some_name может и не быть функцией (вроде бы это для всяких isalnum и тому подобных актуально). Но уже не помню правда это или нет.
Отредактировано 13.08.2025 8:34 so5team . Предыдущая версия .
Re[14]: C++ illegal instruction
От: rg45 СССР  
Дата: 13.08.25 08:37
Оценка: +1
Здравствуйте, so5team, Вы писали:

S>А, кстати говоря, есть ли гарантия, что у std::sin можно взять указатель на функцию?


Ну в данном же случае используются сишные sin и cos — https://en.cppreference.com/w/c/numeric/math/sin.html

А тут уж без вариантов будет функция — не шаблон, не перегрузка и не функциональный объект. Вот если написать std::sin и std::cos, тогда получится облом.
--
Справедливость выше закона. А человечность выше справедливости.
Отредактировано 13.08.2025 8:38 rg45 . Предыдущая версия .
Re[14]: C++ illegal instruction
От: alpha21264 СССР  
Дата: 13.08.25 08:39
Оценка:
Здравствуйте, Pzz, Вы писали:

A>>Для этого нужно ввести в стандарт всего одно ключевое слово neconst, и один флаг кумпилятора — как интерпретировать ситуацию, когда не задан ни тот ни другой модификатор. Я бы справился с этой задачей за один рабочий день.


Pzz>Его надо еще по-разному интерпретировать в твоих исходниках и в хидерах.


Ну, это если вообще ничего не менять в исходниках.
А если применить диалектический подход...
В смысле, что исходники будут постепенно приходить к новой реальности.

В своё время решили, что вот тут:

for( int i... )


i не будет существовать после цикла.
Ну и как-то все привыкли. И даже я.

Кстати, в этом дурацком проекте, на котором я словил свои проблемы,
для разных сишников нужны разные стандарты С++.
Потому что нельзя выбрать ни минимальную ни максимальную версию.
Вот где жопа-то.

A>>А давайте на нашем сайте введём тег "троллинг-мода".

A>>Мне кажется, что он будет востребован.

Pzz>Это такой способ сказать модератору, "а я в домике"?


Ну, троллинг на нашем сайте вроде не запрещён.
Но я хочу явно предупредить недогадливого собеседника, когда я шучу, а когда я серёзен.
Ну если ему const-ы нужны, наверное ему и другие маркеры требуются.

Течёт вода Кубань-реки куда велят большевики.
Re[15]: C++ illegal instruction
От: so5team https://stiffstream.com
Дата: 13.08.25 09:12
Оценка: +1
Здравствуйте, alpha21264, Вы писали:

A>Ну если ему const-ы нужны


Таких как я очень и очень много, судя по количеству const-ов в нормальных кодовых базах и количеству рекомендаций применять const by default от лучших собаководов. Так что нас рать.
Re[16]: C++ illegal instruction
От: rg45 СССР  
Дата: 13.08.25 09:24
Оценка: +1
Здравствуйте, so5team, Вы писали:

S>Таких как я очень и очень много, судя по количеству const-ов в нормальных кодовых базах и количеству рекомендаций применять const by default от лучших собаководов. Так что нас рать.


И имя нам легион
--
Справедливость выше закона. А человечность выше справедливости.
Re[17]: C++ illegal instruction
От: serg_joker Украина  
Дата: 13.08.25 10:09
Оценка: +1
Здравствуйте, Pzz, Вы писали:

Pzz>Ты не представляешь, сколько раз мне приходилось спорить с коллегами на тему, с какого это такого хрена я оставляю в релизной сборке assert-ы (обычно не либсишные, а самодельные, которые умеют прощальные слова в лог писать, а не куда придётся).

С подходом по ассёртам в целом согласен, за исключением того, что в релизе у меня по умолчанию они не сваливают всё-таки программу, а пишут в журнал условие и стек. Ну и можно через переменную окружения настроить поведение (можно полностью отключить, можно вызывать abort). К сожалению, иногда стреляет и в проде. Хотя всё меньше и меньше, но бывает. Изначально у меня тоже abort звало в проде, но была ситуация, когда ассёрт был ошибочным, и раз упавшая программа уже не поднималась, это вызвало реакцию, которую я больше переживать не хочу

Pzz><...> я не и делаю отдельных отладочных сборок, зачем мне тестировать и отлаживать дебугную сборку, если пользователю я поставляю релизную?

Тут не соглашусь, в дебажной сборке кроме моих ассёртов включаются ещё и внутренние проверки stl/libc всякие там проверки валидности итераторов и прочее. Да и сам я вставляю больше проверок инвариантов, которые в прод. всё-таки слишком дороги с т.з. времени выполнения. Да, отсутствие оптимизаций делает программу другой, но я на практике не сталкивался с тем, чтобы дебаг работал, а релиз — нет именно из-за включившегося оптимизатора, UB с этим связанного и прочего. А вот доп. проверки дебажного варианта stl что-то, было, и ловили.
И дебаг — с ASAN, тоже в релиз не покладёшь.
А, ну и на дебаг у меня нет -Werror, т.к. по месту, бывает, втыкаю мусорный код для отладки, где nodiscard игнорируется или приведение типа не делается явное или знак/беззнак сравнивается или ещё чего подобное, что недопустимо в коммит, но во времянке можно.

Полагаю, что различия в этой части у нас с тобой связаны в различиях между C++ и go инструментариями (на go не писал, могу только предполагать).
Отредактировано 13.08.2025 10:11 serg_joker . Предыдущая версия .
Re[16]: C++ illegal instruction
От: alpha21264 СССР  
Дата: 13.08.25 10:10
Оценка:
Здравствуйте, so5team, Вы писали:

A>>Ну если ему const-ы нужны


S>Таких как я очень и очень много, судя по количеству const-ов в нормальных кодовых базах и количеству рекомендаций применять const by default от лучших собаководов. Так что нас рать.


<тролль-мода>
Интеллектуальное большинство.
</тролль-мода>

Течёт вода Кубань-реки куда велят большевики.
Re[15]: C++ illegal instruction
От: Marty Пират https://www.youtube.com/channel/UChp5PpQ6T4-93HbNF-8vSYg
Дата: 13.08.25 10:11
Оценка:
Здравствуйте, alpha21264, Вы писали:

A>Топикстартер ноет, что компилятор захламляет выдачу. С лишним словом в исходниках я готов мириться.


Неправда. Ты ныл и о том, что const захламляет твои исходники.


A>А вот то, что я могу пропустить важное предупреждение из-за огромного числа неважных и просто лишних, меня напрягает.


Эта проблема решается за неделю, ковыряясь в носу и попивая пиво
Маньяк Робокряк колесит по городу
Re[13]: C++ illegal instruction
От: Marty Пират https://www.youtube.com/channel/UChp5PpQ6T4-93HbNF-8vSYg
Дата: 13.08.25 10:22
Оценка:
Здравствуйте, alpha21264, Вы писали:

A>Для этого нужно ввести в стандарт всего одно ключевое слово neconst, и один флаг кумпилятора — как интерпретировать ситуацию, когда не задан ни тот ни другой модификатор. Я бы справился с этой задачей за один рабочий день.


И никто им не будет пользоваться, потому что старую кодовую базу никуда не деть, и любой твой новый код всё равно должен сопрягаться со старой кодовой базой
Маньяк Робокряк колесит по городу
Re[15]: C++ illegal instruction
От: Marty Пират https://www.youtube.com/channel/UChp5PpQ6T4-93HbNF-8vSYg
Дата: 13.08.25 10:24
Оценка:
Здравствуйте, alpha21264, Вы писали:

A>В своё время решили, что вот тут:


A>
A>for( int i... )
A>


A>i не будет существовать после цикла.

A>Ну и как-то все привыкли. И даже я.

Это мелочь. Это было очень давно, когда совокупная кодовая база была не сравнима с текущей
Маньяк Робокряк колесит по городу
Re[16]: C++ illegal instruction
От: Marty Пират https://www.youtube.com/channel/UChp5PpQ6T4-93HbNF-8vSYg
Дата: 13.08.25 10:24
Оценка:
Здравствуйте, alpha21264, Вы писали:


A>А ещё больше меня напрягает, что нормально работающую программу слишком вумный кумпилятор насильно ложит в корку.


Тебе просто раньше везло, что она нормально работала
Маньяк Робокряк колесит по городу
Re[16]: C++ illegal instruction
От: alpha21264 СССР  
Дата: 13.08.25 10:31
Оценка:
Здравствуйте, Marty, Вы писали:

M>Здравствуйте, alpha21264, Вы писали:


A>>Топикстартер ноет, что компилятор захламляет выдачу. С лишним словом в исходниках я готов мириться.


M>Неправда. Ты ныл и о том, что const захламляет твои исходники.


Прямая цитата из
https://rsdn.org/forum/cpp/8971932.1
Автор: alpha21264
Дата: 31.07 13:45


N>А компилятор наверняка тебя предупредил!

Типа да. Но он сейчас стал таким занудным — на трёх экранах бессмысленной выдачи я это сообщение просмотрел.


A>>А вот то, что я могу пропустить важное предупреждение из-за огромного числа неважных и просто лишних, меня напрягает.


M>Эта проблема решается за неделю, ковыряясь в носу и попивая пиво


Ну то есть не решается вообще.
Потому что это программа, которую я использую в режиме час-перед-сном.
И в таком режиме рабочая сорокачасовая неделя означает,
что я должен потратить 40 вечеров своей бесценной жизни.

Но ты веришь (в религиозном смысле) что этот путь слёз и страданий необходим.
Потому что один раз за всё время существования вселенной эта программа,
которую я использую в качестве хобби, может выдать неверный результат.

Ну да, это достойно восхищения. Путь самурая и вот это всё.

Течёт вода Кубань-реки куда велят большевики.
Re[17]: C++ illegal instruction
От: alpha21264 СССР  
Дата: 13.08.25 10:37
Оценка:
Здравствуйте, so5team, Вы писали:

A>>А ещё больше меня напрягает, что нормально работающую программу слишком вумный кумпилятор насильно ложит в корку.


S>Простите, а под "нормально работающей программой" вы все еще понимаете программу, в которой функции забывают возвращать значения (как в вашем стартовом сообщении этой темы)?


Под нормально работающей программой я понимаю видеоредактор, которым я наредактировал уже чёрт-знает-сколько видео.
И да, в ней функции забывают возвращать значения. Это не мешает порождать видео длинной до двух часов.

Течёт вода Кубань-реки куда велят большевики.
Re[17]: C++ illegal instruction
От: Marty Пират https://www.youtube.com/channel/UChp5PpQ6T4-93HbNF-8vSYg
Дата: 13.08.25 10:51
Оценка:
Здравствуйте, alpha21264, Вы писали:

M>>Неправда. Ты ныл и о том, что const захламляет твои исходники.


A>Прямая цитата из

A>https://rsdn.org/forum/cpp/8971932.1
Автор: alpha21264
Дата: 31.07 13:45


A>

N>>А компилятор наверняка тебя предупредил!

A>Типа да. Но он сейчас стал таким занудным — на трёх экранах бессмысленной выдачи я это сообщение просмотрел.


Мне лень искать, где ты ныл про const, которые захламляют код


A>>>А вот то, что я могу пропустить важное предупреждение из-за огромного числа неважных и просто лишних, меня напрягает.


M>>Эта проблема решается за неделю, ковыряясь в носу и попивая пиво


A>Ну то есть не решается вообще.

A>Потому что это программа, которую я использую в режиме час-перед-сном.
A>И в таком режиме рабочая сорокачасовая неделя означает,
A>что я должен потратить 40 вечеров своей бесценной жизни.

A>Но ты веришь (в религиозном смысле) что этот путь слёз и страданий необходим.

A>Потому что один раз за всё время существования вселенной эта программа,
A>которую я использую в качестве хобби, может выдать неверный результат.

A>Ну да, это достойно восхищения. Путь самурая и вот это всё.


Нихрена не понял, что за поток сознания?
Маньяк Робокряк колесит по городу
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.