Size: a a a

Rust — русскоговорящее сообществo

2020 September 01

ΑZ

Αλεχ Zhukovsky in Rust — русскоговорящее сообществo
Роман
Это кортежная структура
Ньютайп мне нравится больше. Благо в других языках он тоже есть, поэтому аналогия лучше
источник

в🧇

вафель 🧇 in Rust — русскоговорящее сообществo
ilya sheprut
Подскажите пожалуйста, как можно заставить компилироваться этот код с unsized структурами?

https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&gist=b495240d1ac8b8adea4b6e604e0c2b6c
ref-cast крейт
источник

Р

Роман in Rust — русскоговорящее сообществo
Между type TupleType = (...) и struct MyTuple(...) есть разница
источник

в🧇

вафель 🧇 in Rust — русскоговорящее сообществo
Роман
Между type TupleType = (...) и struct MyTuple(...) есть разница
Только первое это не ньютайп, это алиас
источник

Р

Роман in Rust — русскоговорящее сообществo
¯\_(ツ)_/¯
источник

AV

Andrey Vlasov in Rust — русскоговорящее сообществo
Кто-нибудь писал гуи с помощью серво? Мб статьи какие-то видели
источник

ΑZ

Αλεχ Zhukovsky in Rust — русскоговорящее сообществo
вафель 🧇
Ну evmap утверждает что её имплементация не требует оверхэда на синхронизацию, кроме момента когда ты "обновляешь" мапу (явно через WriteHandle::refresh)

Если у тебя обновления на 1% мапы, то думаю это самое то
> For read-heavy workloads, the scheme used by this module is particularly useful. Writers can afford to refresh after every write, which provides up-to-date reads, and readers remain fast as they do not need to ever take locks.
ну короч есть проблема с evmap

error[E0277]: `std::cell::Cell<()>` cannot be shared between threads safely
 --> src\server.rs:33:18
  |
33 |     let server = HttpServer::new(move || {
  |                  ^^^^^^^^^^^^^^^ `std::cell::Cell<()>` cannot be shared between threads safely
  |
  = help: within `services::company_settings_service::CompanySettingsService`, the trait `std::marker::Sync` is not implemented for `std::cell::Cell<()>`
  = note: required because it appears within the type `std::marker::PhantomData<std::cell::Cell<()>>`
  = note: required because it appears within the type `evmap::ReadHandle<uuid::Uuid, services::company_settings_service::CompanyPresetInfo>`
  = note: required by `actix_web::HttpServer::<F, I, S, B>::new`
источник

ΑZ

Αλεχ Zhukovsky in Rust — русскоговорящее сообществo
как мне из актикс хендлеров читать эту мапу? Стаковерфлоу предлагает мьютекс, но нахера тогда мутить всю эту бодягу с локфри мне неясно
источник

Ct

Casual tears in Rust — русскоговорящее сообществo
Αλεχ Zhukovsky
ну короч есть проблема с evmap

error[E0277]: `std::cell::Cell<()>` cannot be shared between threads safely
 --> src\server.rs:33:18
  |
33 |     let server = HttpServer::new(move || {
  |                  ^^^^^^^^^^^^^^^ `std::cell::Cell<()>` cannot be shared between threads safely
  |
  = help: within `services::company_settings_service::CompanySettingsService`, the trait `std::marker::Sync` is not implemented for `std::cell::Cell<()>`
  = note: required because it appears within the type `std::marker::PhantomData<std::cell::Cell<()>>`
  = note: required because it appears within the type `evmap::ReadHandle<uuid::Uuid, services::company_settings_service::CompanyPresetInfo>`
  = note: required by `actix_web::HttpServer::<F, I, S, B>::new`
Я evmap не пользовался, но вижу что ReadHandle Send, но не Sync и при этом имплементит Clone. Что-то мешает каждому треду свой ReadHandle дать?
источник

ΑZ

Αλεχ Zhukovsky in Rust — русскоговорящее сообществo
Casual tears
Я evmap не пользовался, но вижу что ReadHandle Send, но не Sync и при этом имплементит Clone. Что-то мешает каждому треду свой ReadHandle дать?
хм
источник

ΑZ

Αλεχ Zhukovsky in Rust — русскоговорящее сообществo
Casual tears
Я evmap не пользовался, но вижу что ReadHandle Send, но не Sync и при этом имплементит Clone. Что-то мешает каждому треду свой ReadHandle дать?
точняк, пасибО0
источник

в🧇

вафель 🧇 in Rust — русскоговорящее сообществo
А кто-нибудь видел RFC на тему клонирования !Sized значений?
источник

Э

Эрик in Rust — русскоговорящее сообществo
вафель 🧇
А кто-нибудь видел RFC на тему клонирования !Sized значений?
Вроде был какой-то BoxedClone крейт, не?
источник

в🧇

вафель 🧇 in Rust — русскоговорящее сообществo
Эрик
Вроде был какой-то BoxedClone крейт, не?
DynClone есть, но он достаточно костыльный
источник

Э

Эрик in Rust — русскоговорящее сообществo
Ну а как иначе? Clone::clone возвращает Self, а раст на функциях только Sized пропускает внутрь и наружу.
источник

в🧇

вафель 🧇 in Rust — русскоговорящее сообществo
Эрик
Ну а как иначе? Clone::clone возвращает Self, а раст на функциях только Sized пропускает внутрь и наружу.
dyn-clone использует макрос, можно без этого
источник

Э

Эрик in Rust — русскоговорящее сообществo
вафель 🧇
dyn-clone использует макрос, можно без этого
Там есть функции clone и clone_box, если что.
источник

Э

Эрик in Rust — русскоговорящее сообществo
Да и макрос там только для удобного impl Clone for MyStruct: DynClone.
источник

в🧇

вафель 🧇 in Rust — русскоговорящее сообществo
Эрик
Там есть функции clone и clone_box, если что.
> clone_trait_object!
источник

Э

Эрик in Rust — русскоговорящее сообществo
Можешь руками этот impl писать.
источник