LINUX.ORG.RU

Написал статью «Как жить если у вас юникод»

 ,


5

4

Собственно, сабж. Статья про то самое, что мы с Eddy_Em не могли осилить в прежние времена. В этом году я это, внезапно, осилил. Ну и написал статью.

https://saahriktu.ru/pdf/kak_jit_esli_u_vas_yunikod.pdf

★★★★★
Ответ на: комментарий от X512

Либо у виндузятников, либо в старом коде который писался во времена когда в Юникоде было максимум 16 бит.

ВНЕЗАПНО UTF-16 позволяет кодировать больше 16 бит на символ.

Ох лол жеж блин… в треде отметились, кажется, все, кто не умеет в юникод.

hateyoufeel ★★★★★
()
Последнее исправление: hateyoufeel (всего исправлений: 1)
Ответ на: комментарий от saahriktu

Glibc – стандартная библиотека? А если у меня Musl?

Да. Musl - заменитель Glibc. Другие библиотеки являются сторонними для Си.

Акей, то есть работа с пайпами, правами доступа и прочим из C – это сторонние библиотеки, и они не нужны. Так и запишем.

hateyoufeel ★★★★★
()
Ответ на: комментарий от cumvillain

Ну, допустим, пример не совсем удачный. Тем не менее, wchar_t входит в стандарт и стандартную библиотеку. Если бы это никому не было бы нужно, то его бы в Unix'ах просто не было бы. Понаделали бы проверочных условий для винды, как в этом Modules/posixmodule.c, и всё. Ну или заглушки в стандартной библиотеке сделали бы.

Однако, нет, можно писать код юзающий wchar_t* для GNU/Linux и он будет компилироваться и работать. И это не для красоты.

saahriktu ★★★★★
() автор топика
Ответ на: комментарий от saahriktu

Ну, допустим, пример не совсем удачный. Тем не менее, wchar_t входит в стандарт и стандартную библиотеку. Если бы это никому не было бы нужно, то его бы в Unix’ах просто не было бы. Понаделали бы проверочных условий для винды, как в этом Modules/posixmodule.c, и всё. Ну или заглушки в стандартной библиотеке сделали бы.

Как и большинство сишников, ты почему-то думаешь, что все что есть в стандартной библиотеке нужно, полезно, и вообще state of the art. Это не так.

Однако, нет, можно писать код юзающий wchar_t* для GNU/Linux и он будет компилироваться и работать. И это не для красоты.

Да, это для шизы. Больше причин использовать wchar_t в системах с UTF-8 нет.

cumvillain
()
Ответ на: комментарий от hateyoufeel

ВНЕЗАПНО UTF-16 позволяет кодировать больше 16 бит на символ.

Это понятно. Только так было не всегда. В ранних версиях Юникода 16 бит на кодпойнт было максимум и рекомендовалось использовать 16 бит для представления и хранения символов.

Какой смысл в UTF-16 если это такая же кодировка с переменным числом байт на кодпойнт как и UTF-8, но при этом не совместимая с ASCII и подавляющим большинством софта на char?

X512 ★★★★★
()
Ответ на: комментарий от hateyoufeel

Пример пайпов без сторонних библиотек: https://tldp.org/LDP/lpg/node11.html .

Правами доступа без сторонних библиотек тоже можно рулить: https://man7.org/linux/man-pages/man2/chmod.2.html .

saahriktu ★★★★★
() автор топика
Ответ на: комментарий от saahriktu

Пример пайпов без сторонних библиотек:https://tldp.org/LDP/lpg/node11.html.

А теперь покажи мне системные вызовы pipe() или chmod() в стандарте C.

hateyoufeel ★★★★★
()
Последнее исправление: hateyoufeel (всего исправлений: 1)
Ответ на: комментарий от X512

Это понятно. Только так было не всегда. В ранних версиях Юникода 16 бит на кодпойнт было максимум и рекомендовалось использовать 16 бит для представления и хранения символов.

Это было 30 лет назад. Сейчас всем насрать.

Какой смысл в UTF-16 если это такая же кодировка с переменным числом байт на кодпойнт как и UTF-8, но при этом не совместимая с ASCII и подавляющим большинством софта на char?

Потому что большая часть юникода таки влезает в 2 байта UTF-16, что позволяет довольно легко итерировать через текст.

Можешь тут почитать: https://www.unicode.org/notes/tn12/

Сейчас, конечно, есть подвижки в сторону перехода на UTF-8 в том числе и для внутренней кухни. Например, Хачкелл сравнительно недавно перелез на UTF-8 для обработки текста. Но всё это медленно и надолго.

hateyoufeel ★★★★★
()
Ответ на: комментарий от hateyoufeel

В стандартной библиотеке реализован не только стандарт самого языка. Там полно расширений POSIX, ISO, GNU, BSD, XOPEN,... и т.д. Всё это без сторонних библиотек, да.

saahriktu ★★★★★
() автор топика
Ответ на: комментарий от saahriktu

В стандартной библиотеке реализован не только стандарт самого языка. Там полно расширений POSIX, ISO, GNU, BSD, XOPEN,… и т.д. Всё это без сторонних библиотек, да.

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

hateyoufeel ★★★★★
()
Ответ на: комментарий от hateyoufeel

Так это не стандартная библиотека уже получается.

Стандартная, но специфическая для каждой ОС. Например, в *BSD свои реализации стандартной Сишной библиотеки, там не используются ни glibc, ни musl.

saahriktu ★★★★★
() автор топика
Последнее исправление: saahriktu (всего исправлений: 1)
Ответ на: комментарий от saahriktu

Не я придумываю IT’шные термины.https://en.wikipedia.org/wiki/C_standard_library

Конечно не ты. Ты их неправильно используешь, всего лишь. pipe() и chmod() не являются частью стандартной библиотеки языка C.

hateyoufeel ★★★★★
()
Ответ на: комментарий от hateyoufeel

Являются. В т.ч. pipe() и chmod() определены в заголовочных файлах unistd.h и sys/stat.h соответственно.

[code] $ rpm -qf /usr/include/sys/stat.h glibc-devel-2.32-alt5.x86_64 $ rpm -qf /usr/include/unistd.h glibc-devel-2.32-alt5.x86_64 $ [/code]

saahriktu ★★★★★
() автор топика
Последнее исправление: saahriktu (всего исправлений: 1)
Ответ на: комментарий от saahriktu

Являются. В т.ч. pipe() и chmod() определены в заголовочных файлах unistd.h и sys/stat.h соответственно.

Дядя, это не часть стандартной библиотеки C. Файлы unistd.h и sys/stat.h не упомянуты в стандарте языка. У тебя настолько плохо всё, что ты не можешь эту простую мысль осознать?

hateyoufeel ★★★★★
()
Ответ на: комментарий от saahriktu

Стандартной библиотекой языка Си (также известная как libc, crt) называется часть стандарта ANSI C, посвященная заголовочным файлам и библиотечным подпрограммам.

cumvillain
()
Ответ на: комментарий от saahriktu

В общем нафига нужен wchar_t всё ещё непонятно. Во-первых не портируемо, во-вторых для ввода-вывода постоянно нужно будет перекодировать в UTF-8 и обратно. Проще всё же хранить сразу в UTF-8, а для подстрок и тд использовать процедуры из готовой либы или самописные.

Xenius ★★★★★
()
Ответ на: комментарий от saahriktu

Это часть glibc. glibc - стандартная библиотека языка Си.

Нет. Glibc – это реализация стандартной библиотеки C. То, что это реализация не только её, но и дохрена ещё какого говна, не делает всю glibc стандартной библиотекой языка C.

У тебя от корня стандарт в «стандартная библиотека» ничего не чешется, не?

hateyoufeel ★★★★★
()
Последнее исправление: hateyoufeel (всего исправлений: 1)
Ответ на: комментарий от romanlinux

Уважаемые статьи писатели. Прошу Вас! Перестаньте использовать шрифт Times New Roman и ему подобные шрифты с засечками. Ну глазам же больно….

Невозможность прочитать статью защищает тебя от шизы, которая в этой статье написана. Все ок.

cumvillain
()
Ответ на: комментарий от romanlinux

Микроскоп тоже иногда используют не по назначению ... (а вообще это отдельная тема для обсуждения (и весьма интересная))

Forum0888
()
Последнее исправление: Forum0888 (всего исправлений: 2)
Ответ на: комментарий от Xenius

wchar_t хоть сколько-то стандартен. Работа с юникодными строками «как есть» - это прям больно на самом деле. В крупном проекте возможно и востребовано, но если по мелочи проще обойтись стандартными, пусть и не очень удобными функциями.

Dark_SavanT ★★★★★
()
Ответ на: комментарий от Dark_SavanT

wchar_t хоть сколько-то стандартен. Работа с юникодными строками «как есть» - это прям больно на самом деле. В крупном проекте возможно и востребовано, но если по мелочи проще обойтись стандартными, пусть и не очень удобными функциями.

ну как мы выяснили даже простейшие случаи не покрываются, лол.

cumvillain
()
Ответ на: комментарий от cumvillain

Тут уж кому что надо. Мне повезло и софт, который за пределами ascii мне писать почти не доводилось, а что доводилось ограничивалось выводом локализованных строк с использованием gettext.

Когда-то смотрел на libicu, но благо не пришлось влезать серьёзно.

Dark_SavanT ★★★★★
()
Ответ на: комментарий от hateyoufeel

Стандартная библиотека обязана как минимум реализовывать стандарт языка. А «как максимум» ограничений нет. То, что glibc реализует ещё много чего помимо стандарта языка, не лишает её звания стандартной библиотеки языка Си. О чём и написано по ссылке, где она перечислена в списке стандартных библиотек: https://en.wikipedia.org/wiki/C_standard_library .

saahriktu ★★★★★
() автор топика
Ответ на: комментарий от saahriktu

Стандартная библиотека обязана как минимум реализовывать стандарт языка. А «как максимум» ограничений нет.

Это тебе твоя шиза говорит. Формальное определение стандартной библиотеки очень простое: стандартная библиотека это то, что написано в стандарте C. Про пайпы там речи ваще не идет.

cumvillain
()
Ответ на: комментарий от cumvillain

А по ссылкам Пушкин ходить будет? Там написано что такое «стандартная библиотека Си». И в этом определении упоминается гораздо больше стандарта языка Си.

saahriktu ★★★★★
() автор топика
Ответ на: комментарий от saahriktu

А по ссылкам Пушкин ходить будет? Там написано что такое «стандартная библиотека Си». И в этом определении упоминается гораздо больше стандарта языка Си.

Я не знаю почемы ты по ним не ходишь.

Вот тебе ссылка: https://en.wikipedia.org/wiki/C_standard_library

Вот тебе цитата по этой ссылке:

The C standard library or libc is the standard library for the C programming language, as specified in the ISO C standard.

cumvillain
()
Ответ на: комментарий от saahriktu

Glibc и есть та самая «GNU libc», которая соответствует «ISO C standard». Но не только, да.

Что значит не только, лол? Есть стандартная библиотека C, а есть библиотека C в POSIX. И это разные библиотеки :D

cumvillain
()
Ответ на: комментарий от cumvillain

В GNU/Linux есть glibc и musl, которые реализуют функционал стандартной библиотеки Си с расширениями из других стандартов.

Если вы этого не знаете, то вам должно быть стыдно, товарищи линуксоиды. Или таки виндузятники?

saahriktu ★★★★★
() автор топика
Ответ на: комментарий от saahriktu

В GNU/Linux есть glibc и musl, которые реализуют функционал стандартной библиотеки Си с расширениями из других стандартов.

Отлично, так наконец-то признал что glibc это не стандартная библиотека языка C. Теперь ты готов признать что pipe() это не часть стандартной библиотеки языка C или тебе нужно ещё какое-то время на признание этого факта?

cumvillain
()
Ответ на: комментарий от saahriktu

... так в том то и прикол, ISO C standard это одно, всякие POSIX и GNU'шные расширения в glibc, другое. Система может соответствовать стандартам Си и не соответствовать POSIX, тем более там вообще может и не быть glibc/musl.

Dr64h ★★★
()
Ответ на: комментарий от cumvillain

O5 25...

Те библиотеки, которые реализуют базовый функционал языка Си, называются стандартными библиотеками языка Си. Glibc и musl реализуют этот функционал. Всё. Остальные вопросы - это остальные вопросы.

А такой библиотеки для GNU/Linux'а, которая реализовывала бы только стандарт языка Си и ничего кроме него, просто нет. В качестве GNU'той libc и была создана glibc, которая и есть дефолтная линуксовая стандартная библиотека языка Си.

saahriktu ★★★★★
() автор топика
Ответ на: комментарий от saahriktu

Те библиотеки, которые реализуют базовый функционал языка Си, называются стандартными библиотеками языка Си. Glibc и musl реализуют этот функционал. Всё. Остальные вопросы - это остальные вопросы.

А как это связано с твоим отрицанием отсутствия pipe() в стандарте языка C? Его там все ещё нет, я только что проверил :D

cumvillain
()