cpp-ru / ideas

Идеи по улучшению языка C++ для обсуждения
https://cpp-ru.github.io/proposals
Creative Commons Zero v1.0 Universal
89 stars 0 forks source link

Неконсистентность вординга касательно equality of value representation #533

Open eoan-ermine opened 1 year ago

eoan-ermine commented 1 year ago

«Pointers to layout-compatible types shall have the same value representation and alignment requirements» (3.4) [basic.compound]

«Evaluates load(order) and compares its value representation for equality against that of old.» (23.1) [atomics.ref.ops]

Вординг неконсистентен. В одном месте под equality of value representation имеется ввиду то, что кол-во битов в них одинаковое, а в другом то, что эти биты одинаковые.

Причем в другом месте выражаются вот так:

«Each bit of the value representation of the result is equal to the corresponding bit in the object representation of from» (26.5.3) [bit.cast]

То есть, и (23.1) [atomics.ref.ops] было бы логично переписать как-то так для устранения неоднозначности:

«compares bits of its value representation for equality against these of old»

Можно было бы посчитать, что то, что в одном случае речь идёт о количестве, а в другом о значениях битов, понятно из контекста.

Но это не отменяет того, что в одном случае для того, чтобы обозначить сравнение значений битов value representation используется вординг each bit of the value representation, а в других случаях просто compares its value representation, что вносит лишнюю путаницу.

eoan-ermine commented 1 year ago
  1. Употребления вординга has the same value of corresponding bits in its value representation (или аналогичного) для обозначения сравнения на равенство битов, составляющих value representation: basic.fundmanetal#3, bit.cast#2

  2. Употребления вординга compares its value representation for equality (или аналогичного) для обозначения сравнения на равенство количества битов, участвующих в value representation: basic.fundmanetal#3, basic.fundmanetal#6, basic.fundmanetal#10, basic.fundamental#note-11

  3. Употребления вординга compares its value representation for equality (или аналогичного) для обозначения сравнения на равенство битов, составляющих value representation: atomics.ref.ops#19, atomics.ref.ops#23.1, atomics.types.operations#23, atomics.types.operations#30.1

eoan-ermine commented 1 year ago

Употребления вординга has the same value of corresponding bits in its value representation (или аналогичного) для обозначения сравнения на равенство битов, составляющих value representation: basic.fundmanetal#3, bit.cast#2

Употребления вординга compares its value representation for equality (или аналогичного) для обозначения сравнения на равенство количества битов, участвующих в value representation: basic.fundmanetal#3, basic.fundmanetal#6, basic.fundmanetal#10, basic.fundamental#note-11

Употребления вординга compares its value representation for equality (или аналогичного) для обозначения сравнения на равенство битов, составляющих value representation: atomics.ref.ops#19, atomics.ref.ops#23.1, atomics.types.operations#23, atomics.types.operations#30.1

Это вносит путаницу, так как в одних случаях под equality of value representation понимается равенство количества бит, участвующих в нем, а в другом равенство значений бит, участвующих в нем.

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

For a union with bits that participate in the value representation of some members but not others, compare-and-exchange might always fail atomics.types.operations#note-8

То есть, даже в [atomics] о битах то говорится, будто они лишь participate в value representation, то будто их значения и есть само value representation

eoan-ermine commented 1 year ago
  1. Употребления вординга has the same value of corresponding bits in its value representation (или аналогичного) для обозначения сравнения на равенство битов, составляющих value representation: basic.fundmanetal#3, bit.cast#2
  2. Употребления вординга compares its value representation for equality (или аналогичного) для обозначения сравнения на равенство количества битов, участвующих в value representation: basic.fundmanetal#3, basic.fundmanetal#6, basic.fundmanetal#10, basic.fundamental#note-11
  3. Употребления вординга compares its value representation for equality (или аналогичного) для обозначения сравнения на равенство битов, составляющих value representation: atomics.ref.ops#19, atomics.ref.ops#23.1, atomics.types.operations#23, atomics.types.operations#30.1

По-моему, правильно будет переписать все случаи, попадающие в пункт 3, по подобию пункта 1. Это устранит всякую неконсистентность вординга по этому поводу.

Но прошу экспертного мнения, прав ли я.