|
MSVC и GCC: совместимость кодировок исходников
|
|||
---|---|---|---|
#18+
petrav они не удосужились реализовать работу со строками в каком смысле "не удосужились"? есть string, есть wstring petrav эти проблемы все (с Юникодом) какие именно проблемы остались после использования wstring ? ... |
|||
:
Нравится:
Не нравится:
|
|||
29.11.2019, 13:56 |
|
MSVC и GCC: совместимость кодировок исходников
|
|||
---|---|---|---|
#18+
petravПозиционируя С++ как универсальный язык программирования, они не удосужились реализовать работу со строками. А можно ссылку на документ где они его так позиционируют? Работа со строками это как раз весьма специализированная задача. И для неё существуют весьма специализированные решения. Например, Perl. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
29.11.2019, 14:11 |
|
MSVC и GCC: совместимость кодировок исходников
|
|||
---|---|---|---|
#18+
petrav Вот поясните, плиз, как эти проблемы все (с Юникодом) решены в Яве? ... |
|||
:
Нравится:
Не нравится:
|
|||
29.11.2019, 14:12 |
|
MSVC и GCC: совместимость кодировок исходников
|
|||
---|---|---|---|
#18+
в яве даже char запихнули в класс ^^ ... |
|||
:
Нравится:
Не нравится:
|
|||
29.11.2019, 14:39 |
|
MSVC и GCC: совместимость кодировок исходников
|
|||
---|---|---|---|
#18+
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 ... |
|||
:
Нравится:
Не нравится:
|
|||
29.11.2019, 14:42 |
|
MSVC и GCC: совместимость кодировок исходников
|
|||
---|---|---|---|
#18+
полудух в яве даже char запихнули в класс ^^ ... |
|||
:
Нравится:
Не нравится:
|
|||
29.11.2019, 14:46 |
|
MSVC и GCC: совместимость кодировок исходников
|
|||
---|---|---|---|
#18+
полудух в яве даже char запихнули в класс ^^ Character - класс-обёртка, которая ничем не лучше и не хуже других классов-обёрток. P.S. Не надо звонить обо всём, что напел Рабинович. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.11.2019, 15:14 |
|
MSVC и GCC: совместимость кодировок исходников
|
|||
---|---|---|---|
#18+
полудух какие именно проблемы остались после использования wstring ? Чуть больше половины байт - нули. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.11.2019, 16:53 |
|
MSVC и GCC: совместимость кодировок исходников
|
|||
---|---|---|---|
#18+
crutchmaster полудух какие именно проблемы остались после использования wstring ? Чуть больше половины байт - нули. В современной жизни текст (текстовые данные) сколько занимает процентов в памяти для приложений типа: - Типичное офисное приложение типа 1С. - Типичный графический редактор. - Текстовый редактор с документом с оформлением, картинками и диаграммами. - Типичная страница лонгрид на 20 минут чтения в браузере. С картинками. - Страница ютуб в браузере. - Типичная программа математическая. - Десктопная/мобильная ОС. - Типичный медиаплеер. Сколько? Во-первых процент очень мал, во-вторых абсолютные размеры - копейки. Ну сэкономишь ты десяток мегабайт при работе за компом. На моём стареньком компе 8Гб памяти, а текста сейчас загружено ну мегабайт 20-ть при открытых 10-ти приложениях из которых два браузера. Так жгут нули в тексте? А глюки из-за неправильного понимания работы Юникода не жгут? ... |
|||
:
Нравится:
Не нравится:
|
|||
29.11.2019, 17:42 |
|
MSVC и GCC: совместимость кодировок исходников
|
|||
---|---|---|---|
#18+
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.
При этом строка s1 по идее должна внутри выделять utf-8 массив символов а вторая строка - ascii. Тоесть форматы хранения и представления - разные. Существуют быстрые (по времени) конструкторы которые конструируют строку из char[]. Этим пользуются библиотеки билдеров StringBuilder для быстрых конкатенаций. Кроме того у java-строки есть другие свойства. Например она - иммутабельна. Вы не можете изменить внутри строки символы. Попытка делать replace() просто приводит к генерации нового объекта типа java.lang.String где символы уже заменены. Эти опции - кивок в сторону чистого функционального программирования без concurrency. Она (строка) также - финальна. Вы не можете унаследоваться от нее и переопределить поведение. Она инкапсулирует длину и хешкод для оптимизации алгоритмов над ней. Я попробовал фрагмент Войны и Мира на функции String::toUpper()/toLower(). Все отработало успешно для кириллицы и французского. Никаких национальных настроек я не делал. Все по дефолту. Тоесть функция toUpper скорее всего включала в себя известный сет маппингов для известных языков. Тест кейсы могу привести если интересно. Какие конкретно части стандарта Unicode инкапсулированы внутри java-string я не знаю. Но я могу поискать информацию если вам интересно. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.11.2019, 18:57 |
|
MSVC и GCC: совместимость кодировок исходников
|
|||
---|---|---|---|
#18+
полудух 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 на уровне языка С++ они так и не разработали. Почему? Потому что думали не о программировании, а о нулях. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.11.2019, 18:57 |
|
MSVC и GCC: совместимость кодировок исходников
|
|||
---|---|---|---|
#18+
petrav crutchmaster пропущено... Чуть больше половины байт - нули. В современной жизни текст (текстовые данные) сколько занимает процентов в памяти для приложений типа: - Типичное офисное приложение типа 1С. - Типичный графический редактор. - Текстовый редактор с документом с оформлением, картинками и диаграммами. - Типичная страница лонгрид на 20 минут чтения в браузере. С картинками. - Страница ютуб в браузере. - Типичная программа математическая. - Десктопная/мобильная ОС. - Типичный медиаплеер. Сколько? Во-первых процент очень мал, во-вторых абсолютные размеры - копейки. Ну сэкономишь ты десяток мегабайт при работе за компом. На моём стареньком компе 8Гб памяти, а текста сейчас загружено ну мегабайт 20-ть при открытых 10-ти приложениях из которых два браузера. Так жгут нули в тексте? А глюки из-за неправильного понимания работы Юникода не жгут? В типичном backend - приложении строки - самая прожорливая часть кучи. Весь современный веб стоит на процессинге данных типа XML/Json которые в свою очередь порождают массу справочников и фабрик и прочих компонент которые будут выделять строки и много. Любое приложение типа бизнес-процесс которое работает с БД будет так или иначе использовать кеши со строками. Любое приложение активно формирующее отчеты xml/Excel, PDF, html также активно будет много выделять и использовать строк. Я не имею ничего против вашего списка. Я просто вношу дополнения. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.11.2019, 19:02 |
|
MSVC и GCC: совместимость кодировок исходников
|
|||
---|---|---|---|
#18+
2 All. Кто продвинут в Unicode. Помогите транформировать этот тестовый текст MSVC и GCC: совместимость кодировок исходников в последовательность с comnining characters. Я расширю этот тест для функций upper/lower чтоб посмотреть как комбинации себя ведут на разных API. Потом сделаю это для C#/Python/e.t.c. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.11.2019, 19:10 |
|
MSVC и GCC: совместимость кодировок исходников
|
|||
---|---|---|---|
#18+
petrav Для всех европейских языков, в принципе, достаточно wchar_t. Можно воспринимать строку как массив символов. А про суррогатные пары (когда символ - это два wchar_t), можно забыть. Да, такое приложение крайне сложно будет доразвить до поддержки китайского и его диалектов. Но для всех европейских языков всё работает. Или вы, как и Блок считаете, что "азиаты мы с раскосыми и жадными глазами"? Ну так у немцев, французов, испанцев и прочих европейцев - тоже есть аналогичных символов. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.11.2019, 19:17 |
|
MSVC и GCC: совместимость кодировок исходников
|
|||
---|---|---|---|
#18+
mayton В типичном backend - приложении строки - самая прожорливая часть кучи. Весь современный веб стоит на процессинге данных типа XML/Json которые в свою очередь порождают массу справочников и фабрик и прочих компонент которые будут выделять строки и много. Любое приложение типа бизнес-процесс которое работает с БД будет так или иначе использовать кеши со строками. Любое приложение активно формирующее отчеты xml/Excel, PDF, html также активно будет много выделять и использовать строк. Серверное ПО -- это отдельная узкоспециализированная ниша. Согласись. Если представить себе распределённую индексирующую машину Гугла, то там 99% памяти -- это текст веб-страниц. Хотя и они уже пытаются индексировать изображения и даже видео. Но пример не слишком подходящий -- для спец разработки и инструментарии специфичные. И люди там работают с резко специфичными навыками. XML/json/html... Вот как сравнить размер XML-файла и память когда этот документ загружен в XML-DOM? Или в браузере html-DOM. Я думаю там разница разов в пять по памяти. Опять же. Серверное ПО (web-сервер, SQL-сервер) -- это совсем другая история, там другие правила игры. Там совершенно другой мир. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.11.2019, 19:31 |
|
MSVC и GCC: совместимость кодировок исходников
|
|||
---|---|---|---|
#18+
petrav Но! Поддержку utf-8 на уровне языка С++ они так и не разработали. Почему? Потому что думали не о программировании, а о нулях. С++ изначально находился в невыгодном положении. Он делегировал "строковый тип" не языку а библиотекам. И мы имели CString, std::string, TString e.t.c. Это все строки. Или обертки над строками. Каждая со своим интерфейсом и со своим поведением и со своими правилами внутреннего предсталвения. Некоторые из них могут зависеть от дефиниции макроса _UNICODE И господин Бьярне и комитет все эти годы занимались чем угодно только не этим вопросом. Можно сказать что в С++ строки развивались по scrum-agile. Итеративно. Решая сиюминутные потребности. Волевого решения "из центра" - не было. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.11.2019, 19:35 |
|
MSVC и GCC: совместимость кодировок исходников
|
|||
---|---|---|---|
#18+
mayton petrav Но! Поддержку utf-8 на уровне языка С++ они так и не разработали. Почему? Потому что думали не о программировании, а о нулях. С++ изначально находился в невыгодном положении. Он делегировал "строковый тип" не языку а библиотекам. И мы имели CString, std::string, TString e.t.c. Это все строки. Или обертки над строками. Каждая со своим интерфейсом и со своим поведением и со своими правилами внутреннего предсталвения. Некоторые из них могут зависеть от дефиниции макроса _UNICODE И господин Бьярне и комитет все эти годы занимались чем угодно только не этим вопросом. Можно сказать что в С++ строки развивались по scrum-agile. Итеративно. Решая сиюминутные потребности. Волевого решения "из центра" - не было. +1 имхо ... |
|||
:
Нравится:
Не нравится:
|
|||
29.11.2019, 19:38 |
|
MSVC и GCC: совместимость кодировок исходников
|
|||
---|---|---|---|
#18+
mayton Код: java 1. 2.
При этом строка s1 по идее должна внутри выделять utf-8 массив символов а вторая строка - ascii. Нельзя отличить US-ASCII и UTF8 - это принципиально невозможно. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.11.2019, 19:47 |
|
MSVC и GCC: совместимость кодировок исходников
|
|||
---|---|---|---|
#18+
petrav Поддержку utf-8 на уровне языка С++ они так и не разработали. Почему? Потому что думали не о программировании, а о нулях. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.11.2019, 19:50 |
|
MSVC и GCC: совместимость кодировок исходников
|
|||
---|---|---|---|
#18+
mayton petrav Но! Поддержку utf-8 на уровне языка С++ они так и не разработали. Почему? Потому что думали не о программировании, а о нулях. С++ изначально находился в невыгодном положении. Он делегировал "строковый тип" не языку а библиотекам. И мы имели CString, std::string, TString e.t.c. Это все строки. Или обертки над строками. Каждая со своим интерфейсом и со своим поведением и со своими правилами внутреннего предсталвения. Некоторые из них могут зависеть от дефиниции макроса _UNICODE И господин Бьярне и комитет все эти годы занимались чем угодно только не этим вопросом. Можно сказать что в С++ строки развивались по scrum-agile. Итеративно. Решая сиюминутные потребности. Волевого решения "из центра" - не было. Да. Вот ты прямо сказал, то что я думаю. И... все же, эти QString, TString, TAnsiString, WxString (?), CString. Этим классам очень много лет. Почему они тогда появились? Потому что С++ тогда не был развитым языком программирования, всё было впервые и многие хотели сделать свои яхты и плыть на них. Но годы прошли. И теперь мне советуют библиотеку ICU. Это хорошая библиотека. И что я там вижу? Класс icu::UnicodeString. Ещё один велосипед! Да в самом С++ больше десятка представлений строк. И ещё одно! В 2019-м году! Почему так? Да те кто занимаются проектированием С++ просто занимаются не тем чем нужно. Это во времена молодости С++ было позволено, а сейчас это признак того, что люди не на своём месте. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.11.2019, 19:55 |
|
MSVC и GCC: совместимость кодировок исходников
|
|||
---|---|---|---|
#18+
Basil A. Sidorov mayton Код: java 1. 2.
При этом строка 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.
... |
|||
:
Нравится:
Не нравится:
|
|||
29.11.2019, 19:58 |
|
MSVC и GCC: совместимость кодировок исходников
|
|||
---|---|---|---|
#18+
Возможно я ошибся в кодировках. Там Код: plaintext 1. 2.
Я еще просмотрю историю коммитов. Возможно что-то проскочило из того что я говорил. А это транковая ветка. Соотвествует JDK которой еще нет в релизе. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.11.2019, 20:01 |
|
MSVC и GCC: совместимость кодировок исходников
|
|||
---|---|---|---|
#18+
petrav Да. Вот ты прямо сказал, то что я думаю. И... все же, эти QString, TString, TAnsiString, WxString (?), CString. Этим классам очень много лет. Почему они тогда появились? Потому что С++ тогда не был развитым языком программирования, всё было впервые и многие хотели сделать свои яхты и плыть на них. Но годы прошли. И теперь мне советуют библиотеку ICU. Это хорошая библиотека. И что я там вижу? Класс icu::UnicodeString. Ещё один велосипед! Да в самом С++ больше десятка представлений строк. И ещё одно! В 2019-м году! Почему так? Да те кто занимаются проектированием С++ просто занимаются не тем чем нужно. Это во времена молодости С++ было позволено, а сейчас это признак того, что люди не на своём месте. Да в этих комитетах - царит какое-то разложение. Есть у них хоть один proposal который ужесточает стандарт? И делает его более... недёжным что-ли. Предсказуемым на разрядности int к примеру. Вот честное слово я уже не верю в комитеты. Если-бы толстая корпорация типа yandex взяла управление в свои руки и сказала - ша бротва! Мы делаем свой С++. И там будет мать ево Unicode-строка как фундаментальный образующий тип языка. А все синонимы мы просто выкосим нахер. И опубликуем как форк С++ стандарта по версии yandex. Я-бы встал и поаплодировал. И жизненных примеров много. Когда источником нового языка была именно корпорация а не всякие бл...ские комитеты. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.11.2019, 20:07 |
|
MSVC и GCC: совместимость кодировок исходников
|
|||
---|---|---|---|
#18+
Basil A. Sidorov petrav Поддержку utf-8 на уровне языка С++ они так и не разработали. Почему? Потому что думали не о программировании, а о нулях. Т.е. поддержка utf-8 изначально была в языке Си и ты можешь дать ссылку на это от Денис Макалистэйр Ричи (пишу по памяти)? ... |
|||
:
Нравится:
Не нравится:
|
|||
29.11.2019, 20:10 |
|
MSVC и GCC: совместимость кодировок исходников
|
|||
---|---|---|---|
#18+
mayton Если-бы толстая корпорация типа yandex взяла управление в свои руки и сказала - ша бротва! Мы делаем свой С++ А если даже не и сожрали, то глухое игнорирование - ничем не лучше. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.11.2019, 20:17 |
|
|
start [/forum/topic.php?fid=57&msg=39896599&tid=2017506]: |
0ms |
get settings: |
9ms |
get forum list: |
12ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
31ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
54ms |
get tp. blocked users: |
1ms |
others: | 12ms |
total: | 138ms |
0 / 0 |