Сообщение Re[7]: Откуда эта лютая любовь к знаковым целым? от 07.05.2020 22:38
Изменено 01.06.2020 15:33 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). Абстракции даются, не для того, что бы абстрагироваться от реального мира, они даются наоборот, подогнать реальный мир, под убогую модель. Вы же, упорно ставите все с ног на голову.
Ничего я не ставлю. Просто код, который оперирует с абстракциями так, что нужно всё время помнить о том, как это будет выглядеть в бинарном представлении, обычно читабельным не считают
А вообще да, гражданские -- дураки. Строем не ходят, в машкодах не программируют и всё такое
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). Абстракции даются, не для того, что бы абстрагироваться от реального мира, они даются наоборот, подогнать реальный мир, под убогую модель. Вы же, упорно ставите все с ног на голову.
Ничего я не ставлю. Просто код, который оперирует с абстракциями так, что нужно всё время помнить о том, как это будет выглядеть в бинарном представлении, обычно читабельным не считают
А вообще да, гражданские -- дураки. Строем не ходят, в машкодах не программируют и всё такое
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). Абстракции даются, не для того, что бы абстрагироваться от реального мира, они даются наоборот, подогнать реальный мир, под убогую модель. Вы же, упорно ставите все с ног на голову.
Ничего я не ставлю. Просто код, который оперирует с абстракциями так, что нужно всё время помнить о том, как это будет выглядеть в бинарном представлении, обычно читабельным не считают
А вообще да, гражданские -- дураки. Строем не ходят, в машкодах не программируют и всё такое