The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]



Вариант для распечатки  
Пред. тема | След. тема 
Форум Разговоры, обсуждение новостей
Режим отображения отдельной подветви беседы [ Отслеживать ]

Оглавление

Релиз ядра Linux 6.2, opennews (??), 20-Фев-23, (0) [смотреть все]

Сообщения [Сортировка по времени | RSS]


106. "Релиз ядра Linux 6.2"  +/
Сообщение от _kp (ok), 20-Фев-23, 18:00 
Знаковость char на разных всегда была платформах разная. Сильно реже и его размер не 8 бит.
Полагаться на то что он точно знаковый, или точно беззаковый - граблестроение!
При вычислениях его нужно явно приводить к нужному типу со знаком или без, или использовать только для строк.

Лучше б добавили опцию со случайным включением/отключением знаковости char. :)

Ответить | Правка | Наверх | Cообщить модератору

166. "Релиз ядра Linux 6.2"  +/
Сообщение от Аноним (99), 20-Фев-23, 21:48 
Вы можете случайно включать опцию -funsigned-char или -fsigned-char
Или написать свой режим для gcc и прислать разработчикам патч.
Ответить | Правка | Наверх | Cообщить модератору

184. "Релиз ядра Linux 6.2"  +/
Сообщение от _kp (ok), 20-Фев-23, 23:21 
> Вы можете случайно включать опцию -funsigned-char или -fsigned-char
> Или написать свой режим для gcc и прислать разработчикам патч.

Я пишу под разные архитектуры, и моему коду  глубоко фиолетово как реализован тип char, и с какой опцией собирать.
Но сторонний код может иметь различные проблемы из за вероубеждений автора.

В принципе наличие или отсутствие знака у char - результат исторического бардака, и понятие искусственное, не зависящее аппараттно ни от одной платформы.

Одни считали что раз неуказано явно unsigned char, то да будет он знаковым, но с друггй стороны, если это единица текста, на кой чорт ей знак. Далее авторы, котором было лень писать длинно или использовать другой тип, понаплодили непереносимого кода.

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


Ответить | Правка | Наверх | Cообщить модератору

207. "Релиз ядра Linux 6.2"  +/
Сообщение от Аноним (99), 21-Фев-23, 00:06 
Ну вы же сами хотели случайный char, вот можете воспользоваться. Опыт у вас видимо большой
Ответить | Правка | Наверх | Cообщить модератору

237. "Релиз ядра Linux 6.2"  +2 +/
Сообщение от fuggy (ok), 21-Фев-23, 03:44 
То есть когда создавали Си делали его для кроссплатформенности, чтобы не использовать разный ассемблер. Но сделали типы на разных архитектурах не только разного размера, но и разной знаковости.
Если всё равно приходится учитывать разные размеры типов под разными архитектурами, то где кроссплатформенность? Почему нельзя было сразу сделать нормальные int8, uint8 и тд. А если не учитывать различия архитектур, то при этом ловить ошибки типов.
Ответить | Правка | К родителю #106 | Наверх | Cообщить модератору

280. "Релиз ядра Linux 6.2"  +1 +/
Сообщение от _kp (ok), 21-Фев-23, 11:45 
> То есть когда создавали Си делали его для кроссплатформенности, ...
> почему нельзя было сразу сделать нормальные int8, uint8 и

Так сам язык сразу позволял переопределить типы как угодно.
Типы char, int, long, float.. - это то что поддерживается аппаратно, или дешево реализовать, но зависит от платформы.
Аппаратные типы ведь должны были быть определены по любому. Вот их определили
А остальное волен как хочешь делать.
Или использовать готовый stdint.h

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

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


Ответить | Правка | Наверх | Cообщить модератору

301. "Релиз ядра Linux 6.2"  +/
Сообщение от fuggy (ok), 21-Фев-23, 14:59 
Так вот и остаётся вопрос. Если есть в языке стандартные типы, да они архитектурно зависимые. Нет не в компиляторе, они стандартные в стандарте языка. Но стандартные типы лучше не использовать, потому что можно выстрелить в колено размером типа. Тогда почему они стандартные? Стандартные же значит, что они должны подходить для большинства, как рекомендуемый способ.
Конечно, если пишешь одноразовое приложение под машину разработчика, тогда нет смысла думать об этом. В остальных случаях так и так придётся использовать stdint.h, и стандартные типы не стандартные получаются.
Ответить | Правка | Наверх | Cообщить модератору

292. "Релиз ядра Linux 6.2"  +/
Сообщение от Аноним (38), 21-Фев-23, 12:56 
Неправильно. Они создавали свой язык насмотревшись на другие языки программирования чтобы писать систему и утилиты не на ассемблере потому что сильно изгибнувшись можно было написать практически такой же быстрый код, но с меньшим числом записей. Гуру ассамблера спокойно читают сишный код понимая какие инструкции это будут. То что он оказался переносимым это уже отдельный эффект потому как требовался компилятор вначале чтобы перенести на целевую архитектуру. Изначально планировалось подсадить всех на свои компы конечно же как Ябло делает нынче.
Ответить | Правка | К родителю #237 | Наверх | Cообщить модератору

316. "Релиз ядра Linux 6.2"  +/
Сообщение от Аноньимъ (ok), 21-Фев-23, 23:05 
>То есть когда создавали Си делали его для кроссплатформенности,

Когда создавали Си - делали его ради шутки.
Шутка в итоге оказалась глупая и злая.

Ответить | Правка | К родителю #237 | Наверх | Cообщить модератору

Архив | Удалить

Рекомендовать для помещения в FAQ | Индекс форумов | Темы | Пред. тема | След. тема




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру