|
Тяпничное беспокойство по юзкейсам строки
|
|||
---|---|---|---|
#18+
В продолжение petrav-ских топиков о строках. Я просмотрел немало своего кода и нашел следующее. Top 5 использований. Безотносительно языка программирования. А просто. По смыслу. 1) Декларация строкового литерала и объявление переменной. Код: java 1.
2) Конкатенация двух и более строковых переменных или литератов. Код: javascript 1.
3) Проверка на равенство двух строк. Код: sql 1.
4) Проверка строку на пустоту или не-пустоту и не null Код: sql 1. 2. 3.
5) Работа с билдером. Накопление каких-то результатов в строке. По сути работа с строкой как с мини-текстовым файлом. Код: sql 1. 2. 3.
Данные топ 5 использований. Покрывают более чем 80% всего строкового. Все остальные юзкейсы как то: 1) Поиск подстроки по номерам start-end index, поиск вхождения по точному совадению. 2) Поиск префикса (startWidth(" http://") 3) Поиск суффикса (endWith(".xml") 4) Матчинг на регулярку. 5) Взятие символа по номеру. 6) Проверка на длину строки length == ? (например проверить что номер счета состоит из нужного числа цифр). 7) Проверка на равенство CASE-insensitive. Компаратор. Проверка старшинства строк. В разных collations. 8) Использование строки внутри printf, logging e.t.c. Интерполяция средствами логгера или С++подобного printf. 9) Реплейсмент 1 символа или строки в другой строке на что-то. Код: sql 1. 2.
Прошу коллег тоже по возможности - посчитайте в прикладном коде как вы используете строки. Точный подсчет не нужен. Можно приблизительно. ... |
|||
:
Нравится:
Не нравится:
|
|||
31.07.2020, 16:59 |
|
Тяпничное беспокойство по юзкейсам строки
|
|||
---|---|---|---|
#18+
Без файлов уже не сочту. Вопросики для уточнения. -Есть ЯП и есть СУБД. -Как я понимаю, ORDER BY это п.7 ? Теперь что именно считать? Так-то у меня в сишных проектах всё это было кроме регулярок. Наверное по совокупности языков п.2+5 наибольший %. Особенно если s= "select 5 from dual ORDER BY" и т.п. Для них же п.1) + редко в клиенте, хотя s="" примерно столько же, как п.2+5. В это случае ORDER BY учитывать как п.7? п.3+4)Проверки пустоты часто, но реже п.2+5. А если непосредственно команда select 5 from dual ORDER BY ? Как учесть случай последних сишных проектов? Куча файлов практически в каждой функции/методе логирование шаблоном (т.е. в явном виде п.2+8 или +5). Выходит, что п.2+8 лидируют. Два аутсайдера: п.4 регулярки были пару раз только в select 5 from dual п.10 парсинг Xml и Json пару раз ... |
|||
:
Нравится:
Не нравится:
|
|||
31.07.2020, 19:20 |
|
Тяпничное беспокойство по юзкейсам строки
|
|||
---|---|---|---|
#18+
Думаю об архитектуре строк. Просто ты не поймешь пока не прочитаешь все что было здесь https://www.sql.ru/forum/1327569/vychislenie-dliny-utf-8-stroki-v-compile-time https://www.sql.ru/forum/764692/qstring-qobject-tr-unicode-etc https://www.sql.ru/forum/1327581/printf-utf8-vyravnivanie-po-shirine https://www.sql.ru/forum/1319689/msvc-i-gcc-sovmestimost-kodirovok-ishodnikov ... |
|||
:
Нравится:
Не нравится:
|
|||
31.07.2020, 19:44 |
|
Тяпничное беспокойство по юзкейсам строки
|
|||
---|---|---|---|
#18+
Относительно ЯП надо смотреть, т.к. в фокспро Код: sql 1. 2. 3.
в PHP Код: sql 1. 2. 3.
... |
|||
:
Нравится:
Не нравится:
|
|||
31.07.2020, 21:06 |
|
Тяпничное беспокойство по юзкейсам строки
|
|||
---|---|---|---|
#18+
В .Net есть куча вариаций правил сравнения CompareOptions ... |
|||
:
Нравится:
Не нравится:
|
|||
31.07.2020, 21:10 |
|
Тяпничное беспокойство по юзкейсам строки
|
|||
---|---|---|---|
#18+
В последних проектах конкатенацию пишу не так: Код: vbnet 1.
а через методы прослойки или интерполяцию (если позволительно) в угоду читабельности. Но это не правило, всё зависит от того, будет ли хорошо читаться код Код: vbnet 1.
а так, топ 5 примерно такой же ... |
|||
:
Нравится:
Не нравится:
|
|||
31.07.2020, 21:25 |
|
Тяпничное беспокойство по юзкейсам строки
|
|||
---|---|---|---|
#18+
VSVLAD Код: vbnet 1.
В .Net уже давно можно так писать Код: c# 1.
... |
|||
:
Нравится:
Не нравится:
|
|||
31.07.2020, 21:29 |
|
Тяпничное беспокойство по юзкейсам строки
|
|||
---|---|---|---|
#18+
Dima T, Я и написал "если позволительно", в двух проектах используется CodeDomProvider для динамической компиляции и там интерполяция не работает, как и много других плюшек в последних версиях языков (c#/vb) ... |
|||
:
Нравится:
Не нравится:
|
|||
31.07.2020, 21:58 |
|
Тяпничное беспокойство по юзкейсам строки
|
|||
---|---|---|---|
#18+
такое же ограничение есть в ASP.NET, если не использовать компилятор Roslyn ... |
|||
:
Нравится:
Не нравится:
|
|||
31.07.2020, 22:00 |
|
Тяпничное беспокойство по юзкейсам строки
|
|||
---|---|---|---|
#18+
Я позволю себе тезисно описать как я вижу универсальный string-тип который будет экономен и рационален и будет покрывать сразу все потребности в языках мира. Чтоб различать - буду использовать обозначение UString (ustring). Типа Universal String. 1) UString - представляет собой универсальный обобщенный строковый тип языков программирования будущего. 2) UString - предоставляет интерфейс доступа к последовательности (sequence) универсальных поли-алфавитных символов (CodePoints). В настоящее время из таковых известно и стандартизировано порядка 1 100 000 (один миллион сто тысяч приблизительно) кодовых точек. 3) UString - поддерживает стандартные инициализации из строковых литералов. И инициализации произвольного символа по Unicode Пример греческой заглавной буквы Омега. Код: sql 1.
4) UString - определяет форму представления строк. Но не хранения. Хранение - может иметь много алгоритмических реализаций. Может быть платформо-зависимым. Или внешним. И иметь десятки и сотни программных представлений. UString - не сущность а программный интерфейс доступа к последовательности CodePoints. 5) UString - ленивый. И выполняет вычисления над строками только по требованию. UString можно инициализировать из текстовоо файла с произвольной кодировкой. Пример: Код: sql 1. 2.
В данном примере чтение файла произойдет только во время доступа к строке s2. 6) UString - иммутабельный. 7) UString - обеспечивает констатное время операций для - проверки на пустоту - конкатенацию (это обсуждается) Код: sql 1.
В данном случае s4 имеет имплементацию цепочки стримов (Chain of Streams). Инициализация строки - не всегда константная - но быстрая настолько насколько эт возможно. 8) UString - не обязательно хранит строку. Он может быть генератором последовательности (random generator) по произвольному алгоритму. Таким образом длина представляемой строки может быть не определена. UString может представлять канальное устройство (Pipeline) или устройство ввода (STDIN). 9) UString - не просто иницилизируется из текстового файла. Он представляет текстовый файл. 10) UString - позволяет программисту создавать свои собственные реализации хранения. Пример. - ExternalGZippedTextFileUString - ExternalWin32EncodedTextFileUString - OSNativeUString - TemporarySpaceHugeUString - RandomGenerateUString 11) Интерфейс использования - Базовый (представляет собой интерфейс потока кодовых точек) Код: sql 1. 2. 3. 4.
- Расширенный - включает в себя все остальные методы. В том числе операции индексации и взятия под-строки и матчинг на регулярки и прочее. Базовый - обязателен к имплементации. Расширенный - имеет дефолтные реализации опирающиеся на базовый. 12) Расширенный - может иметь оптимизации. Как-то индексирование номеров CodePoints в строке. Пример использования. Если кому-то нужен o(1) доступ к нужному символу. Код: sql 1.
Но таковых практик применения - не очень много. (Это важно. Это - отсылка к моbему первому сообщению в топике). 13) UString имеет готовый к использованию билдер для генерации текстовых отчотов или просто длинных строк. UStringBuilder в любой момент может фабрично создать UString. После этого работа билдера завершается деструкцией. Вот такие тезисы. А теперь я готов заслушать ваши вопросы. ... |
|||
:
Нравится:
Не нравится:
|
|||
31.07.2020, 23:34 |
|
Тяпничное беспокойство по юзкейсам строки
|
|||
---|---|---|---|
#18+
mayton А теперь я готов заслушать ваши вопросы. Где ссылка на гитхаб? ... |
|||
:
Нравится:
Не нравится:
|
|||
01.08.2020, 06:24 |
|
Тяпничное беспокойство по юзкейсам строки
|
|||
---|---|---|---|
#18+
Это просто идея. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.08.2020, 08:19 |
|
Тяпничное беспокойство по юзкейсам строки
|
|||
---|---|---|---|
#18+
mayton Это просто идея. Ну и хорошо. Гитхаб с проектом строки для плюсов, которая устроит всех. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.08.2020, 09:24 |
|
Тяпничное беспокойство по юзкейсам строки
|
|||
---|---|---|---|
#18+
Почему плюсов? ... |
|||
:
Нравится:
Не нравится:
|
|||
01.08.2020, 10:18 |
|
Тяпничное беспокойство по юзкейсам строки
|
|||
---|---|---|---|
#18+
mayton 4) UString - определяет форму представления строк. Но не хранения. 2. Если этот (странный) пункт то, о чём я думаю - сразу в топку: я понимаю, каким образом можно встраивать в "прикладные" протоколы интернета UTF-8, но даже думать не хочу про тот ад, который возникает из желания угодить и нашим и вашим. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.08.2020, 10:43 |
|
Тяпничное беспокойство по юзкейсам строки
|
|||
---|---|---|---|
#18+
А где тут строка? 8) UString - не обязательно хранит строку. Он может быть генератором последовательности (random generator) по произвольному алгоритму. Таким образом длина представляемой строки может быть не определена. UString может представлять канальное устройство (Pipeline) или устройство ввода (STDIN). Instr'ы, Substr'ы пошли лесом ? Вы что то больно умное придумали, обычные программисты Вас не поймут ... |
|||
:
Нравится:
Не нравится:
|
|||
01.08.2020, 11:03 |
|
Тяпничное беспокойство по юзкейсам строки
|
|||
---|---|---|---|
#18+
Давайте искать точки соприкосновения. Лев Николаевич говорил - истина рождается в спорах. Топик просто возник как антагонизм или переосмысление топиков петрава. Топик-концепт. Топик-идея. Я даже не говорю что я прав. Я просто предлагаю концепт строки будущего. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.08.2020, 11:20 |
|
Тяпничное беспокойство по юзкейсам строки
|
|||
---|---|---|---|
#18+
mayton Я просто предлагаю концепт строки будущего. Как я понимаю, у Вас не строка в классическом виде, а нечто наподобие Stream. Строка без length, instr, substr - как-то не привычно Так же не очень понятно, как на stream реализовывать trim, ltrim, rtrim ... |
|||
:
Нравится:
Не нравится:
|
|||
01.08.2020, 11:45 |
|
Тяпничное беспокойство по юзкейсам строки
|
|||
---|---|---|---|
#18+
Leonid Kudryavtsev, Она не без length. Он там есть, просто он ленивый. Пока он явно не понадобится никто дёргать стрим не будет. Как только понадобится, стрим начнёт вчитываться, а генератор работать. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.08.2020, 12:39 |
|
Тяпничное беспокойство по юзкейсам строки
|
|||
---|---|---|---|
#18+
Dima T в PHP Код: sql 1. 2. 3.
нет там такого. false в обоих случаях. Leonid Kudryavtsev Так же не очень понятно, как на stream реализовывать trim, ltrim, rtrim интересно, есть какая-то специальная причина, почему trim не попал в C++ string? ... |
|||
:
Нравится:
Не нравится:
|
|||
01.08.2020, 14:21 |
|
Тяпничное беспокойство по юзкейсам строки
|
|||
---|---|---|---|
#18+
mayton, я не теоретик программирования. К п.1) пока вопросов нет. автор9) UString - не просто иницилизируется из текстового файла. Он представляет текстовый файл.Как именно он представляет? типа по требованию+seek(туда-сюда) ? substr(.....)= "" что делает при этом с файлом? со строковым буфером? ну и другие операции над строкой И конечно противно писать в проге: &(Кот-Д'Вуарские острова и Японские гренадины, &(Русская, UnicodeString(Ять))), но это уже мелочи. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.08.2020, 14:50 |
|
Тяпничное беспокойство по юзкейсам строки
|
|||
---|---|---|---|
#18+
exp98 Как именно он представляет? типа по требованию+seek(туда-сюда) ? substr(.....)= "" что делает при этом с файлом? со строковым буфером? ну и другие операции над строкой Туда-сюда не надо. Достаточно в одну сторону. Только туда. Примерно как мы работаем с STDIN. Нам же его достаточно чтоб взять текстовый входящий аргумент? ... |
|||
:
Нравится:
Не нравится:
|
|||
01.08.2020, 16:51 |
|
Тяпничное беспокойство по юзкейсам строки
|
|||
---|---|---|---|
#18+
Leonid Kudryavtsev mayton Я просто предлагаю концепт строки будущего. Как я понимаю, у Вас не строка в классическом виде, а нечто наподобие Stream. Строка без length, instr, substr - как-то не привычно Так же не очень понятно, как на stream реализовывать trim, ltrim, rtrim Я опираюсь просто на свои наблюдения о том как мы работаем со строками вообще. Сам по себе интерфейс символьного массива нам не часто то и нужен. Если нам нужно напечатать строку на экране - то Stream<CodePoint> достаточно. Сравнить две строки на равенство - тоже самое. Потока достаточно. Операции где мы делаем физически trim конечно же существуют. И я не против их использования. Но они не так часты например как Базовый интерфейс (введем обозначение IUStringBasic). Более того. Безотносительно хранения в виде Stream или char[], вы так или иначе - конструируете новую строку на каждый trim. Поэтому производительность надо рассматривать в совокупности. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.08.2020, 16:59 |
|
Тяпничное беспокойство по юзкейсам строки
|
|||
---|---|---|---|
#18+
mayton Если нам нужно напечатать строку на экране - то Stream<CodePoint> достаточно. Лично меня уже задолбали различия терминалов в разных ситуациях: nano - так, vi(m) - сяк, screen - ещё как-нибудь. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.08.2020, 19:44 |
|
Тяпничное беспокойство по юзкейсам строки
|
|||
---|---|---|---|
#18+
То что я предлагаю - ортогонально к терминалам. По сути Код: sql 1.
я предлагаю заменить на Код: sql 1.
и я утверждаю что мы особо ничего не теряем при этом. Если мы теряли что-то раньше (уже) то этот кейс надо рассмотреть отдельно ибо непонятно что надо фиксить. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.08.2020, 19:53 |
|
|
start [/forum/topic.php?fid=16&fpage=5&tid=1339759]: |
0ms |
get settings: |
11ms |
get forum list: |
16ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
47ms |
get topic data: |
13ms |
get forum data: |
2ms |
get page messages: |
66ms |
get tp. blocked users: |
2ms |
others: | 241ms |
total: | 406ms |
0 / 0 |