Информация об изменениях

Сообщение Re[7]: Откуда эта лютая любовь к знаковым целым? от 07.05.2020 22:38

Изменено 08.05.2020 4:01 Erop

Re[7]: Откуда эта лютая любовь к знаковым целым?
Здравствуйте, Mystic Artifact, Вы писали:

MA> Откровенно говоря в C++ слишком много типов для всего подряд в предположении что, что-то может быть и не так. Но нет кода не требующего изменений пережившего бы серьезную смену разрядности или архитектуру. Это все "бычий бред".

MA> И это твое выражение — яркий тому пример.
Суть типов вроде ptrdiff_t не в том, что это какие-то супер-совместимые числа, а в читабельности. И поясняю читателю кода, из каких соображений я выбрал тут разрядность и знаковость целого...
Соответственно, если я использую такой тип для функции вроде fseek, это будет, в первую очередь непонятно, так как разрядности длины сегмента/адреса и длины файла никак не связаны...

MA>Любой двоичный тип данных может быть выражен как просто число.

Это не совсем правда, или я не понял о чём ты. Например, не любой указатель в С++ может быть так выражен. Указатель на поле, например, -- это двоичный тип?

MA>Адрес — это просто число. Это мантра. Повторяй до просветления...

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


MA>При чем за счет ограничения по разрядам — они естественным образом являются и знаковыми и беззнаковыми. Зависит от точки отсчета / аля смысла в них приданного разработчиком. Если же ptrdiff это намек на сегментацию — то C++ с ними не умел и не умеет работать. Да и если вычесть указатели в разных сегментах = безтолковость.

Формально вычитать нельзя ничего, кроме указателей на один и тот же объект/массив или сразу за его конец.

MA> На практике это выливается в то, что (не лично к тебе) вы страдаете какой-то неведомой херней, тема тому доказательство, объясняя какие-то невообразимые вещи. При этом, упорно игнорируя тот факт, что и беззнаковые и знаковые на большинстве операций (т.е. +/-) не отличимы в заданной разрядности регистров. Я это уже выше сказал... просто там дописал позже.

Это не совсем правда. При вычитаниях unsigned от signed очень даже отличаются, хотя и имеют одинаковое бинарное представление...

MA>В чем спор то?

Я так понял ТС, речь идёт о читабельности кода.


MA> Тип данных должен ограничивать (или позволять/определять) возможные значения. Вместо этого мы получаем псевдооптимизации за счет андеф. Это херня полная. Если компиляторы так умны — то вместо int/uint подойдет number из JS. Отличный тип — он и int32 и double, а там думайте дальше сами.


1) не подойдёт. В С жёсткая статическая типизация
2) кроме множества значений, тип задаёт и набор операций. Проблема unsigned в том, что в области вычитаний они не соответствуют целым ;(

MA> Итого: выбросьте свою чушь из головы свою C++-ную про херотипы (желательно вместе с вездесущим size_t). Абстракции даются, не для того, что бы абстрагироваться от реального мира, они даются наоборот, подогнать реальный мир, под убогую модель. Вы же, упорно ставите все с ног на голову.


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

А вообще да, гражданские -- дураки. Строем не ходят, в машкодах не программируют и всё такое
Re[7]: Откуда эта лютая любовь к знаковым целым?
Здравствуйте, Mystic Artifact, Вы писали:

MA> Откровенно говоря в C++ слишком много типов для всего подряд в предположении что, что-то может быть и не так. Но нет кода не требующего изменений пережившего бы серьезную смену разрядности или архитектуру. Это все "бычий бред".

MA> И это твое выражение — яркий тому пример.
Суть типов вроде ptrdiff_t не в том, что это какие-то супер-совместимые числа, а в читабельности. И я так поясняю читателю кода, из каких соображений я выбрал тут разрядность и знаковость целого...
Соответственно, если я использую такой тип для функции вроде fseek, это будет, в первую очередь, непонятно, так как разрядности длины сегмента/адреса и длины файла никак не связаны...

MA>Любой двоичный тип данных может быть выражен как просто число.

Это не совсем правда, или я не понял о чём ты. Например, не любой указатель в С++ может быть так выражен. Указатель на поле, например, -- это двоичный тип?

MA>Адрес — это просто число. Это мантра. Повторяй до просветления...

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


MA>При чем за счет ограничения по разрядам — они естественным образом являются и знаковыми и беззнаковыми. Зависит от точки отсчета / аля смысла в них приданного разработчиком. Если же ptrdiff это намек на сегментацию — то C++ с ними не умел и не умеет работать. Да и если вычесть указатели в разных сегментах = безтолковость.

Формально вычитать нельзя ничего, кроме указателей на один и тот же объект/массив или сразу за его конец.

MA> На практике это выливается в то, что (не лично к тебе) вы страдаете какой-то неведомой херней, тема тому доказательство, объясняя какие-то невообразимые вещи. При этом, упорно игнорируя тот факт, что и беззнаковые и знаковые на большинстве операций (т.е. +/-) не отличимы в заданной разрядности регистров. Я это уже выше сказал... просто там дописал позже.

Это не совсем правда. При вычитаниях unsigned от signed очень даже отличаются, хотя и имеют одинаковое бинарное представление...

MA>В чем спор то?

Я так понял ТС, речь идёт о читабельности кода.


MA> Тип данных должен ограничивать (или позволять/определять) возможные значения. Вместо этого мы получаем псевдооптимизации за счет андеф. Это херня полная. Если компиляторы так умны — то вместо int/uint подойдет number из JS. Отличный тип — он и int32 и double, а там думайте дальше сами.


1) не подойдёт. В С жёсткая статическая типизация
2) кроме множества значений, тип задаёт и набор операций. Проблема unsigned в том, что в области вычитаний они не соответствуют целым ;(

MA> Итого: выбросьте свою чушь из головы свою C++-ную про херотипы (желательно вместе с вездесущим size_t). Абстракции даются, не для того, что бы абстрагироваться от реального мира, они даются наоборот, подогнать реальный мир, под убогую модель. Вы же, упорно ставите все с ног на голову.


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

А вообще да, гражданские -- дураки. Строем не ходят, в машкодах не программируют и всё такое