Size: a a a

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

2020 November 23

А⚙

Антон ⚙️ in Rust — русскоговорящее сообществo
Kai Ren
Грамотно юзаем неймспейсы. Банальнейшый пример log::info!() вместо info!() и user::Id вместо UserId. Импорты не бухнут, читаемость не страдает.
@mersinvald вот!
источник

(L

(((Mike Lubinets))) in Rust — русскоговорящее сообществo
Ну... Я так и делаю
источник

(L

(((Mike Lubinets))) in Rust — русскоговорящее сообществo
Уже)
источник

S

Skill in Rust — русскоговорящее сообществo
(((Mike Lubinets)))
Что значит не работает?
there is an associated function with a similar name: num_seconds
источник

r

red75prime in Rust — русскоговорящее сообществo
Skill
есть такой код
fn main() {
   let start = PreciseTime::now();
   // do some work
   let end = PreciseTime::now();
   println!("{:?} seconds for whatever you did.", start.to(end));
}
как можно напечатать затраченное время в таком формате?
6.36456987
PreciseTime из какого крейта?
источник

S

Skill in Rust — русскоговорящее сообществo
red75prime
PreciseTime из какого крейта?
time
источник

r

red75prime in Rust — русскоговорящее сообществo
Skill
time
Там у Duration есть as_seconds_f32()
источник

в🧇

вафель 🧇 in Rust — русскоговорящее сообществo
Skill
ну start.to(end) возвращает Duration, сообственно что с ним дальше делать?
nevermind, я думал ты про точность говоришь
источник

S

Skill in Rust — русскоговорящее сообществo
red75prime
Там у Duration есть as_seconds_f32()
Большое спасибо! В доке только as_seconds находил
источник

(L

(((Mike Lubinets))) in Rust — русскоговорящее сообществo
Skill
Большое спасибо! В доке только as_seconds находил
источник
2020 November 24

KA

Kviring Aleksei in Rust — русскоговорящее сообществo
Staaaaaa
Я все таки за то чтобы не выдумывать магию.  println!() в начале и в конце ф-ции execute вам поможет  :)
так и есть - повторный вызов, и процентов на 90% из-за async в C#. То есть async в C# прерывают мой делегат (на входе или на выходе) и идут по другой ветки кода, который и заходит второй раз в API.


00:05:54.433] (124a94e00) INFO   enter to execute (1)    0: backtrace::backtrace::libunwind::trace
            at /Users/kviring/.cargo/registry/src/github.com-1ecc6299db9ec823/backtrace-0.3.55/src/backtrace/libunwind.rs:90:5
     backtrace::backtrace::trace_unsynchronized
            at /Users/kviring/.cargo/registry/src/github.com-1ecc6299db9ec823/backtrace-0.3.55/src/backtrace/mod.rs:66:5
  1: backtrace::backtrace::trace
            at /Users/kviring/.cargo/registry/src/github.com-1ecc6299db9ec823/backtrace-0.3.55/src/backtrace/mod.rs:53:14
  2: backtrace::capture::Backtrace::create
            at /Users/kviring/.cargo/registry/src/github.com-1ecc6299db9ec823/backtrace-0.3.55/src/capture.rs:176:9
  3: backtrace::capture::Backtrace::new
            at /Users/kviring/.cargo/registry/src/github.com-1ecc6299db9ec823/backtrace-0.3.55/src/capture.rs:140:22
  4: cheetah_relay_client::ffi::execute
  5: cheetah_relay_client::ffi::execute_with_client
  6: _receive

[00:05:54.440] (124a94e00) INFO   enter to execute (2)    0: backtrace::backtrace::libunwind::trace
            at /Users/kviring/.cargo/registry/src/github.com-1ecc6299db9ec823/backtrace-0.3.55/src/backtrace/libunwind.rs:90:5
     backtrace::backtrace::trace_unsynchronized
            at /Users/kviring/.cargo/registry/src/github.com-1ecc6299db9ec823/backtrace-0.3.55/src/backtrace/mod.rs:66:5
  1: backtrace::backtrace::trace
            at /Users/kviring/.cargo/registry/src/github.com-1ecc6299db9ec823/backtrace-0.3.55/src/backtrace/mod.rs:53:14
  2: backtrace::capture::Backtrace::create
            at /Users/kviring/.cargo/registry/src/github.com-1ecc6299db9ec823/backtrace-0.3.55/src/capture.rs:176:9
  3: backtrace::capture::Backtrace::new
            at /Users/kviring/.cargo/registry/src/github.com-1ecc6299db9ec823/backtrace-0.3.55/src/capture.rs:140:22
  4: cheetah_relay_client::ffi::execute
  5: _set_current_client
источник

S

Staaaaaa in Rust — русскоговорящее сообществo
Kviring Aleksei
так и есть - повторный вызов, и процентов на 90% из-за async в C#. То есть async в C# прерывают мой делегат (на входе или на выходе) и идут по другой ветки кода, который и заходит второй раз в API.


00:05:54.433] (124a94e00) INFO   enter to execute (1)    0: backtrace::backtrace::libunwind::trace
            at /Users/kviring/.cargo/registry/src/github.com-1ecc6299db9ec823/backtrace-0.3.55/src/backtrace/libunwind.rs:90:5
     backtrace::backtrace::trace_unsynchronized
            at /Users/kviring/.cargo/registry/src/github.com-1ecc6299db9ec823/backtrace-0.3.55/src/backtrace/mod.rs:66:5
  1: backtrace::backtrace::trace
            at /Users/kviring/.cargo/registry/src/github.com-1ecc6299db9ec823/backtrace-0.3.55/src/backtrace/mod.rs:53:14
  2: backtrace::capture::Backtrace::create
            at /Users/kviring/.cargo/registry/src/github.com-1ecc6299db9ec823/backtrace-0.3.55/src/capture.rs:176:9
  3: backtrace::capture::Backtrace::new
            at /Users/kviring/.cargo/registry/src/github.com-1ecc6299db9ec823/backtrace-0.3.55/src/capture.rs:140:22
  4: cheetah_relay_client::ffi::execute
  5: cheetah_relay_client::ffi::execute_with_client
  6: _receive

[00:05:54.440] (124a94e00) INFO   enter to execute (2)    0: backtrace::backtrace::libunwind::trace
            at /Users/kviring/.cargo/registry/src/github.com-1ecc6299db9ec823/backtrace-0.3.55/src/backtrace/libunwind.rs:90:5
     backtrace::backtrace::trace_unsynchronized
            at /Users/kviring/.cargo/registry/src/github.com-1ecc6299db9ec823/backtrace-0.3.55/src/backtrace/mod.rs:66:5
  1: backtrace::backtrace::trace
            at /Users/kviring/.cargo/registry/src/github.com-1ecc6299db9ec823/backtrace-0.3.55/src/backtrace/mod.rs:53:14
  2: backtrace::capture::Backtrace::create
            at /Users/kviring/.cargo/registry/src/github.com-1ecc6299db9ec823/backtrace-0.3.55/src/capture.rs:176:9
  3: backtrace::capture::Backtrace::new
            at /Users/kviring/.cargo/registry/src/github.com-1ecc6299db9ec823/backtrace-0.3.55/src/capture.rs:140:22
  4: cheetah_relay_client::ffi::execute
  5: _set_current_client
Давайте дальше думать логически - как можно прервать выполнение растового кода в условиях 1 треда - видимо все же body возвращает управление в решетку и происходит повторный вызов execute. тогда спасет синхронизация на шарповой стороне
источник

KA

Kviring Aleksei in Rust — русскоговорящее сообществo
body возвращает, там есть callback в C# код из него, он и прерывается
источник

KA

Kviring Aleksei in Rust — русскоговорящее сообществo
это происходит в методе _receive
источник

KA

Kviring Aleksei in Rust — русскоговорящее сообществo
в целом все понятно, я просто не специалист в C#, поэтому не подумал о том что async вот так могут прервать делагат.
источник

KA

Kviring Aleksei in Rust — русскоговорящее сообществo
Спасибо всем, причина как всегда банальна 🙂
источник

S

Staaaaaa in Rust — русскоговорящее сообществo
Kviring Aleksei
в целом все понятно, я просто не специалист в C#, поэтому не подумал о том что async вот так могут прервать делагат.
Шарп тут не при чем -  нельзя вызывать произвольный код внутри крит секции ) тут на каком языке не пиши все приметы для дедлока .
источник

S

Staaaaaa in Rust — русскоговорящее сообществo
раз уж мы про гейм дев то так тоже нельзя if(player.lock()) { if (enemy.lock()){fight(player,enemy); }}  успешно поработает какое-то время а потом бабах )
источник

KA

Kviring Aleksei in Rust — русскоговорящее сообществo
Staaaaaa
Шарп тут не при чем -  нельзя вызывать произвольный код внутри крит секции ) тут на каком языке не пиши все приметы для дедлока .
это да 🙂 хотя так и прийдется оставить и не вызывать API из async. На самом деле только тесты так и вызывают, особенность Unity для [UnityTest], в основном коде такого не будет (наверное)
источник

KA

Kviring Aleksei in Rust — русскоговорящее сообществo
Staaaaaa
Шарп тут не при чем -  нельзя вызывать произвольный код внутри крит секции ) тут на каком языке не пиши все приметы для дедлока .
я 10 лет писал сервера на java для реалтайм игр под большой нагрузкой - мы такого на начальном этапе разработки кучами ловили в ядре сервера, потом стали мудрее - и вот опять 🙂 Хотя как обойтись без Mutex в библиотеки я не знаю, кроме unsafe наверное.
источник