kw to
Контекстное слово — ветки select (§8.7)
Список слов: §1.4
Синтаксис
SelArm = ( "recv" Pattern "from" Expr | "send" Expr "to" Expr | "after" Expr | "else" ) "=>" Expr ;Грамматика: Прил. A
Определяется в
- 1.4 Ключевые слова — Зарезервированные (нельзя использовать как имена)
- 8.7 Каналы и select — tx.send(x) приостанавливается при заполненном буфере; cap
- 8.9 Программная транзакционная память — atomic { … } выполняет тело как сериализуемую транзакцию над TVar.
Примеры
let (tx, rx) = chan<Job>(cap: JOB_QUEUE)
select {
recv job from rx => process(job)
send r to results => sent += 1
after IDLE_TIMEOUT => log.info("idle")
else => tick() // неблокирующий вариант
}static balances: Map<AccountId, TVar<Money>> = …
atomic {
let a = balances[from].get()
check(a >= amt) // иначе транзакция ждёт изменения и повторяется
balances[from].set(a - amt)
balances[to].update(.add(amt))
}— 8.9 Программная транзакционная память