<feed xmlns='http://www.w3.org/2005/Atom'>
<title>ydb/library/cpp/string_utils, branch main</title>
<subtitle>Mirror of YDB github repos</subtitle>
<id>https://code.mastervirt.ru/ydb/atom?h=main</id>
<link rel='self' href='https://code.mastervirt.ru/ydb/atom?h=main'/>
<link rel='alternate' type='text/html' href='https://code.mastervirt.ru/ydb/'/>
<updated>2026-02-24T20:52:05Z</updated>
<entry>
<title>faster escape</title>
<updated>2026-02-24T20:52:05Z</updated>
<author>
<name>styopkin</name>
<email>styopkin@yandex-team.com</email>
</author>
<published>2026-02-24T20:25:06Z</published>
<link rel='alternate' type='text/html' href='https://code.mastervirt.ru/ydb/commit/?id=c71699717685cbba8eb4ee1b6e54fbc178e556da'/>
<id>urn:sha1:c71699717685cbba8eb4ee1b6e54fbc178e556da</id>
<content type='text'>
2% int'ов сидят в Escape. pepe watafa.
&lt;https://nda.ya.ru/t/AJC4zGq27VFEkb&gt;

Тут играясь с блоками получилось на реальном cgi из прода \~33% срезать. Мелочь, а приятно. На самом деле, хотелось бы узнать как правильно делать "некрасивую, но ускоряющую" гадость в library/cpp. Все тесты работают, но тем не менее =)

До: &lt;https://nda.ya.ru/t/Iv6Y0jQf7VFEkc&gt;

После: &lt;https://nda.ya.ru/t/KO_Rgvi87VFEke&gt;

Тут, к сожалению не на прогрузе, но уже видно.
commit_hash:671028887e7d9320c8e9a393a0abb203207eb883
</content>
</entry>
<entry>
<title>fix buffer overrun</title>
<updated>2025-10-14T11:31:38Z</updated>
<author>
<name>xenoxeno</name>
<email>xenoxeno@yandex-team.com</email>
</author>
<published>2025-10-14T10:58:50Z</published>
<link rel='alternate' type='text/html' href='https://code.mastervirt.ru/ydb/commit/?id=c7c3f1788b1e232b3a59ff5f1bc69cd15edd8519'/>
<id>urn:sha1:c7c3f1788b1e232b3a59ff5f1bc69cd15edd8519</id>
<content type='text'>
commit_hash:013178051e5e4c0a99ded31893069fb928ba18f9
</content>
</entry>
<entry>
<title>YT-25950: Fix WebAssembly compilation</title>
<updated>2025-08-29T13:44:11Z</updated>
<author>
<name>dtorilov</name>
<email>dtorilov@yandex-team.com</email>
</author>
<published>2025-08-29T13:16:58Z</published>
<link rel='alternate' type='text/html' href='https://code.mastervirt.ru/ydb/commit/?id=25c13a35fdc745b08c8c37b514dc71197ca958a0'/>
<id>urn:sha1:25c13a35fdc745b08c8c37b514dc71197ca958a0</id>
<content type='text'>
commit_hash:205598251dba71e1700845ebcb16ce1057ea1fad
</content>
</entry>
<entry>
<title>Improve csv parsing speed in С++ csv library</title>
<updated>2025-06-25T08:35:36Z</updated>
<author>
<name>pnv1</name>
<email>pnv1@yandex-team.com</email>
</author>
<published>2025-06-25T07:46:15Z</published>
<link rel='alternate' type='text/html' href='https://code.mastervirt.ru/ydb/commit/?id=7dff50ae6cd121950e4225dfe6395e44947263ae'/>
<id>urn:sha1:7dff50ae6cd121950e4225dfe6395e44947263ae</id>
<content type='text'>
Improve csv parsing speed in csv library

На примере ВМ в QYP на ssd скорость чтении csv этой либой:

- до этих изменений стабильно показывает 383-387 MB/s

- после этих изменений стабильно показывает 613-615 MB/s

**++Просьба PR пока не мерджить++**.

Пока что надеюсь просто получить шип от овнеров. Мы собираем метрики по текущей производительности в процессе импорта в YDB CLI. Чуть позже, если всё ОК, вмерджу этот PR, чтобы мы замерили разницу.
commit_hash:a23fc7e631733ffe3cae2941da8b3bdb75bccc94
</content>
</entry>
<entry>
<title>Intermediate changes</title>
<updated>2025-04-25T08:33:21Z</updated>
<author>
<name>robot-piglet</name>
<email>robot-piglet@yandex-team.com</email>
</author>
<published>2025-04-25T08:17:10Z</published>
<link rel='alternate' type='text/html' href='https://code.mastervirt.ru/ydb/commit/?id=d1fdfcc75cc195e8afa9c2d52c49dd176dcd5dfb'/>
<id>urn:sha1:d1fdfcc75cc195e8afa9c2d52c49dd176dcd5dfb</id>
<content type='text'>
commit_hash:a2ae9e9ddb0ebd0f3ce876aa1f8f29e291d3aed1
</content>
</entry>
<entry>
<title>Intermediate changes</title>
<updated>2025-02-21T10:19:47Z</updated>
<author>
<name>robot-piglet</name>
<email>robot-piglet@yandex-team.com</email>
</author>
<published>2025-02-21T10:07:50Z</published>
<link rel='alternate' type='text/html' href='https://code.mastervirt.ru/ydb/commit/?id=ccdb4738d37ce7e2ac74e8a298fe06ad3c01eda2'/>
<id>urn:sha1:ccdb4738d37ce7e2ac74e8a298fe06ad3c01eda2</id>
<content type='text'>
commit_hash:0ece39f764da165d6f259d1e8d89904001d07282
</content>
</entry>
<entry>
<title>Make sure returned TStringBuffers do not change during splitter lifetime. Also make input string reference const</title>
<updated>2024-12-10T14:11:35Z</updated>
<author>
<name>pnv1</name>
<email>pnv1@yandex-team.com</email>
</author>
<published>2024-12-10T13:48:40Z</published>
<link rel='alternate' type='text/html' href='https://code.mastervirt.ru/ydb/commit/?id=eb079fb9449e62da43aac095244be3ffbe658cdf'/>
<id>urn:sha1:eb079fb9449e62da43aac095244be3ffbe658cdf</id>
<content type='text'>
&lt;https://github.com/ydb-platform/ydb/issues/12306&gt;

Make input string reference const

Make sure returned TStringBuffers do not change during splitter lifetime

splitter.Consume() возвращает TStringBuf.

Если в колонке есть ескейпинг кавычек, вся колонка обрамлена двойными кавычками (`"`), а внутри для ескейпинга двойных кавычек используются две идущие подряд двойные кавычки (`""`).

В таком случае вернуть TStringBuf, ссылающийся на кусок входящего TString, не получится, т.к. нужной подстроки в нем не существует.

Для этого используется мембер TVector\&lt;TStringbuf\&gt; CustomStrings. В него накидываются нужные кусочки из исходной строки и в конце складываются в мембер-строку TString CustomString

Например, из строки  `"abc""cde""efg"`  копились кусочки `abc"`, `cde"`, `efg` и в конце склеивались.

И возвращался TStringBuf из этой строки-мембера.

Проблема в том, что если в другой колонке той же строки также встречались кавычки с ескейпингом, эта строка-мембер CustomString очищалась. При том, что на неё всё еще ссылался возвращённый ранее TStringBuf.

В итоге "предыдущий" TStringBuf либо начинал ссылаться на часть новой строки, если новая строка была длиннее, либо на часть новой строки \+ рандомный набор байт в памяти, если новая строка оказывалась короче.

Фикс в том, чтобы хранить все строки, сгенерённые сплиттером, всё время жизни сплиттера
commit_hash:aa4957e1d8030cd48d06eaa16a7ad61e878348f8
</content>
</entry>
<entry>
<title>Intermediate changes</title>
<updated>2024-11-19T10:27:04Z</updated>
<author>
<name>robot-piglet</name>
<email>robot-piglet@yandex-team.com</email>
</author>
<published>2024-11-19T10:17:44Z</published>
<link rel='alternate' type='text/html' href='https://code.mastervirt.ru/ydb/commit/?id=223625eed56ec3e2808c010eac46dba1c9a64d13'/>
<id>urn:sha1:223625eed56ec3e2808c010eac46dba1c9a64d13</id>
<content type='text'>
commit_hash:1bcd4492a3f6a28a2be8e27b5660e98cc8e4c8d0
</content>
</entry>
<entry>
<title>Remove Size, Empty and Data usages from library</title>
<updated>2024-10-04T07:14:38Z</updated>
<author>
<name>mikhnenko</name>
<email>mikhnenko@yandex-team.com</email>
</author>
<published>2024-10-04T06:58:47Z</published>
<link rel='alternate' type='text/html' href='https://code.mastervirt.ru/ydb/commit/?id=9ad2894d3a432775a19303a5e8b7a79092017963'/>
<id>urn:sha1:9ad2894d3a432775a19303a5e8b7a79092017963</id>
<content type='text'>
commit_hash:ef5ad4cfa9e68bbfc586492e8c376c732d0a48af
</content>
</entry>
<entry>
<title>fix dereferencing of temporary string value in the default constructed  TZtStringBuf. Enable check lifetime bounds of the TZtStringBuf</title>
<updated>2024-09-18T02:07:56Z</updated>
<author>
<name>swarmer</name>
<email>swarmer@yandex-team.com</email>
</author>
<published>2024-09-18T01:57:23Z</published>
<link rel='alternate' type='text/html' href='https://code.mastervirt.ru/ydb/commit/?id=64478a9ae0190bb2d5839302b0f12c8b26146509'/>
<id>urn:sha1:64478a9ae0190bb2d5839302b0f12c8b26146509</id>
<content type='text'>
commit_hash:4aa9319e8b2d685402a8ea68fdc24fa07af82d1b
</content>
</entry>
</feed>
