Skip to content

Commit ce3fe22

Browse files
committed
- Update benchmarks results.
- Add support for pretty view in debuggers for str_src and str_src_nt.
1 parent bb70d1b commit ce3fe22

10 files changed

Lines changed: 4777 additions & 4645 deletions

bench/results.html

Lines changed: 455 additions & 420 deletions
Large diffs are not rendered by default.

bench/results/000-Xeon E5-2682 v4, Ubuntu 22 (WSL), Clang-21.txt

Lines changed: 832 additions & 820 deletions
Large diffs are not rendered by default.

bench/results/001-Xeon E5-2682 v4, Ubuntu 22 (WSL), GCC-13.txt

Lines changed: 834 additions & 822 deletions
Large diffs are not rendered by default.

bench/results/002-Xeon E5-2682 v4, Windows 10, Clang-19.txt

Lines changed: 847 additions & 835 deletions
Large diffs are not rendered by default.

bench/results/003-Xeon E5-2682 v4, Windows 10, MSVC-19.txt

Lines changed: 848 additions & 836 deletions
Large diffs are not rendered by default.

bench/results/004-Xeon E5-2682 v4, WASM Firefox, Clang-21.txt

Lines changed: 841 additions & 829 deletions
Large diffs are not rendered by default.

for_debug/simstr.natvis

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,34 @@
11
<?xml version="1.0" encoding="utf-8"?>
22
<!-- Файл с описанием визуализации simstr строк для Visual Studio -->
33
<AutoVisualizer xmlns="http://schemas.microsoft.com/vstudio/debugger/natvis/2010">
4+
<Type Name="simstr::str_src&lt;*&gt;">
5+
<DisplayString Condition="0xCCCCCCCC==(unsigned)str">[unknown]</DisplayString>
6+
<DisplayString Condition="sizeof($T1)==1">l={len}, {str,[len]nas8}</DisplayString>
7+
<DisplayString Condition="sizeof($T1)==2">l={len}, {str,[len]nasu}</DisplayString>
8+
<DisplayString Condition="sizeof($T1)==4">l={len}, {str,[len]nas32}</DisplayString>
9+
<DisplayString>[unknown]</DisplayString>
10+
</Type>
11+
<Type Name="simstr::str_src_nt&lt;*&gt;">
12+
<DisplayString Condition="0xCCCCCCCC==(unsigned)str">[unknown]</DisplayString>
13+
<DisplayString Condition="sizeof($T1)==1">l={len}, {str,[len]nas8}</DisplayString>
14+
<DisplayString Condition="sizeof($T1)==2">l={len}, {str,[len]nasu}</DisplayString>
15+
<DisplayString Condition="sizeof($T1)==4">l={len}, {str,[len]nas32}</DisplayString>
16+
<DisplayString>[unknown]</DisplayString>
17+
</Type>
418
<Type Name="simstr::simple_str&lt;*&gt;">
519
<DisplayString Condition="0xCCCCCCCC==(unsigned)str">[unknown]</DisplayString>
620
<DisplayString Condition="sizeof($T1)==1">l={len}, {str,[len]nas8}</DisplayString>
721
<DisplayString Condition="sizeof($T1)==2">l={len}, {str,[len]nasu}</DisplayString>
822
<DisplayString Condition="sizeof($T1)==4">l={len}, {str,[len]nas32}</DisplayString>
923
<DisplayString>[unknown]</DisplayString>
1024
</Type>
25+
<Type Name="simstr::simple_str_nt&lt;*&gt;">
26+
<DisplayString Condition="0xCCCCCCCC==(unsigned)str">[unknown]</DisplayString>
27+
<DisplayString Condition="sizeof($T1)==1">l={len}, {str,[len]nas8}</DisplayString>
28+
<DisplayString Condition="sizeof($T1)==2">l={len}, {str,[len]nasu}</DisplayString>
29+
<DisplayString Condition="sizeof($T1)==4">l={len}, {str,[len]nas32}</DisplayString>
30+
<DisplayString>[unknown]</DisplayString>
31+
</Type>
1132
<Type Name="simstr::sstring&lt;*&gt;">
1233
<DisplayString Condition="sizeof($T1)==1 &amp;&amp; type_ == 0">inplace, l={LocalCount - localRemain_}, {buf_,[LocalCount - localRemain_]nas8}</DisplayString>
1334
<DisplayString Condition="sizeof($T1)==1 &amp;&amp; type_ == 1">literal, l={bigLen_}, {cstr_,[bigLen_]nas8}</DisplayString>

for_debug/simstr_pretty_print.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -192,6 +192,8 @@ def __call__(self, val):
192192
"lstring": [lstring_printer, lstring_printer_init],
193193
"simple_str": [ssa_printer],
194194
"simple_str_nt": [ssa_printer],
195+
"str_src": [ssa_printer],
196+
"str_src_nt": [ssa_printer],
195197
}
196198

197199
for name, func in printer_list.items():

readme.md

Lines changed: 73 additions & 66 deletions
Large diffs are not rendered by default.

readme_ru.md

Lines changed: 24 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,18 @@
11
# simstr - библиотека строковых объектов и функций
2-
<h2>Ускорь работу со строками в 2-10 раз!</h2>
2+
<span class="obfuscator"><a href="readme.md">On English | По-английски</a></span>
33

44
[![CMake on multiple platforms](https://github.com/orefkov/simstr/actions/workflows/cmake-multi-platform.yml/badge.svg)](https://github.com/orefkov/simstr/actions/workflows/cmake-multi-platform.yml)
55

66
Версия 1.6.0.
77

8-
<span class="obfuscator"><a href="readme.md">On English | По-английски</a></span>
8+
<h2>Ускорь работу со строками в 2-10 раз!</h2>
9+
910

1011
В этой библиотеке содержится современная реализация нескольких видов строковых объектов и различных алгоритмов для работы со строками.
12+
## Сгенерированная документация
13+
[Находится здесь](https://orefkov.github.io/simstr/docs_ru/)
1114

15+
## Краткое описание
1216
Цель библиотеки - сделать работу со строками в С++ такой же простой и лёгкой, как во множестве других языков, особенно
1317
скриптовых, но при этом сохранив оптимальность и производительность на уровне С и C++, и даже улучшив их.
1418

@@ -95,6 +99,22 @@
9599
сравнения ключей по сравнению с ключами `std::string`. Поддерживается возможность регистро-независимого сравнения ключей (Ascii или
96100
минимальный Unicode (см. предыдущий пункт)).
97101

102+
## Бенчмарки
103+
Бенчмарки производятся с использованием фреймворка [Google benchmark](https://github.com/google/benchmark).
104+
Постарался сделать замеры для наиболее типичных операций, встречающихся в обычной работе. Я проводил замеры на своём оборудовании, под
105+
Windows и Linux (в WSL), с использованием компиляторов MSVC, Clang, GCC. Сторонние результаты приветствуются.
106+
Также проводил замеры в WASM, сборка в Emscripten. Обращаю внимание, что под WASM в Emscripten собирается 32-битная сборка, а значит,
107+
размеры буферов SSO в объектах меньше.
108+
109+
На [странице релизов](https://github.com/orefkov/simstr/releases) вы можете скачать бинарные сборки бенчмарков и запустить их на своём оборудовании.
110+
111+
Также вы можете запустить [Emscripten сборку бенчмарков](https://orefkov.github.io/simstr/bench/benchStr.html) прямо в браузере.
112+
(Перед переходом по ссылке лучше предварительно откройте "Инструменты разработчика" (обычно **F12**), чтобы видеть консоль
113+
Javascript, так как до окончания бенчмарков страница не будет обновляться, а весь вывод будет виден в консоли).
114+
115+
- [Исходный код бенчмарков](bench/bench_str.cpp)
116+
- [Результаты бенчмарков](https://orefkov.github.io/simstr/results.html)
117+
98118
## Строковые выражения
99119
Это специальные объекты, которые эффективно реализуют конкатенацию строк, с помощью `operator+`.
100120
Главный принцип, за счёт которого достигается эффективная работа - сколько бы операндов не входило во всё выражение,
@@ -263,6 +283,7 @@ int split_and_calc_total_sim(ssa numbers, ssa delimiter) {
263283
Помимо приведённых здесь отдельных примеров, можно посмотреть исходники:
264284
- [тестов всей библиотеки](https://github.com/orefkov/simstr/blob/main/tests/test_str.cpp)
265285
- [тестов только strexpr части](https://github.com/orefkov/simstr/blob/main/tests/test_expr_only.cpp)
286+
- [примеры использования своих типов в строковых выражениях](https://github.com/orefkov/simstr/blob/main/tests/test_tostrexpr.cpp)
266287
- [бенчмарков](https://github.com/orefkov/simstr/blob/main/bench/bench_str.cpp)
267288
- [утилиты подготовки html](https://github.com/orefkov/simstr/blob/main/bench/process_result.cpp) из результатов бенчмарков.
268289

@@ -320,27 +341,13 @@ target_link_libraries(<your target> PUBLIC simstr::simstr)
320341
Работа проверялась под Windows на MSVC-19 и Clang-19, под Linux - на GCC-13 и Clang-21.
321342
Также проверялась работа в WASM, сборка в Emscripten 4.0.6, Clang-21.
322343

323-
324344
## Удобная отладка
325345
Вместе с библиотекой поставляются два файла, делающие просмотр simstr строковых объектов в отладчиках
326346
более удобным.\
327347
Более подробно описано [здесь](for_debug/readme_ru.md).
328348

329-
## Бенчмарки
330-
Бенчмарки производятся с использованием фреймворка [Google benchmark](https://github.com/google/benchmark).
331-
Постарался сделать замеры для наиболее типичных операций, встречающихся в обычной работе. Я проводил замеры на своём оборудовании, под
332-
Windows и Linux (в WSL), с использованием компиляторов MSVC, Clang, GCC. Сторонние результаты приветствуются.
333-
Также проводил замеры в WASM, сборка в Emscripten. Обращаю внимание, что под WASM в Emscripten собирается 32-битная сборка, а значит,
334-
размеры буферов SSO в объектах меньше.
335-
336-
- [Исходный код бенчмарков](bench/bench_str.cpp)
337-
- [Результаты бенчмарков](https://orefkov.github.io/simstr/results.html)
338-
349+
## Где уже используется
339350
Также simstr используется в моих проектах:
340351
- [simjson](https://github.com/orefkov/simjson) - библиотека для простой работы с JSON с использованием строк simstr.
341352
- [simrex](https://github.com/orefkov/simrex) - обёртка для работы с регулярными выражениями [Oniguruma](https://github.com/kkos/oniguruma) с использованием строк simstr.
342353
- [v8sqlite](https://github.com/orefkov/v8sqlite) - внешняя компонента для 1С-Предприятия V8 для работы с sqlite.
343-
344-
345-
## Сгенерированная документация
346-
[Находится здесь](https://orefkov.github.io/simstr/docs_ru/)

0 commit comments

Comments
 (0)