powered by simpleCommunicator - 2.0.58     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / MSVC и GCC: совместимость кодировок исходников
25 сообщений из 409, страница 9 из 17
MSVC и GCC: совместимость кодировок исходников
    #39896379
Фотография полудух
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
petrav
они не удосужились реализовать работу со строками

в каком смысле "не удосужились"?
есть string, есть wstring
petrav
эти проблемы все (с Юникодом)

какие именно проблемы остались после использования wstring ?
...
Рейтинг: 0 / 0
MSVC и GCC: совместимость кодировок исходников
    #39896394
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
petravПозиционируя С++ как универсальный язык программирования, они не удосужились реализовать
работу со строками.

А можно ссылку на документ где они его так позиционируют?

Работа со строками это как раз весьма специализированная задача. И для неё существуют
весьма специализированные решения. Например, Perl.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
MSVC и GCC: совместимость кодировок исходников
    #39896395
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
petrav
Вот поясните, плиз, как эти проблемы все (с Юникодом) решены в Яве?
Завёрнуты в разнообразное API , позволяющее решать прикладные задачи .
...
Рейтинг: 0 / 0
MSVC и GCC: совместимость кодировок исходников
    #39896422
Фотография полудух
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
в яве даже char запихнули в класс ^^
...
Рейтинг: 0 / 0
MSVC и GCC: совместимость кодировок исходников
    #39896426
Фотография полудух
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov
Работа со строками это как раз весьма специализированная задача. И для неё существуют
весьма специализированные решения. Например, Perl.

автор Perl is itself written in C ; the perl library is the collection of compiled C programs that were used to create your perl executable (/usr/bin/perl or equivalent).
https://perldoc.perl.org/perlembed.html
...
Рейтинг: 0 / 0
MSVC и GCC: совместимость кодировок исходников
    #39896429
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
полудух
в яве даже char запихнули в класс ^^
а в дельфи стринг был без класса. До некоторого момента)
...
Рейтинг: 0 / 0
MSVC и GCC: совместимость кодировок исходников
    #39896453
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
полудух
в яве даже char запихнули в класс ^^
char в Java - примитивный тип.
Character - класс-обёртка, которая ничем не лучше и не хуже других классов-обёрток.

P.S.
Не надо звонить обо всём, что напел Рабинович.
...
Рейтинг: 0 / 0
MSVC и GCC: совместимость кодировок исходников
    #39896533
Фотография crutchmaster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
полудух
какие именно проблемы остались после использования wstring ?


Чуть больше половины байт - нули.
...
Рейтинг: 0 / 0
MSVC и GCC: совместимость кодировок исходников
    #39896550
petrav
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
crutchmaster
полудух
какие именно проблемы остались после использования wstring ?


Чуть больше половины байт - нули.

В современной жизни текст (текстовые данные) сколько занимает процентов в памяти для приложений типа:

- Типичное офисное приложение типа 1С.
- Типичный графический редактор.
- Текстовый редактор с документом с оформлением, картинками и диаграммами.
- Типичная страница лонгрид на 20 минут чтения в браузере. С картинками.
- Страница ютуб в браузере.
- Типичная программа математическая.
- Десктопная/мобильная ОС.
- Типичный медиаплеер.

Сколько? Во-первых процент очень мал, во-вторых абсолютные размеры - копейки. Ну сэкономишь ты десяток мегабайт при работе за компом. На моём стареньком компе 8Гб памяти, а текста сейчас загружено ну мегабайт 20-ть при открытых 10-ти приложениях из которых два браузера.

Так жгут нули в тексте? А глюки из-за неправильного понимания работы Юникода не жгут?
...
Рейтинг: 0 / 0
MSVC и GCC: совместимость кодировок исходников
    #39896573
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
petrav
mayton
Через сутки - поудаляю оффтоп.

Вы я так понимаю, большой спец в Java? Вот поясните, плиз, как эти проблемы все (с Юникодом) решены в Яве? Учитывая моменты кроссплатформенности.

Только пожалуйста, попроще, без потока специфичных требований. :)

Не очень понятно по каким проблемам... Наверное по toUpper?

Изначально. При проектировании Java была заложена возможность хранить строки как UTF-16 (short) массивы.
Это с точки зрения внутреннего (internal) способа хранения. В Java строки ВСЕГДА в Unicode.
Если вы грузите данные из внешних источников которые ASCII или национальные кодировки
то вы обязаны их конвертить byte[] => char[] где char тоже всегда 16 битный.

Далее. Как я уже говорил. Начиная с какого-то коммита Java-9 внутренний формат стал более экономным. Latin/utf-8
Но и в Java <9.0 и начиная с девятки следующий код будет иммитировать совершенно одинаковое поведение.

Тоесть интерфейс String::charAt() возвращает всегда 16 битный char. И это жосткий requirement.
Код: java
1.
2.
String s1 = "Привет";
String s2 = "world";


При этом строка s1 по идее должна внутри выделять utf-8 массив символов а вторая строка - ascii.

Тоесть форматы хранения и представления - разные.

Существуют быстрые (по времени) конструкторы которые конструируют строку из char[]. Этим пользуются
библиотеки билдеров StringBuilder для быстрых конкатенаций.

Кроме того у java-строки есть другие свойства. Например она - иммутабельна. Вы не можете изменить внутри
строки символы. Попытка делать replace() просто приводит к генерации нового объекта типа java.lang.String
где символы уже заменены. Эти опции - кивок в сторону чистого функционального программирования без concurrency.
Она (строка) также - финальна. Вы не можете унаследоваться от нее и переопределить поведение.
Она инкапсулирует длину и хешкод для оптимизации алгоритмов над ней.

Я попробовал фрагмент Войны и Мира на функции String::toUpper()/toLower(). Все отработало успешно
для кириллицы и французского. Никаких национальных настроек я не делал. Все по дефолту.
Тоесть функция toUpper скорее всего включала в себя известный сет маппингов для известных
языков.

Тест кейсы могу привести если интересно.

Какие конкретно части стандарта Unicode инкапсулированы внутри java-string я не знаю. Но я могу поискать информацию
если вам интересно.
...
Рейтинг: 0 / 0
MSVC и GCC: совместимость кодировок исходников
    #39896574
petrav
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
полудух
petrav
они не удосужились реализовать работу со строками

в каком смысле "не удосужились"?
есть string, есть wstring
petrav
эти проблемы все (с Юникодом)

какие именно проблемы остались после использования wstring ?

Основная проблема wstring (wchar_t) в том, что он идеологически неверен . На момент разработки предполагалось, что в два байта wchar_t поместится вся таблица Unicode. Но она не поместилась и теперь в wstring каждый отдельный символ может занимать или два, или четыре байта. Цель не была достигнута, зато успели ввести дополнительную сущность, которая не выполнила свою задачу: сделать работу с Юникодом такой же простой и эффективной как и с ASCII.

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

Дальше-больше. Символ wchar_t хорошо поддерживается на уровне языка С++: и в стиле Си, и в стиле С++. Для всех европейских языков, в принципе, достаточно wchar_t. Можно воспринимать строку как массив символов. А про суррогатные пары (когда символ - это два wchar_t), можно забыть. Да, такое приложение крайне сложно будет доразвить до поддержки китайского и его диалектов. Но для всех европейских языков всё работает.

Далее в дело пошли всякие линуксоиды и прочие вредители. Они начали вопить что мол у нас тут в приложении мегабайт нулей, давайте подключим библиотеку ICU, она будет занимать два мегабайта, но зато нулей не будет. И весь прочий бред.

Но! Поддержку utf-8 на уровне языка С++ они так и не разработали. Почему? Потому что думали не о программировании, а о нулях.
...
Рейтинг: 0 / 0
MSVC и GCC: совместимость кодировок исходников
    #39896576
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
petrav
crutchmaster
пропущено...


Чуть больше половины байт - нули.

В современной жизни текст (текстовые данные) сколько занимает процентов в памяти для приложений типа:

- Типичное офисное приложение типа 1С.
- Типичный графический редактор.
- Текстовый редактор с документом с оформлением, картинками и диаграммами.
- Типичная страница лонгрид на 20 минут чтения в браузере. С картинками.
- Страница ютуб в браузере.
- Типичная программа математическая.
- Десктопная/мобильная ОС.
- Типичный медиаплеер.

Сколько? Во-первых процент очень мал, во-вторых абсолютные размеры - копейки. Ну сэкономишь ты десяток мегабайт при работе за компом. На моём стареньком компе 8Гб памяти, а текста сейчас загружено ну мегабайт 20-ть при открытых 10-ти приложениях из которых два браузера.

Так жгут нули в тексте? А глюки из-за неправильного понимания работы Юникода не жгут?

В типичном backend - приложении строки - самая прожорливая часть кучи. Весь современный веб стоит на процессинге
данных типа XML/Json которые в свою очередь порождают массу справочников и фабрик и прочих компонент
которые будут выделять строки и много.

Любое приложение типа бизнес-процесс которое работает с БД будет так или иначе использовать кеши со строками.
Любое приложение активно формирующее отчеты xml/Excel, PDF, html также активно будет много выделять и
использовать строк.

Я не имею ничего против вашего списка. Я просто вношу дополнения.
...
Рейтинг: 0 / 0
MSVC и GCC: совместимость кодировок исходников
    #39896578
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 All.

Кто продвинут в Unicode. Помогите транформировать этот тестовый текст
MSVC и GCC: совместимость кодировок исходников
в последовательность с comnining characters.

Я расширю этот тест для функций upper/lower чтоб посмотреть как комбинации себя ведут на разных API.

Потом сделаю это для C#/Python/e.t.c.
...
Рейтинг: 0 / 0
MSVC и GCC: совместимость кодировок исходников
    #39896581
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
petrav
Для всех европейских языков, в принципе, достаточно wchar_t. Можно воспринимать строку как массив символов. А про суррогатные пары (когда символ - это два wchar_t), можно забыть. Да, такое приложение крайне сложно будет доразвить до поддержки китайского и его диалектов. Но для всех европейских языков всё работает.
"Огорчу я тебя до невозможности", уже в который раз напомнив, что в кириллице целых два символа, которые могут кодироваться парой кодов и эти пары - вовсе не суррогатные.
Или вы, как и Блок считаете, что "азиаты мы с раскосыми и жадными глазами"? Ну так у немцев, французов, испанцев и прочих европейцев - тоже есть аналогичных символов.
...
Рейтинг: 0 / 0
MSVC и GCC: совместимость кодировок исходников
    #39896584
petrav
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton
В типичном backend - приложении строки - самая прожорливая часть кучи. Весь современный веб стоит на процессинге
данных типа XML/Json которые в свою очередь порождают массу справочников и фабрик и прочих компонент
которые будут выделять строки и много.

Любое приложение типа бизнес-процесс которое работает с БД будет так или иначе использовать кеши со строками.
Любое приложение активно формирующее отчеты xml/Excel, PDF, html также активно будет много выделять и
использовать строк.

Серверное ПО -- это отдельная узкоспециализированная ниша. Согласись. Если представить себе распределённую индексирующую машину Гугла, то там 99% памяти -- это текст веб-страниц. Хотя и они уже пытаются индексировать изображения и даже видео. Но пример не слишком подходящий -- для спец разработки и инструментарии специфичные. И люди там работают с резко специфичными навыками.

XML/json/html... Вот как сравнить размер XML-файла и память когда этот документ загружен в XML-DOM? Или в браузере html-DOM. Я думаю там разница разов в пять по памяти.

Опять же. Серверное ПО (web-сервер, SQL-сервер) -- это совсем другая история, там другие правила игры. Там совершенно другой мир.
...
Рейтинг: 0 / 0
MSVC и GCC: совместимость кодировок исходников
    #39896585
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
petrav

Но! Поддержку utf-8 на уровне языка С++ они так и не разработали. Почему? Потому что думали не о программировании, а о нулях.

С++ изначально находился в невыгодном положении. Он делегировал "строковый тип" не языку а библиотекам.
И мы имели CString, std::string, TString e.t.c. Это все строки. Или обертки над строками. Каждая со своим интерфейсом
и со своим поведением и со своими правилами внутреннего предсталвения. Некоторые из них могут зависеть
от дефиниции макроса _UNICODE

И господин Бьярне и комитет все эти годы занимались чем угодно только не этим вопросом. Можно сказать что в С++
строки развивались по scrum-agile. Итеративно. Решая сиюминутные потребности.

Волевого решения "из центра" - не было.
...
Рейтинг: 0 / 0
MSVC и GCC: совместимость кодировок исходников
    #39896586
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton
petrav

Но! Поддержку utf-8 на уровне языка С++ они так и не разработали. Почему? Потому что думали не о программировании, а о нулях.

С++ изначально находился в невыгодном положении. Он делегировал "строковый тип" не языку а библиотекам.
И мы имели CString, std::string, TString e.t.c. Это все строки. Или обертки над строками. Каждая со своим интерфейсом
и со своим поведением и со своими правилами внутреннего предсталвения. Некоторые из них могут зависеть
от дефиниции макроса _UNICODE

И господин Бьярне и комитет все эти годы занимались чем угодно только не этим вопросом. Можно сказать что в С++
строки развивались по scrum-agile. Итеративно. Решая сиюминутные потребности.

Волевого решения "из центра" - не было.
хмм. Интересный пост.
+1 имхо
...
Рейтинг: 0 / 0
MSVC и GCC: совместимость кодировок исходников
    #39896589
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton
Код: java
1.
2.
String s1 = "Привет";
String s2 = "world";

При этом строка s1 по идее должна внутри выделять utf-8 массив символов а вторая строка - ascii.
"Когда вы говорите, Иван Васильевич ..."
Нельзя отличить US-ASCII и UTF8 - это принципиально невозможно.
...
Рейтинг: 0 / 0
MSVC и GCC: совместимость кодировок исходников
    #39896590
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
petrav
Поддержку utf-8 на уровне языка С++ они так и не разработали. Почему? Потому что думали не о программировании, а о нулях.
А это ничего, что UTF8 - массив байт, поддержка которого изначально была в стандартной библиотеке Це?
...
Рейтинг: 0 / 0
MSVC и GCC: совместимость кодировок исходников
    #39896592
petrav
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton
petrav

Но! Поддержку utf-8 на уровне языка С++ они так и не разработали. Почему? Потому что думали не о программировании, а о нулях.

С++ изначально находился в невыгодном положении. Он делегировал "строковый тип" не языку а библиотекам.
И мы имели CString, std::string, TString e.t.c. Это все строки. Или обертки над строками. Каждая со своим интерфейсом
и со своим поведением и со своими правилами внутреннего предсталвения. Некоторые из них могут зависеть
от дефиниции макроса _UNICODE

И господин Бьярне и комитет все эти годы занимались чем угодно только не этим вопросом. Можно сказать что в С++
строки развивались по scrum-agile. Итеративно. Решая сиюминутные потребности.

Волевого решения "из центра" - не было.

Да. Вот ты прямо сказал, то что я думаю. И... все же, эти QString, TString, TAnsiString, WxString (?), CString. Этим классам очень много лет. Почему они тогда появились? Потому что С++ тогда не был развитым языком программирования, всё было впервые и многие хотели сделать свои яхты и плыть на них.

Но годы прошли. И теперь мне советуют библиотеку ICU. Это хорошая библиотека. И что я там вижу? Класс icu::UnicodeString. Ещё один велосипед! Да в самом С++ больше десятка представлений строк. И ещё одно! В 2019-м году!

Почему так? Да те кто занимаются проектированием С++ просто занимаются не тем чем нужно. Это во времена молодости С++ было позволено, а сейчас это признак того, что люди не на своём месте.
...
Рейтинг: 0 / 0
MSVC и GCC: совместимость кодировок исходников
    #39896594
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Basil A. Sidorov
mayton
Код: java
1.
2.
String s1 = "Привет";
String s2 = "world";

При этом строка s1 по идее должна внутри выделять utf-8 массив символов а вторая строка - ascii.
"Когда вы говорите, Иван Васильевич ..."
Нельзя отличить US-ASCII и UTF8 - это принципиально невозможно.

Возможно. Если хранить вместе со строкой признак кодировки.

Даю линк на репозитарий OpenJDK. Он во многом похож на Оракловый.
https://github.com/unofficial-openjdk/openjdk/blob/jdk/jdk/src/java.base/share/classes/java/lang/String.java
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
public final class String
    implements java.io.Serializable, Comparable<String>, CharSequence,
               Constable, ConstantDesc {

    @Stable
    private final byte[] value;

    private final byte coder;

    private int hash; // Default to 0
.....
...
Рейтинг: 0 / 0
MSVC и GCC: совместимость кодировок исходников
    #39896595
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Возможно я ошибся в кодировках. Там
Код: plaintext
1.
2.
Latin
UTF-16


Я еще просмотрю историю коммитов. Возможно что-то проскочило из того что я говорил. А это транковая ветка.
Соотвествует JDK которой еще нет в релизе.
...
Рейтинг: 0 / 0
MSVC и GCC: совместимость кодировок исходников
    #39896597
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
petrav

Да. Вот ты прямо сказал, то что я думаю. И... все же, эти QString, TString, TAnsiString, WxString (?), CString. Этим классам очень много лет. Почему они тогда появились? Потому что С++ тогда не был развитым языком программирования, всё было впервые и многие хотели сделать свои яхты и плыть на них.

Но годы прошли. И теперь мне советуют библиотеку ICU. Это хорошая библиотека. И что я там вижу? Класс icu::UnicodeString. Ещё один велосипед! Да в самом С++ больше десятка представлений строк. И ещё одно! В 2019-м году!

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

Да в этих комитетах - царит какое-то разложение. Есть у них хоть один proposal который ужесточает стандарт?
И делает его более... недёжным что-ли. Предсказуемым на разрядности int к примеру.

Вот честное слово я уже не верю в комитеты. Если-бы толстая корпорация типа yandex взяла управление
в свои руки и сказала - ша бротва! Мы делаем свой С++. И там будет мать ево Unicode-строка как
фундаментальный образующий тип языка. А все синонимы мы просто выкосим нахер. И опубликуем как форк С++
стандарта по версии yandex. Я-бы встал и поаплодировал.

И жизненных примеров много. Когда источником нового языка была именно корпорация а не всякие бл...ские комитеты.
...
Рейтинг: 0 / 0
MSVC и GCC: совместимость кодировок исходников
    #39896599
petrav
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Basil A. Sidorov
petrav
Поддержку utf-8 на уровне языка С++ они так и не разработали. Почему? Потому что думали не о программировании, а о нулях.
А это ничего, что UTF8 - массив байт, поддержка которого изначально была в стандартной библиотеке Це?

Т.е. поддержка utf-8 изначально была в языке Си и ты можешь дать ссылку на это от Денис Макалистэйр Ричи (пишу по памяти)?
...
Рейтинг: 0 / 0
MSVC и GCC: совместимость кодировок исходников
    #39896601
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton
Если-бы толстая корпорация типа yandex взяла управление в свои руки и сказала - ша бротва! Мы делаем свой С++
... то конкуренты, при помощи антимонопольного комитета, сожрали бы её.
А если даже не и сожрали, то глухое игнорирование - ничем не лучше.
...
Рейтинг: 0 / 0
25 сообщений из 409, страница 9 из 17
Форумы / C++ [игнор отключен] [закрыт для гостей] / MSVC и GCC: совместимость кодировок исходников
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]