Size: a a a

2021 February 27

EG

Emmanuel Goldstein in rust_offtopic
Там целых 6 рефкапов зато
iso ≈ T
val ≈ &T
ref ≈ &mut T
box ≈ &T
trn ≈ wtf
tag = ZST
источник

EG

Emmanuel Goldstein in rust_offtopic
Как работают box и trn я пока не понял
источник

EG

Emmanuel Goldstein in rust_offtopic
Кажется, trn гарантирует, что другие акторы это значение не могут трогать вообще, другие места в том же акторе не могут менять, а ты можешь делать что хочешь
источник

EG

Emmanuel Goldstein in rust_offtopic
box гарантирует, что другие акторы не могут писать, и ты сам тоже не можешь писать, но может писать кто-то, кто держит trn в том же акторе
источник

EG

Emmanuel Goldstein in rust_offtopic
Но так как актор обрабатывает только одно сообщение за раз, то ты можешь быть уверен, что box никто другой сейчас не трогает
источник

EG

Emmanuel Goldstein in rust_offtopic
Короче, это то же самое что в расте, помноженное на локальность/глобальность относительно акторов

iso — owned
val/ref — &T/&mut T глобально
box/trn — &T/&mut T локально по актору
tag — нельзя делать ничего, кроме как сравнивать идентичность
источник

p

polunin.ai in rust_offtopic
Emmanuel Goldstein
Там целых 6 рефкапов зато
iso ≈ T
val ≈ &T
ref ≈ &mut T
box ≈ &T
trn ≈ wtf
tag = ZST
Прям как Олег предлагал для кнорпеля делать
источник

EG

Emmanuel Goldstein in rust_offtopic
Emmanuel Goldstein
Короче, это то же самое что в расте, помноженное на локальность/глобальность относительно акторов

iso — owned
val/ref — &T/&mut T глобально
box/trn — &T/&mut T локально по актору
tag — нельзя делать ничего, кроме как сравнивать идентичность
Вау
И ещё, кажется, рефкапы умеют в циклические структуры данных
источник

EG

Emmanuel Goldstein in rust_offtopic
Правда, с GC это не так впечатляет, конечно
источник

EG

Emmanuel Goldstein in rust_offtopic
actor Main
 let env: Env
 let foo: Array[String] val

 new create(env': Env) =>
   env = env'
   foo = ["Hello"]

 fun get_foo(): Array[String] iso =>
   recover foo end

Всё, я снова ничего не понимаю. Как я получил owned-значение из ссылки?
источник

KR

Kai Ren in rust_offtopic
Ну я так понимаю оно просто скопировалось.
источник

EG

Emmanuel Goldstein in rust_offtopic
Kai Ren
Ну я так понимаю оно просто скопировалось.
Нет
источник

EG

Emmanuel Goldstein in rust_offtopic
Я проверил — get_foo() is foo, это один и тот же объект
источник

KR

Kai Ren in rust_offtopic
А foo не деструктнулся при этом?
источник

EG

Emmanuel Goldstein in rust_offtopic
Kai Ren
А foo не деструктнулся при этом?
Нет, тогда бы он остался пустым
источник

EG

Emmanuel Goldstein in rust_offtopic
Это было бы неинициализированным значением
источник

EG

Emmanuel Goldstein in rust_offtopic
Кроме того, мув требует явно указать consume
источник

EG

Emmanuel Goldstein in rust_offtopic
Судя по всему, get_foo() возвращает Array[String] iso!, а не Array[String] iso
источник

KR

Kai Ren in rust_offtopic
Э?
источник

KR

Kai Ren in rust_offtopic
факториал?)
источник