Size: a a a

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

2020 November 12

MS

Mikola Summer Duck in RU Rust GameDev — русскоговорящее сообщество
М'ха-ха-ха-ха! Вот мы и дошли до главного субъекта моих страданий!
источник

MS

Mikola Summer Duck in RU Rust GameDev — русскоговорящее сообщество
В общем у экзекутора есть метод tick(), в который ты можешь передать мутабельную ссылку на внешний стейт.
источник

MS

Mikola Summer Duck in RU Rust GameDev — русскоговорящее сообщество
Эту ссылку ты можешь достать внутри фьючера через специальный Conduit, чекающий типы и лайфтаймы уже в рантайме.
источник

MS

Mikola Summer Duck in RU Rust GameDev — русскоговорящее сообщество
К сожалению Conduit::get требует явно указывать тип каждый раз, и это неизбежно в текущем расте.
источник

MS

Mikola Summer Duck in RU Rust GameDev — русскоговорящее сообщество
Будь система типов чуть посильнее можно было бы избавиться от рантаймовых проверок в принципе.
источник

MS

Mikola Summer Duck in RU Rust GameDev — русскоговорящее сообщество
(вся магия в state.rs, спасибо ребятам из нескольких растодискордов и телеграмовского Rust Async)
источник

MS

Mikola Summer Duck in RU Rust GameDev — русскоговорящее сообщество
(и г-ну @WaffleLapkin, да)
источник

MS

Mikola Summer Duck in RU Rust GameDev — русскоговорящее сообщество
А ну и таски выполняются только во время вызова tick()
источник

MS

Mikola Summer Duck in RU Rust GameDev — русскоговорящее сообщество
Но при этом потенциально могут выполняться параллельно.
источник

R

Roman in RU Rust GameDev — русскоговорящее сообщество
Звучит довольно круто
источник

MS

Mikola Summer Duck in RU Rust GameDev — русскоговорящее сообщество
источник

в🧇

вафель 🧇 in RU Rust GameDev — русскоговорящее сообщество
А ты мири гонял? Меня до сих пор напрягает эта тема с проверкой лайфтаймов в рантайме
источник

MS

Mikola Summer Duck in RU Rust GameDev — русскоговорящее сообщество
Ну там же не на самом деле лайфтаймы проверяются. Кондуит хранит в себе ид экзекутора и позволяет сделать .гет() только если его экзекутор в данный момент занимает поток.
источник

MS

Mikola Summer Duck in RU Rust GameDev — русскоговорящее сообщество
источник

MS

Mikola Summer Duck in RU Rust GameDev — русскоговорящее сообщество
Так мы защищаемся от случая когда мы сделали Executor::get_conduit(), получили кондуит, но не передали его во фьючер. Или передали во фьючер но из другого экзекутора. Такие случаи будут паниковать.
источник

R

Roman in RU Rust GameDev — русскоговорящее сообщество
К сожалению мири не отловит unsoundness. То есть если в коде прямо сейчас проблемы нет, то мири молчит. Даже если safe кодом можно вызвать UB
источник

MS

Mikola Summer Duck in RU Rust GameDev — русскоговорящее сообщество
Ну, можно попытаться половить это тестами И мири.
источник

MS

Mikola Summer Duck in RU Rust GameDev — русскоговорящее сообщество
Но я не уверен что оно под мири запустится.
источник

в🧇

вафель 🧇 in RU Rust GameDev — русскоговорящее сообщество
Roman
К сожалению мири не отловит unsoundness. То есть если в коде прямо сейчас проблемы нет, то мири молчит. Даже если safe кодом можно вызвать UB
Ну тоже верно
источник

в🧇

вафель 🧇 in RU Rust GameDev — русскоговорящее сообщество
Впрочем что-то отловить может, даже если всё работает
источник