> For the complete documentation index, see [llms.txt](https://ru.gentee.org/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://ru.gentee.org/stdlib/runtime.md).

# Рантайм

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

* [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* возвращает стек вызовов функций.
