type X: B;
}
trait B {
}
static STATE: A = Aimpl::new();
https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&gist=93285bb6dacd5f3f3adde79c9a103525
: A это то же самое, что и :dyn A, но безразмерное значение вот так хранить нельзя
Проблема как минимум с тем, что new это не константная функция
я вот так частично решил, но вот с ассоциированным типом никак разобраться не могу https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&gist=19e5559da925fabd7baabbbb0b8c694b
Так под каждый вариант ассоциированного типа нужно по static константе создавать получается?
да, это синглтон в .so библиотеке. а трейт нужен для комфортности разработки
https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&gist=b966e61332706ae2ac59f0b58420bd99
В чем комфорт? Трейты нужны если у тебя >1 реализации
так и есть: sdk предполагает реализацию трейта, в контакте каждой подключаемой либы есть только один синглтон, но в целом это универсальный интерфейс для взаимодействия с базовым процессом
спасибо большое! попробую этот вариант!)
UB при многопоточном использовании. Запускать с мири https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&gist=196d71080c34a3ee14b43e7482b0dc9d
да, не спорю, не использовал раст в многопоточных задачах, поэтому опыта написать правильно нету, сори
там только read ссылки в монопотоке будут использоваться, но на всякий случай можно в rwlock обернуть статик
Для таких случаев есть once_cell: https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&gist=54cbc9343e0bd2088c40dcaf8ee31137 Miri - виртуальная машина, которая проверяет наличие некоторых UB. Есть на плейграунде. Справа - Tools > Miri
я для инициализации его и использую)
спасибо, не знал про miri
Обсуждают сегодня