OxL Справочник OxL
РусскийEnglish

kw spawn

Зарезервированное слово

Список слов: §1.4

Синтаксис

ebnf
Primary     = Literal | Path | "it" | "self" | "(" Expr { "," Expr } ")" | ListLit | MapLit
            | StructLit | Lambda | Block | If | Match | For | While | Loop | Scope | Select | Query
            | "spawn" ( Postfix | Block ) | "await" Unary | "atomic" [ "(" Args ")" ] Block
            | "return" [ Expr ] | "fail" Expr | "yield" Expr | "respond" Expr | "break" [ Label ] [ Expr ]
            | "continue" [ Label ] | "emit" Path "(" Expr ")" | "unsafe" Block | "blocking" Block
            | "comptime" Block | "." Ident [ "(" [ Args ] ")" ] ;

Грамматика: Прил. A

Определяется в

  • 10.4 Broadcast — локальная рассылка — Broadcast<T> доставляет каждый опубликованный элемент всем текущим подписчикам.
  • 8.3 Task — Task<T, E> — ленивое вычисление.
  • 8.5 Структурная конкурентность — spawn допустим только лексически внутри scope { …
  • 8.8 Локальные акторы — Сообщения обрабатываются строго по одному в порядке поступления от каждого отправителя.
  • 5.7 Лямбды и замыкания — .field и .method(args) в позиции аргумента — сокращение лямбды с одним параметром.
  • 6.3 Вызов приостанавливаемых функций — Вызов приостанавливаемой функции в позиции инструкции или обычного выражения выполняется немедленно; текущая задача ждёт результат (неявный
  • 7.3 Передача между задачами — Значение передаваемо между задачами (в spawn, в канал, в сообщение актора), если его тип не содержит Rc, заимствований и не-sync ячеек с вну
  • 8.4 Цепочки — Цепочка связывает асинхронные шаги так, что выполняется либо вся цепочка, либо возвращается первая необработанная ошибка.

Примеры

oxl
let prices = Broadcast<Tick>(buffer: TICK_BUFFER, slow: .DropOldest, replay: 1)

scope {
  spawn { for await t in Exchange.feed() { prices.publish(t) } }
  spawn { for await t in prices.subscribe() { ui.render(t) } }
  spawn { for await t in prices.subscribe() { stats.add(t) } }
}

impl Market {
  rpc ticks() -> stream<Shared<Tick>, Lagged> => prices.subscribe()   // каждому клиенту
}

— 10.4 Broadcast — локальная рассылка

oxl
let (a, b) = scope {
  let ha = spawn loadA()
  let hb = spawn loadB()
  (ha.join()?, hb.join()?)
}

— 8.5 Структурная конкурентность

Связанные диагностики

task-reuse, spawn-outside-scope, actor-cycle, send, it-outside-chain

См. также