Re[10]: C++ illegal instruction
От: LaptevVV Россия  
Дата: 11.08.25 13:26
Оценка: :))) :)
Pzz>Мой любимый пример: x = (flag ? sin : cos)(y); Опыт показывает, что эта простая конструкция приводит многих собеседователей в тупик, в диапазоне от "а что это значит?" и до "а что, так можно?".
Конечно, это потрясение основ!
Ведь всегда во всех книжках написано, что y — слева!
y = (flag ? sin : cos)(x)
Хочешь быть счастливым — будь им!
Без булдырабыз!!!
Re[11]: C++ illegal instruction
От: Pzz Россия https://github.com/alexpevzner
Дата: 11.08.25 18:06
Оценка: +1 :)
Здравствуйте, LaptevVV, Вы писали:

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

LVV>Конечно, это потрясение основ!
LVV>Ведь всегда во всех книжках написано, что y — слева!

Не буду так больше делать, обещаю.
Re[12]: C++ illegal instruction
От: rg45 СССР  
Дата: 11.08.25 18:25
Оценка: +1
Здравствуйте, Pzz, Вы писали:

LVV>>Ведь всегда во всех книжках написано, что y — слева!


Pzz>Не буду так больше делать, обещаю.


Подрыв устоев. Обвал надоев.
--
Справедливость выше закона. А человечность выше справедливости.
Re[13]: C++ illegal instruction
От: Pzz Россия https://github.com/alexpevzner
Дата: 11.08.25 18:27
Оценка: +1 :)
Здравствуйте, rg45, Вы писали:

Pzz>>Не буду так больше делать, обещаю.


R>Подрыв устоев. Обвал надоев.


Отрыв обоев. Погром ковбоев.
Re[10]: C++ illegal instruction
От: alpha21264 СССР  
Дата: 13.08.25 05:59
Оценка:
Здравствуйте, Marty, Вы писали:

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


A>>Ну вот... фигня.

A>>Нормальный программист знает, что не надо менять входные параметры, и как правило не меняет.
A>>Поэтому с моей точки зрения нужно маркировать не константные аргументы, а изменяемые аргументы.
A>>Таким образом в правильно написанной программе хлама не будет.
A>>А сейчас хлама столько же, сколько полезной информации или даже больше.
A>>Это не правильно.

M>Можно случайно напортачить. const же не даст это сделать.


M>И входные параметры не менять? Это очень спорно.


Marty!
Ты читать не умеешь.
У меня написано, что нужно маркировать изменяемые параметры, а не константные.
Прочти эту фразу ещё раз.
Вот если сделать так, то при этом контроль будет. А хлама будет гораздо меньше.

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

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

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

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

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

И что-то мне подсказывает, что на Rust вы просто так не перейдете.
Re[11]: C++ illegal instruction
От: Marty Пират https://www.youtube.com/channel/UChp5PpQ6T4-93HbNF-8vSYg
Дата: 13.08.25 06:46
Оценка:
Здравствуйте, alpha21264, Вы писали:

M>>Можно случайно напортачить. const же не даст это сделать.


M>>И входные параметры не менять? Это очень спорно.


A>Marty!

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

А раз сделано наоборот, то чтобы "не захламлять" код, положим на это болт.

По тому, как сделано — все претензии к сишечке
Маньяк Робокряк колесит по городу
Re[12]: C++ illegal instruction
От: so5team https://stiffstream.com
Дата: 13.08.25 06:56
Оценка: +1
Здравствуйте, Marty, Вы писали:

M>По тому, как сделано — все претензии к сишечке


ЕМНИП, const сперва появился в C++, а потом его уже назад в Си забрали.
Но да, т.к. C++ включал в себя большую часть Си как подмножество, то синтаксис передачи параметров был унаследован из Си. А там const-а не было
Re[11]: C++ illegal instruction
От: rg45 СССР  
Дата: 13.08.25 07:15
Оценка:
Здравствуйте, alpha21264, Вы писали:

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


Прикинь, сам Страуструп высказывался примерно в этом же ключе. Только вот наследие Си помешало этому. Но, как справедливо заметил Марти, это ж не повод, чтоб вообще забить.

P.S. Ты вот не поленись, потрать несколько минут на прочтение: 15. Активно используйте const. Возможно, слова авторитетов покажутся тебе более убедительными, чем наши.
--
Справедливость выше закона. А человечность выше справедливости.
Отредактировано 13.08.2025 7:18 rg45 . Предыдущая версия . Еще …
Отредактировано 13.08.2025 7:18 rg45 . Предыдущая версия .
Re[13]: C++ illegal instruction
От: Marty Пират https://www.youtube.com/channel/UChp5PpQ6T4-93HbNF-8vSYg
Дата: 13.08.25 07:17
Оценка: +1
Здравствуйте, so5team, Вы писали:

M>>По тому, как сделано — все претензии к сишечке


S>ЕМНИП, const сперва появился в C++, а потом его уже назад в Си забрали.

S>Но да, т.к. C++ включал в себя большую часть Си как подмножество, то синтаксис передачи параметров был унаследован из Си. А там const-а не было

Я не писал ничего про ключевое слово const

В сишечке без const — параметры изменяемые, и если бы Страуструп сделал бы наоборот — то сломал бы совместимость. С другой стороны, сишечка в основном оперирует примитивными типами, и указателями. Примитивы проще (и обычно эффективнее) передавать по значению, так что особо не важно, const оно или не const. А дальше — в сишечке всё остальное передаётся через указатели, и тут const нужен 50 на 50 (имхо), т.е. в те времена он не особо и захламлял код. ТС, кстати, имхо зря ноет, если он на сишечке пишет, особого засилья const там быть не должно
Маньяк Робокряк колесит по городу
Re[14]: C++ illegal instruction
От: so5team https://stiffstream.com
Дата: 13.08.25 07:23
Оценка:
Здравствуйте, Marty, Вы писали:

M>>>По тому, как сделано — все претензии к сишечке


S>>ЕМНИП, const сперва появился в C++, а потом его уже назад в Си забрали.

S>>Но да, т.к. C++ включал в себя большую часть Си как подмножество, то синтаксис передачи параметров был унаследован из Си. А там const-а не было

M>Я не писал ничего про ключевое слово const


Так здесь же вроде ветка обсуждения именно про const-параметры, так что это подразумевалось.

M>А дальше — в сишечке всё остальное передаётся через указатели, и тут const нужен 50 на 50 (имхо), т.е. в те времена он не особо и захламлял код.


Я как раз про это. Мой склероз мне подсказывает, что это сперва в C++ появилась возможность написать f(const char*), и только потом, при работе над стандартом C89 эту фичу Си позаимствовал из C++. Так что на протяжении долгого времени в Си вообще не было указателей на const.

M>ТС, кстати, имхо зря ноет, если он на сишечке пишет, особого засилья const там быть не должно


Да не, он вроде бы на C++ пишет. Говорит
Автор: alpha21264
Дата: 11.08 13:31
, что методы-геттеры у него есть.
Re[5]: C++ illegal instruction
От: rg45 СССР  
Дата: 13.08.25 07:33
Оценка: +1
Здравствуйте, alpha21264, Вы писали:

A>Факты говорят обратное. Сейчас 90% выдачи компилятора — это предупреждения на const, которые вообще никогда не приведут к ошибкам.


Твоё "вообще никогда" целиком и полностью держится на человеческом факторе — т.е. ни на чём. Так что, замечания по делу.

Дам тебе ещё одну ссылку на рекомендации ведущих собаководов: http://lib.ysu.am/open_books/417126.pdf — посмотри Правило #1 — "Компилируйте без замечаний при максимальном уровне предупреждений".
--
Справедливость выше закона. А человечность выше справедливости.
Отредактировано 13.08.2025 7:34 rg45 . Предыдущая версия .
Re[10]: C++ illegal instruction
От: alpha21264 СССР  
Дата: 13.08.25 07:37
Оценка: :))
Здравствуйте, Pzz, Вы писали:


Pzz>На собеседованиях любят спрашивать всякую фигню.

Pzz>У Си есть неочевидные нюансы, но никто в своём уме не будет использовать их в боевом коде.

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


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

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

К>Хорошо, когда у возвращаемого типа какой-то простенький конструктор (например, тривиальный). А если нет?

Вот нахрена так делать. Путь будет тривиальным, а инициализировать билдером, di или фабрикой
Re[14]: C++ illegal instruction
От: alpha21264 СССР  
Дата: 13.08.25 07:41
Оценка:
Здравствуйте, Marty, Вы писали:

M>В сишечке без const — параметры изменяемые, и если бы Страуструп сделал бы наоборот — то сломал бы совместимость. С другой стороны, сишечка в основном оперирует примитивными типами, и указателями. Примитивы проще (и обычно эффективнее) передавать по значению, так что особо не важно, const оно или не const. А дальше — в сишечке всё остальное передаётся через указатели, и тут const нужен 50 на 50 (имхо), т.е. в те времена он не особо и захламлял код. ТС, кстати, имхо зря ноет, если он на сишечке пишет, особого засилья const там быть не должно


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

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

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


M>>В сишечке без const — параметры изменяемые, и если бы Страуструп сделал бы наоборот — то сломал бы совместимость. С другой стороны, сишечка в основном оперирует примитивными типами, и указателями. Примитивы проще (и обычно эффективнее) передавать по значению, так что особо не важно, const оно или не const. А дальше — в сишечке всё остальное передаётся через указатели, и тут const нужен 50 на 50 (имхо), т.е. в те времена он не особо и захламлял код. ТС, кстати, имхо зря ноет, если он на сишечке пишет, особого засилья const там быть не должно


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

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

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

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

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


Простите, а под "нормально работающей программой" вы все еще понимаете программу, в которой функции забывают возвращать значения (как в вашем стартовом сообщении этой темы)?
Re: C++ illegal instruction
От: kov_serg Россия  
Дата: 13.08.25 07:46
Оценка: :))
Здравствуйте, alpha21264, Вы писали:

A>То при выходе из функции сгенерится исключение illegal instruction,

A>и программа упадёт в Core Dump.

A>А раньше было неопределённое поведение.

A>Вот. Наткнулся.

луше UB разбавить еще таким UB что-бы было веселее.
bool my_function()
{
   ... // тут не важно что
       // и вот тут не поставлен return
  for(;;) {} // и добавлен бесконечный цикл
}
Re[11]: C++ illegal instruction
От: Pzz Россия https://github.com/alexpevzner
Дата: 13.08.25 07:52
Оценка:
Здравствуйте, alpha21264, Вы писали:

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


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


Ну, молодец.

А я по молодости разок-другой такое в продакшене применил (разумеется не с sin/cos, с какой-то другой парой функций с одинаковым прототипом). Сейчас бы я так делать не стал. Народ реально не догоняет (к огромному моему удивлению).
Re[16]: C++ illegal instruction
От: Pzz Россия https://github.com/alexpevzner
Дата: 13.08.25 08:02
Оценка: +1 -1
Здравствуйте, alpha21264, Вы писали:

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

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

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


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

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

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

Разумеется, в моих программах эти ассерты срабатывают ОЧЕНЬ редко. И если всё же срабатывают, это повод серьёзно беспокоиться.

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