Флейм
GameDev.ru / Флейм / Форум / char - зачем?

char - зачем?

Страницы: 1 2 3 4 5 6 7 Следующая »
Panzerschrek[CN]Участникwww10 июля 201815:05#0
Во многих современных языках есть фундаментальный тип "char":

В крестах это "char" на один байт а также "wchar_t" в два или четыре байта.
В Java/C# есть char из двух байт.
В D есть аж три - char, wchar, dchar.
В Rust есть char, и он четырёхбайтный. При этом строки хранятся в UTF-8 как вектора из однобайтных элементов.

Вопрос - а нафига они все нужны?
Почему бы не вводить лишних типов, а просто использовать типы фиксированной ширины для представления символов?

равенПостоялецwww10 июля 201815:18#1
  По мнению разработчиков это нужно для представления разных типов данных,
хотя данные записанные в переменные разных типов могут быть одни и теже.
lookidПостоялецwww10 июля 201815:45#2
char, wchar, int (UTF8)
ух, заживем!
Вообще это было нужно для оптимизации данных. Больше ничего. Не всё же в лонгах хранить
Great V.Постоялецwww10 июля 201815:54#3
Panzerschrek[CN]
> а просто использовать типы фиксированной ширины для представления символов?
Я согласен (на самом деле нет).
Какую ширину предложишь?
kiparУчастникwww10 июля 201815:56#4
Логично иметь отдельный символьный тип для символов, потому что символы - определенно не числа.
Но когда эти типы по сути просто псевдонимы и их можно свободно делить и умножать - да, странно и непонятно.

lookid
Вопрос в том почему вместо них не использовать uint8_t\uint16_t\uint32_t или аналогичные.

Sbtrn. DevilПостоялецwww10 июля 201816:07#5
Panzerschrek[CN]
> Вопрос - а нафига они все нужны?
А чтоб не забывали и не теряли живой связи с традицией. И я это говорю почти серьёзно.
beejahПостоялецwww10 июля 201816:13#6
kipar
> Вопрос в том почему вместо них не использовать uint8_t
int8_t, еретик
Холивар же пойдет. "Зачем использовать unsigned, если Java"

Правка: 10 июля 2018 16:18

Great V.Постоялецwww10 июля 201816:17#7
kipar
> Вопрос в том почему вместо них не использовать uint8_t\uint16_t\uint32_t или
> аналогичные.
Потому что uint8_t числовой тип, а char - строчный.
Это просто так совпало, что один можно представить другим и наоборот.
kiparУчастникwww10 июля 201816:24#8
Great V.
Ну, типа того. Случайно так совпало что авторы языков ориентировались на сишку и потому не смогли нормальный строчный тип сделать.
BetrugerПостоялецwww10 июля 201816:40#9
Panzerschrek[CN]
> При этом строки хранятся в UTF-8 как вектора из однобайтных элементов

Ты ещё скажи, что любой тип данных хранится в памяти как вектор из однобайтных элементов, а потому типы данных не нужны. И пусть программисты сами голову ломают, где какой тип используется. Онижпрограммисты.
И вообще языки высокого уровня не нужны. Все равно же любой код в ассемблер компилируется.

Правка: 10 июля 2018 16:43

Panzerschrek[CN]Участникwww10 июля 201817:00#10
Great V.
> Какую ширину предложишь?
Какую захочешь. Можно в UTF-8, можно в UTF-16, можно в UTF-32.

Sbtrn. Devil
> А чтоб не забывали и не теряли живой связи с традицией. И я это говорю почти
> серьёзно.
Да, есть такое, инерционность мышления + необходимость совместимости.

Great V.
> Потому что uint8_t числовой тип, а char - строчный.
Это было бы так, если бы к символьному типу нельзя было применять арифметические операции.
А так выходит, что все эти char-типы - фуфло.

Betruger
> И вообще языки высокого уровня не нужны.
Как раз нужны, и типизация нужна.
Меня вот только интересует вопрос символьных типов - они какие-то странные.

Правка: 10 июля 2018 17:15

Great V.Постоялецwww10 июля 201817:30#11
Panzerschrek[CN]
> Это было бы так, если бы к символьному типу нельзя было применять
> арифметические операции.
А в той самой древней сишечке разве был тип, для работы с байтом-числом?
Совместили приятное с полезным, корочи. Да, не очень системно. Но что поделаешь, то были другие времена.

> Какую захочешь.
Ну вот. Захотеть можно по разному, потому и существуют все эти типы.

Правка: 10 июля 2018 17:31

FordPerfectПостоялецwww10 июля 201817:40#12
Я напомню, что char, signed char и unsigned char - это 3 разных типа.
Оно выглядит в тему.
BetrugerПостоялецwww10 июля 201817:42#13
Panzerschrek[CN]
> Это было бы так, если бы к символьному типу нельзя было применять
> арифметические операции.

Ага. Использование арифметических операций для шифрования строк - это неполиткорректно же. Роскомнадзор запретил )

kiparУчастникwww10 июля 201817:51#14
Betruger
Что UTF-8, что UTF-32 строка после шифрования станет невалидным куском байтов. Поэтому да, шифровать строки неполиткорректно и вообще говнокод. Шифровать надо либо нетипизированные буферы (с точки зрения вызывающей программы) либо массивы чисел (с точки зрения алгоритма).
Страницы: 1 2 3 4 5 6 7 Следующая »

/ Форум / Флейм / Программирование

2001—2018 © GameDev.ru — Разработка игр