# Рантайм

Здесь описаны функции для работы с виртуальной машиной во время выполнения скрипта.

* [error( int id, str text, anytype pars... )](/stdlib/runtime.md#error-int-id-str-text-anytype-pars)
* [ErrID( error err ) int](/stdlib/runtime.md#errid-error-err-int)
* [ErrText( error err ) str](/stdlib/runtime.md#errtext-error-err-str)
* [ErrTrace( error err ) arr.trace](/stdlib/runtime.md#errtrace-error-err-arr-trace)
* [exit( int code )](/stdlib/runtime.md#exit-int-code)
* [Progress( int id inc )](/stdlib/runtime.md#progress-int-id-inc)
* [ProgressEnd( int id )](/stdlib/runtime.md#progressend-int-id)
* [ProgressStart( int total ptype, str src dest ) int](/stdlib/runtime.md#progressstart-int-total-ptype-str-src-dest-int)
* [Trace() arr.trace](/stdlib/runtime.md#trace-arr-trace)

## Типы

### trace

Тип *trace* служит для хранения информации о вызове функции и имеет следующие поля:

* **str Path** - имя файла
* **str Entry** - текущая функция
* **str Func** - вызываемая функция
* **int Line** - строка в исходном коде
* **int Pos** - позиция в строке, где произошёл вызов

## Функции

### error(int id, str text, anytype pars...)

Функция *error* генерирует ошибку времени выполнения скрипта.

* *id* - код ошибки,
* *text* - текст ошибки,
* *pars* - необязательные параметры. Если они указаны, то *text* должен содержать соответствующий шаблон

  как в функции [Format](https://gentee.github.io/docs-gentee-ru/stdlib/string#formatstr-s-anytype-args-str).

```go
    error(10, `Error message %{ 10 }`)
    error(10, `Error message %d`, 10)
```

### ErrID(error err) int

Функция *ErrID* возвращает идентификатор ошибки *err*. Эта функция может использоваться внутри конструкции **try-catch** для обработки ошибок.

```go
run {
  try {
    .....
    error(101, `oooops`)
  }
  catch err {
    if ErrID(err) == 101 {
      recover
    } elif ErrID(err) < 100 {
      retry
    }
  }
}
```

### ErrText(error err) str

Функция *ErrText* возвращает текст ошибки *err*. Эта функция может использоваться внутри конструкции **try-catch** для обработки ошибок.

### ErrTrace(error err) arr.trace

Функция *ErrTrace* возвращает стек вызовов функций на момент возникновения ошибки *err*. Эта функция может использоваться внутри конструкции **try-catch** для обработки ошибок.

### exit(int code)

Функция *exit* прекращает работу скрипта. Функция может быть вызвана в любом потоке. Скрипт возвращает значение *code*.

```go
func ok(int par) int {
  if par == 0 : exit(0)
  return 3 * par
}
run int {
  int sum
  for i in 10..-10 {
    sum += ok(i)
  }
  return sum
}
```

### Progress( int id inc )

Функция *Progress* увеличивает величину счётчика процесса на значение параметра *inc*. *id* - идентификатор прогресс-бара возвращённый функцией *ProgressStart*. Функция *Progress* вызывает Go функцию *ProgressFunc*, которая должна быть определена в настройках при запуске скрипта.

```go
  int total = 200
  int prog = ProgressStart(total, 100, `counter`, ``)
  for i in 1..5 {
    Progress(prog, 40)
  }
  ProgressEnd(prog)
```

### ProgressEnd( int id )

Функция *ProgressEnd* удаляет счётчик процесса с идентификатором *id*.

### ProgressStart( int total ptype, str src dest ) int

Функция *ProgressStart* создаёт счётчик процесса и возвращает его идентификатор. *total* - максимальная величина счётчика. *ptype* - тип счётчика, может быть любое число. *src* - имя источника. *dest* - имя целевого объекта. Функции для работы с прогрессом-баром ничего не отображают, они вызывают функцию *ProgressFunc*, которая должна быть определена в [настройках](/golang/reference.md) при запуске скрипта. В функции *ProgressFunc* вы можете отображать состояние процесса удобным для вас способом. После окончания работы с данным счётчиком необходимо вызвать функцию *ProgressEnd* для его удаления.

### Trace() arr.trace

Функция *Trace* возвращает стек вызовов функций.


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://ru.gentee.org/stdlib/runtime.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
