Re[12]: Внезапно, ||= и &&=
От: rg45 СССР  
Дата: 10.08.25 21:07
Оценка:
Здравствуйте, Pzz, Вы писали:

Pzz>Вы меня преследуете что ли? Ну-ну.


Байку вспомнил. Один мужик поздней ночью пробирался домой тёмными дворами. Какой-то неожиданный звук испугал его. Мужик резко дёрнулся и в этот эе момент получил удар по голове, от которого упал и потерял сознание. Придя в себя, он быстро вскочил на ноги, но тут же опять получил удар по голове и опять упал. Так он вскакивал, получал удары и снова падал всю ночь. Наконец, рассвело. И мужик, открыв глаза, увидел над своей головой детский турник...
--
Справедливость выше закона. А человечность выше справедливости.
Re[12]: Внезапно, ||= и &&=
От: Pzz Россия https://github.com/alexpevzner
Дата: 10.08.25 22:37
Оценка:
Здравствуйте, Нomunculus, Вы писали:

Н>Вообще-то он в Касперском работает. Думаю он в плюсах получше тебя шарит, туда абы кого не берут


Давно уже нет. Я сейчас работаю в ДИТ Москвы.

Я не программирую на C++, мои рабочие языки — Си и Go.
Re[7]: Внезапно, ||= и &&=
От: alpha21264 СССР  
Дата: 11.08.25 07:47
Оценка: :)
Здравствуйте, Pzz, Вы писали:

Pzz>Альфа бы, конечно, сказал, что он умный и никогда не будет складывать яблоки с апельсинами, и ему лишний контроль не нужен.


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

Поэтому да — или вы обеспечиваете нормальный контроль, или ну его на фиг.

Течёт вода Кубань-реки куда велят большевики.
Re[8]: Внезапно, ||= и &&=
От: so5team https://stiffstream.com
Дата: 11.08.25 07:56
Оценка:
Здравствуйте, alpha21264, Вы писали:

A>Кроме того нужно как-то описывать что получается при умножении и при делении.

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

Ну как-то же пробуют: https://github.com/mpusz/mp-units
Re[2]: Внезапно, ||= и &&=
От: Maniacal Россия  
Дата: 11.08.25 08:02
Оценка:
Здравствуйте, rg45, Вы писали:

R>А ещё нет булевского XOR. Наверное потому, что для операндов булевского типа его результат всегда совпадает с результатом оператора !=, а для операндов других типов опять возникают всякие неудобные вопросики.


А ещё в Бейсике есть эквиваленция EQV и импликация IMP, в сях нет, но, возможно, и не нужно.
Re[8]: Внезапно, ||= и &&=
От: Pzz Россия https://github.com/alexpevzner
Дата: 11.08.25 08:03
Оценка:
Здравствуйте, alpha21264, Вы писали:

Pzz>>Альфа бы, конечно, сказал, что он умный и никогда не будет складывать яблоки с апельсинами, и ему лишний контроль не нужен.


A>Альфа бы сказал, что сложение и вычитание требует одинаковости типов, а умножение и деление — нет.


Согласен.

A>Когда умножаешь метры на метры, то получаются не метры а квадратные метры.

A>Вот и попробуй всё это описать.

Вот я думаю да. Не "слишком сложная мысль", а поди попробуй всё это описать.

A>Поэтому да — или вы обеспечиваете нормальный контроль, или ну его на фиг.


А вот тут не согласен. То, что уже сейчас есть, определённо лучше, чем ничего.

Заметим, кстати, что умножение и деление встречается в программах порядка на два, наверное, реже, чем сложение и вычитание. В частности поэтому для процессора без встроенных команд умножения и деления было вполне сносно программировать.
Re[3]: Внезапно, ||= и &&=
От: rg45 СССР  
Дата: 11.08.25 08:10
Оценка:
Здравствуйте, Maniacal, Вы писали:

M>А ещё в Бейсике есть эквиваленция EQV и импликация IMP, в сях нет, но, возможно, и не нужно.


Ну да, в сях в дополнение к логическим операциям есть битовые операции и операции с адресами. На этой базе программист может построить всё, что душе угодно.
--
Справедливость выше закона. А человечность выше справедливости.
Re[9]: Внезапно, ||= и &&=
От: alpha21264 СССР  
Дата: 11.08.25 08:37
Оценка: :)
Здравствуйте, so5team, Вы писали:

A>>Кроме того нужно как-то описывать что получается при умножении и при делении.

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

S>Ну как-то же пробуют: https://github.com/mpusz/mp-units


И как успехи? Породили ещё один монстрообразный и ненужный проект?
Ты-ж понимаешь, что метры — это только для примера.
Мне в моей программе понадобятся свои типы и свои величины.
И какого размера монстрика я должен для этого породить?

Течёт вода Кубань-реки куда велят большевики.
Re[10]: Внезапно, ||= и &&=
От: rg45 СССР  
Дата: 11.08.25 08:47
Оценка:
Здравствуйте, alpha21264, Вы писали:

S>>Ну как-то же пробуют: https://github.com/mpusz/mp-units


A>И как успехи? Породили ещё один монстрообразный и ненужный проект?

A>Ты-ж понимаешь, что метры — это только для примера.
A>Мне в моей программе понадобятся свои типы и свои величины.
A>И какого размера монстрика я должен для этого породить?

Ну вот ещё пример: Шаблончик для размерных величин
Автор: rg45
Дата: 11.09.09
.

Обрати внимание на простоту и год — 2009-й. Тогда это поместилось на пол экрана, а в наше время хватило бы и четверти.
--
Справедливость выше закона. А человечность выше справедливости.
Re[10]: Внезапно, ||= и &&=
От: so5team https://stiffstream.com
Дата: 11.08.25 08:48
Оценка:
Здравствуйте, alpha21264, Вы писали:

S>>Ну как-то же пробуют: https://github.com/mpusz/mp-units


A>И как успехи?


Вроде бы планируют добавить эти наработки в С++29.

A>Породили ещё один монстрообразный и ненужный проект?


Если судить по количеству звезд на GitHub-е, далеко не "ненужный".

A>Ты-ж понимаешь, что метры — это только для примера.


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

A>Мне в моей программе понадобятся свои типы и свои величины.

A>И какого размера монстрика я должен для этого породить?

ХЗ, тут бы сперва узнать, а умеете ли вы программировать вообще. Вашего кода я не видел.
Re[11]: Внезапно, ||= и &&=
От: alpha21264 СССР  
Дата: 11.08.25 08:54
Оценка:
Здравствуйте, rg45, Вы писали:

A>>И как успехи? Породили ещё один монстрообразный и ненужный проект?

A>>Ты-ж понимаешь, что метры — это только для примера.
A>>Мне в моей программе понадобятся свои типы и свои величины.
A>>И какого размера монстрика я должен для этого породить?

R>Ну вот ещё пример: Шаблончик для размерных величин
Автор: rg45
Дата: 11.09.09
.


R>Обрати внимание на простоту и год — 2009-й. Тогда это поместилось на пол экрана, а в наше время хватило бы и четверти.


Ну, это несколько не то. Тут у тебя одна и та же величина, просто в разный единицах.
В прошлом веке для этого просто венгерская нотация использовалась.
То есть, задача "не перепутать единицы" была решена вообще без кода.
Да, компилятор ошибки не генерировал. Просто было видно какая переменная в каких единицах.

Течёт вода Кубань-реки куда велят большевики.
Re[12]: Внезапно, ||= и &&=
От: rg45 СССР  
Дата: 11.08.25 09:12
Оценка:
Здравствуйте, alpha21264, Вы писали:

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

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

Ну да, есть такое дело. Но можно допилить, чтоб можно было определять и производные единицы измерения. При современных средствах языка можно добиться того, что эти объявления будут выглядеть декларативно и компактно.
--
Справедливость выше закона. А человечность выше справедливости.
Re[2]: Внезапно, ||= и &&=
От: sergii.p  
Дата: 11.08.25 15:21
Оценка:
Здравствуйте, B0FEE664, Вы писали:

BFE>Для меня выражения

BFE>a &&= expr();
BFE>и
BFE>a ||= expr();
BFE>несколько контринтуитивны

в javascript тоже так подумали, но так как там всё контринтуитивно, решили в язык добавить
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Logical_AND_assignment
Re[3]: a && (a = expr()); - UB?
От: B0FEE664  
Дата: 11.08.25 16:35
Оценка:
Здравствуйте, sergii.p, Вы писали:

SP>в javascript тоже так подумали, но так как там всё контринтуитивно, решили в язык добавить

SP>https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Logical_AND_assignment
Интересно. Интересно ещё, что
ИИ меня упорно убеждает, что запись вида a && (a = expr()); — это неопределённое поведение. Раз выражении одно, то плевать на определённость порядка...
Я в раздумьях...
И каждый день — без права на ошибку...
Re: Внезапно, ||= и &&=
От: _NN_  
Дата: 13.08.25 12:37
Оценка: :))
Здравствуйте, Marty, Вы писали:

M>Здравствуйте!


M>Обнаружил, что таких операторов в плюсах нет


M>Интересно, а с чего?


Зато есть в Perl, хотя даже там только в этом году в 5.42 исправили серьёзный недочёт .
Отсутствие ^^=.

Предлагаете добавить в плюсы ?
http://rsdn.nemerleweb.com
http://nemerleweb.com
Re[4]: a && (a = expr()); - UB?
От: vdimas Россия  
Дата: 19.08.25 20:32
Оценка: :)
Здравствуйте, B0FEE664, Вы писали:

BFE>ИИ меня упорно убеждает, что запись вида a && (a = expr()); — это неопределённое поведение. Раз выражении одно, то плевать на определённость порядка...


Порядок вычисления аргументов && не определён.


BFE>Я в раздумьях...


Попробуй ||
Re[5]: a && (a = expr()); - UB?
От: T4r4sB Россия  
Дата: 19.08.25 20:42
Оценка:
Здравствуйте, vdimas, Вы писали:


V>Порядок вычисления аргументов && не определён.


if (p && p->x == 5) ...
Нет такой подлости и мерзости, на которую бы не пошёл gcc ради бессмысленных 5% скорости в никому не нужном синтетическом тесте
Re[6]: a && (a = expr()); - UB?
От: vdimas Россия  
Дата: 19.08.25 21:19
Оценка:
Здравствуйте, T4r4sB, Вы писали:

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

V>>Порядок вычисления аргументов && не определён.
TB>
TB>if (p && p->x == 5) ...
TB>

Здесь явная точка последовательности — дважды читается одна и так же переменная p, т.е. с т.з. правого операнда все побочные эффекты вычисления левого операнда уже завершены.

В исходном примере, если компилятор в процессе оптимизации предположит, что "a" равно true, то начнёт писать в это "a" во втором выражении и результат может быть неопределённый из-за OoO.
Re[5]: a && (a = expr()); - UB?
От: B0FEE664  
Дата: 20.08.25 15:56
Оценка:
Здравствуйте, vdimas, Вы писали:

BFE>>ИИ меня упорно убеждает, что запись вида a && (a = expr()); — это неопределённое поведение. Раз выражении одно, то плевать на определённость порядка...

V>Порядок вычисления аргументов && не определён.
ЕМНИП порядок вычисления аргументов && не определён, только для пользовательской перегрузки.

если a типа bool или int, то порядок определён.
И каждый день — без права на ошибку...
Re[7]: a && (a = expr()); - UB?
От: B0FEE664  
Дата: 20.08.25 16:02
Оценка:
Здравствуйте, vdimas, Вы писали:

V>Здесь явная точка последовательности — дважды читается одна и так же переменная p, т.е. с т.з. правого операнда все побочные эффекты вычисления левого операнда уже завершены.

Точки последовательности давно выкинули из стандарта .

V>В исходном примере, если компилятор в процессе оптимизации предположит, что "a" равно true, то начнёт писать в это "a" во втором выражении и результат может быть неопределённый из-за OoO.

И каждый день — без права на ошибку...
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.