Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .bsl-language-server.json
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
"listOfIncorrectFirstSymbol": ";|,\\s*\\S+"
},
"Typo": {
"userWordsToIgnore": "Бенчмаркинг,Бенчмарк,бенчмарк,Бенчмарки,бенчмарки,Бенчмарков,бенчмарков,Бенчмарка,бенчмарка,Бенчмарку,Прогревочных,прогревочных,Запускатель,запускатель,Распарсить,распарсить,Регулярка,Воркер,Сериализовать,Сериализации,Сериализуемые,Сериализуется,Сериализацию,сериализуемым,сериализован,Несериализуемых,Валидатор,Алиас"
"userWordsToIgnore": "Бенчмаркинг,Бенчмарк,бенчмарк,Бенчмарки,бенчмарки,Бенчмарков,бенчмарков,Бенчмарка,бенчмарка,Бенчмарку,Прогревочных,прогревочных,Запускатель,запускатель,Распарсить,распарсить,Регулярка,Воркер,Сериализовать,Сериализации,Сериализуемые,Сериализуется,Сериализацию,сериализацию,сериализуемым,сериализован,Несериализуемых,Валидатор,Алиас"
}
}
}
Expand Down
15 changes: 8 additions & 7 deletions docs/README.md
Original file line number Diff line number Diff line change
@@ -1,9 +1,11 @@
# Документация

## Статьи
## Начало работы
- [Быстрый старт](БыстрыйСтарт.md)
- [Запуск бенчмарков](ЗапускБенчмарков.md)
- [CLI](CLI.md)

## Основные функции
- [Интерфейс командной строки (CLI)](CLI.md)
- [Управление итерациями и вызовами](УправлениеИтерациямиИВызовами.md)
- [Параметризация](Параметризация.md)
- [Эталоны](Эталоны.md)
Expand All @@ -16,9 +18,8 @@
- [Сортировка отчета](СортировкаОтчета.md)

## Примеры
- [Бенчмарки](../samples/benchmarks/Классы)
- [API](../samples/api)

## Прочее
- [Примеры бенчмарков](../samples/benchmarks/Классы)
- [Примеры использования API](../samples/api)

- [Аннотации](../src/BenchmarkOneScript/annotations/Классы)
## Технические детали
- [Описания аннотаций](../src/BenchmarkOneScript/annotations/Классы)
260 changes: 237 additions & 23 deletions docs/Параметризация.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,44 +4,173 @@

## Конфигурирование

### Аннотация
### Аннотации

**Параметры для поля класса, заданные напрямую**

Используйте аннотацию `&Параметры` для указания фиксированного набора значений для поля класса. Можно указать значения в одной аннотации или в нескольких.

1. Параметры для полей класса
```bsl
// Вариант 1: Все значения в одной аннотации
&Параметры("MD5", "SHA256")
Перем АлгоритмХеширования Экспорт;

// Вариант 2: Отдельные аннотации для каждого значения
&Параметры("MD5")
&Параметры("SHA256")
Перем АлгоритмХеширования Экспорт;
```

2. Параметры для методов бенчмарка
**Параметры для поля класса, полученные из функции**

Используйте аннотацию `&ИсточникПараметров` для указания функции, возвращающей коллекцию значений для поля. Функция должна быть определена в классе бенчмарка.

```bsl
&ИсточникПараметров("ПолучитьАлгоритмыХеширования")
Перем АлгоритмХеширования Экспорт;
```

```bsl
Функция ПолучитьАлгоритмыХеширования() Экспорт
Значения = Новый Массив();
Значения.Добавить("MD5");
Значения.Добавить("SHA256");
Возврат Значения;
КонецФункции
```
Comment on lines +33 to +40
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Verification agent

🧩 Analysis chain

Заменить табы на пробелы в кодовых блоках (MD010)

Встречаются символы табуляции; замените их на 4 пробела для единообразия.

Also applies to: 67-109, 189-201, 276-285


🏁 Script executed:

#!/bin/bash
# Показать строки с табами в файле и их количество
rg -nP "\t" docs/Параметризация.md | tee /dev/stderr | wc -l

Length of output: 259


🏁 Script executed:

#!/bin/bash
# Count and list lines with tabs in docs/Параметризация.md
echo "Count of lines with tabs:"
rg -nP "\t" -n docs/Параметризация.md | wc -l
echo "Lines containing tabs (with line numbers):"
rg -nP "\t" -n docs/Параметризация.md

Length of output: 2712


Replace all tabs with four spaces in code blocks
71 tab characters were detected in docs/Параметризация.md (e.g. lines 35–38, 51, 63, 70–80, etc.); replace each leading tab in code fences with four spaces to satisfy MD010.

🧰 Tools
🪛 markdownlint-cli2 (0.17.2)

35-35: Hard tabs
Column: 1

(MD010, no-hard-tabs)


36-36: Hard tabs
Column: 1

(MD010, no-hard-tabs)


37-37: Hard tabs
Column: 1

(MD010, no-hard-tabs)


38-38: Hard tabs
Column: 1

(MD010, no-hard-tabs)

🤖 Prompt for AI Agents
In docs/Параметризация.md around lines 33–40 (and other reported locations such
as 35–38, 51, 63, 70–80), code block lines use leading tab characters; replace
each leading tab inside fenced code blocks with four space characters so the
code fences conform to MD010; scan the entire file for tabs within ``` fences
and convert only the leading tabs at the start of each code line to four spaces
(preserve non-leading whitespace and the content).


**Параметры для метода бенчмарка, заданные напрямую**

Используйте аннотацию `&Параметры` для указания фиксированного набора параметров для метода бенчмарка. Каждая аннотация задает новый тестовый случай.

```bsl
// Каждый &Параметры определяет новый тестовый случай
&Параметры(50, 100) // Парам1=50, Парам2=100
&Параметры(75, 150) // Парам1=75, Парам2=150
&Бенчмарк
Процедура Бенчмарк(Парам1, Парам2) Экспорт
// Логика бенчмарка
КонецПроцедуры
```

**Параметры для метода бенчмарка, полученные из функции**

Используйте аннотацию `&ИсточникПараметров` для указания функции, возвращающей коллекцию наборов параметров. Функция должна возвращать массив или таблицу значений, где каждая строка соответствует набору параметров.

```bsl
&ИсточникПараметров("ПолучитьПараметрыБенчмарка")
&Бенчмарк
Процедура Бенчмарк(Парам1, Парам2) Экспорт
// Логика бенчмарка
КонецПроцедуры
```

```bsl
// Вариант 1: Таблица значений
Функция ПолучитьПараметрыБенчмарка() Экспорт
Наборы = Новый ТаблицаЗначений;
Наборы.Колонки.Добавить("Парам1");
Наборы.Колонки.Добавить("Парам2");

Набор = Наборы.Добавить();
Набор.Парам1 = 50;
Набор.Парам2 = 100;

Набор = Наборы.Добавить();
Набор.Парам1 = 75;
Набор.Парам2 = 150;

Возврат Наборы;
КонецФункции

// Вариант 2: Массив массивов
Функция ПолучитьПараметрыБенчмарка() Экспорт
Наборы = Новый Массив;

Набор = Новый Массив;
Набор.Добавить(50);
Набор.Добавить(100);
Наборы.Добавить(Набор);

Набор = Новый Массив;
Набор.Добавить(75);
Набор.Добавить(150);
Наборы.Добавить(Набор);

Возврат Наборы;
КонецФункции

// Вариант 3: Массив структур
Функция ПолучитьПараметрыБенчмарка() Экспорт
Наборы = Новый Массив;
Наборы.Добавить(Новый Структура("Парам1, Парам2", 50, 100));
Наборы.Добавить(Новый Структура("Парам1, Парам2", 75, 150));
Возврат Наборы;
КонецФункции
```

### API

1. Параметры для полей класса
**Добавление параметров для поля класса**

```bsl
// Добавление значений для конкретного поля
Конфигурация
.ДобавитьПараметр("АлгоритмХеширования", "MD5")
.ДобавитьПараметр("АлгоритмХеширования", "SHA256");
```

2. Параметры для методов бенчмарка
**Указание источника параметров для поля класса по имени функции**

```bsl
// Создание набора параметров для метода
Конфигурация.ДобавитьИсточникПараметров("АлгоритмХеширования", "ПолучитьАлгоритмыХеширования");
```

Функция `ПолучитьАлгоритмыХеширования` должна быть определена в классе бенчмарка и возвращать коллекцию значений.

**Указание источника параметров для поля класса через делегат**

```bsl
#Использовать delegate

Делегат = Новый Делегат(ЭтотОбъект, "ПолучитьАлгоритмыХеширования");
Конфигурация.ДобавитьИсточникПараметров("АлгоритмХеширования", Делегат);
```

**Добавление параметров для метода бенчмарка**

```bsl
// Набор 1
НаборПараметров = Новый Массив();
НаборПараметров.Добавить(50);
НаборПараметров.Добавить(100);
НаборПараметров.Добавить(200);
ДескрипторБенчмарка.ДобавитьПараметры(НаборПараметров);

// Регистрация набора
// Набор 2
НаборПараметров = Новый Массив();
НаборПараметров.Добавить(75);
НаборПараметров.Добавить(150);
ДескрипторБенчмарка.ДобавитьПараметры(НаборПараметров);
```

## Пример
**Указание источника параметров для метода бенчмарка по имени функции**

```bsl
ДескрипторБенчмарка.ДобавитьИсточникПараметров("ПолучитьПараметрыБенчмарка");
```

Функция `ПолучитьПараметрыБенчмарка` должна быть определена в классе бенчмарка и возвращать коллекцию значений.

**Указание источника параметров для метода бенчмарка через делегат**

```bsl
#Использовать delegate

Делегат = Новый Делегат(ЭтотОбъект, "ПолучитьПараметрыБенчмарка");
ДескрипторБенчмарка.ДобавитьИсточникПараметров(Делегат);
```

## Примеры

### Пример 1: Использование аннотации `&Параметры`

```bsl
&Параметры(5, 0)
Expand All @@ -57,15 +186,100 @@
КонецПроцедуры
```

### Результаты выполнения

| Method | ДобавляемаяЗадержка | Задержка1 | Задержка2 | Mean | StdErr | StdDev | Median | Op/s |
|----------|--------------------:|----------:|----------:|---------:|--------:|----------:|---------:|------:|
| Бенчмарк | 0 | 100 | 10 | 110.8 ms | 39.2 us | 151.77 us | 110.9 ms | 9.022 |
| Бенчмарк | 0 | 100 | 20 | 120.9 ms | 32.3 us | 124.97 us | 120.9 ms | 8.273 |
| Бенчмарк | 0 | 200 | 10 | 210.9 ms | 30.2 us | 116.98 us | 210.9 ms | 4.742 |
| Бенчмарк | 0 | 200 | 20 | 220.9 ms | 32.9 us | 127.50 us | 220.9 ms | 4.527 |
| Бенчмарк | 5 | 100 | 10 | 115.9 ms | 19.0 us | 73.58 us | 115.9 ms | 8.627 |
| Бенчмарк | 5 | 100 | 20 | 125.8 ms | 29.4 us | 114.00 us | 125.8 ms | 7.946 |
| Бенчмарк | 5 | 200 | 10 | 215.9 ms | 26.6 us | 103.01 us | 215.9 ms | 4.632 |
| Бенчмарк | 5 | 200 | 20 | 225.9 ms | 31.2 us | 121.02 us | 226.0 ms | 4.427 |
#### Результаты выполнения

| Method | ДобавляемаяЗадержка | Задержка1 | Задержка2 | Mean | StdErr | StdDev | Op/s |
|----------|--------------------:|----------:|----------:|---------:|---------:|----------:|------:|
| Бенчмарк | 0 | 100 | 10 | 110.9 ms | 20.43 us | 79.13 us | 9.017 |
| Бенчмарк | 0 | 100 | 20 | 120.9 ms | 25.94 us | 100.45 us | 8.273 |
| Бенчмарк | 0 | 200 | 10 | 210.8 ms | 32.87 us | 127.32 us | 4.743 |
| Бенчмарк | 0 | 200 | 20 | 220.9 ms | 21.70 us | 84.04 us | 4.527 |
| Бенчмарк | 5 | 100 | 10 | 115.8 ms | 22.05 us | 85.41 us | 8.632 |
| Бенчмарк | 5 | 100 | 20 | 125.9 ms | 23.00 us | 89.07 us | 7.941 |
| Бенчмарк | 5 | 200 | 10 | 215.9 ms | 17.41 us | 67.43 us | 4.631 |
| Бенчмарк | 5 | 200 | 20 | 225.9 ms | 28.13 us | 108.95 us | 4.427 |

### Пример 2: Использование аннотации `&ИсточникПараметров`

```bsl
&ИсточникПараметров("ПолучитьМножители")
Перем Множитель Экспорт;

&МониторингПамяти
Процедура ПриСозданииОбъекта()
КонецПроцедуры

&Бенчмарк
&ИсточникПараметров("ПолучитьПараметрыБенчмарка")
Процедура БенчмаркФакториала(Число, ТипАлгоритма) Экспорт

Если ТипАлгоритма = "Итеративный" Тогда
Результат = ФакториалИтеративный(Число) * Множитель;
ИначеЕсли ТипАлгоритма = "Рекурсивный" Тогда
Результат = ФакториалРекурсивный(Число) * Множитель;
КонецЕсли;

КонецПроцедуры

// Итеративный алгоритм вычисления факториала
Функция ФакториалИтеративный(Число)
Результат = 1;
Для Сч = 1 По Число Цикл
Результат = Результат * Сч;
КонецЦикла;
Возврат Результат;
КонецФункции

// Рекурсивный алгоритм вычисления факториала
Функция ФакториалРекурсивный(Число)
Если Число <= 1 Тогда
Возврат 1;
КонецЕсли;
Возврат Число * ФакториалРекурсивный(Число - 1);
КонецФункции

// Метод, возвращающий коллекцию множителей
Функция ПолучитьМножители() Экспорт
Множители = Новый Массив();
Множители.Добавить(1);
Множители.Добавить(100);
Возврат Множители;
КонецФункции

// Метод, возвращающий наборы параметров для бенчмарка
Функция ПолучитьПараметрыБенчмарка() Экспорт

Наборы = Новый ТаблицаЗначений();
Наборы.Колонки.Добавить("Число");
Наборы.Колонки.Добавить("ТипАлгоритма");

// Набор 1: Маленькое число, итеративный алгоритм
Набор = Наборы.Добавить();
Набор.Число = 10;
Набор.ТипАлгоритма = "Итеративный";

// Набор 2: Среднее число, рекурсивный алгоритм
Набор = Наборы.Добавить();
Набор.Число = 15;
Набор.ТипАлгоритма = "Рекурсивный";

// Набор 3: Большое число, итеративный алгоритм
Набор = Наборы.Добавить();
Набор.Число = 20;
Набор.ТипАлгоритма = "Итеративный";

Возврат Наборы;

КонецФункции
```

#### Результаты выполнения

| Method | Множитель | Число | ТипАлгоритма | Mean | StdErr | StdDev | Op/s | Allocated |
|--------------------|----------:|------:|--------------|----------:|----------:|----------:|--------:|----------:|
| БенчмаркФакториала | 1 | 10 | Итеративный | 6.489 us | 103.42 ns | 400.56 ns | 154,115 | 1.489 KB |
| БенчмаркФакториала | 1 | 15 | Рекурсивный | 11.853 us | 22.26 ns | 86.20 ns | 84,367 | 4.851 KB |
| БенчмаркФакториала | 1 | 20 | Итеративный | 9.746 us | 51.22 ns | 198.37 ns | 102,607 | 2.272 KB |
| БенчмаркФакториала | 100 | 10 | Итеративный | 6.610 us | 142.17 ns | 550.62 ns | 151,295 | 1.489 KB |
| БенчмаркФакториала | 100 | 15 | Рекурсивный | 12.316 us | 198.95 ns | 770.54 ns | 81,192 | 4.850 KB |
| БенчмаркФакториала | 100 | 20 | Итеративный | 9.768 us | 38.11 ns | 147.59 ns | 102,378 | 2.272 KB |
Loading
Loading