Size: a a a

2020 May 02

RP

Roman Proskuryakov in rust_offtopic
читатель, читай внимательнее.
источник

EG

Emmanuel Goldstein in rust_offtopic
Roman Proskuryakov
> В третьем пункте — исходный код примера был заменён на другой код,

нет.

> По факту, да, докладчик прав — код на Rust трогает память, код на C++ не трогает.

докладчик пишет boost::stacktrace. когда он своими усилиями введет это в стандарт, С++ везде будет трогать память как раст. тупо потому что это соглашение о вызовах, а он сравнивает разный код (ud2 vs rust backtrace)
> когда он своими усилиями введет это в стандарт
Когда введёт, тогда и поговорим.
Имеет смысл сравнивать текущее пололжение дел.
источник

NL

Nick Linker in rust_offtopic
Victor Sapiens
@Psilon Я тут на Akka Net пилю фигню и такое дело. Хотел строго типизированный актор сделать. Вроде есть там TypedActor и все такое. Но блин, на нем написано что он Деприкейтед. Шито тогда вместо него юзать и вообще как-то можно вместо нетипихированного IActorRef получить типизированный интерфейс как в Orleans?
Типизированные акторы не особо спасают, потому что основная проблема акторов не в нетипизированных сообщениях (хотя и в них тоже), а в том, что акторы образуют граф "Санта-Барбара, все со всеми", и акторную систему невозможно понимать по кусочкам, а приходится всю её грызть целиком.

Поэтому например в оригинальной Акке идут в сторону упорядочения и упрощения графа зависимостей.
Рекомендую посмотреть в сторону Akka Streams (но я не в курсе, есть ли аналог в Akka.Net).
источник

RP

Roman Proskuryakov in rust_offtopic
Emmanuel Goldstein
> когда он своими усилиями введет это в стандарт
Когда введёт, тогда и поговорим.
Имеет смысл сравнивать текущее пололжение дел.
текущее положение дел - соглашение о вызовах x86-64
источник

r

red75prime in rust_offtopic
Emmanuel Goldstein
Там уже в комментах за меня показали, в целом.
Во втором пункте — «это баг не в rustc, это баг в LLVM» — юзеру на это сказочно пофиг, компилируя Rust ты получишь неопределённое поведение в том случае, который в Rust неопределённым поведением не считается.
В третьем пункте — исходный код примера был заменён на другой код, и далее сравнивался его ассемблерный листинг. По факту, да, докладчик прав — код на Rust трогает память, код на C++ не трогает. Тут следовало бы в качестве аргумента показать panic=abort или сказать: «в C++ это даёт UB в таком-то случае, если для вас это допустимо, то есть функция unreachable_unchecked!(), которая в явном виде сделает то же самое»
В четвёртом пункте опять код заменяется на другой, но там докладчик тоже хорош — делать вывод про быстрее/медленнее из одного сниппета это идиотизм.
В пятом пункте подмена утверждения. Представим, что у тебя есть старая проприетарная кодовая база на C — чтобы перейти на C++ тебе нужно приложить примерно ноль усилий, чтобы перейти на Rust — нужно писать обёртки. Наличие готовых обёрток над некоторыми библиотеками, сглаживает её (для этих библиотек), но не решает. Даже если обёртка есть, её нужно поддерживать в актуальном состоянии, что тоже дополнительная работа.
В шестом пункте спорно. unsafe { }, теоретически, действительно даёт возможность сделать только ограниченное количество вещей, но на практике ты можешь в ансейфе легко сломать любой инвариант, фактически «отключив» проверку. Вот, например, мгновенный UB — два мутабельных референса на одну точку:
let mut a = 0;
let b = &mut a as *mut i32;
let c = &mut a;
unsafe {
   let d: &mut i32 = std::mem::transmute(c);
}
По шестому пункту. UB - это не "отключение проверок", это UB.
источник

EG

Emmanuel Goldstein in rust_offtopic
Миф: «трогает память»
Да, трогает память — у тебя в начале появляется push rax, в С++ не появляется. Этот тезис не опровергнут никак.
источник

RP

Roman Proskuryakov in rust_offtopic
лол :D
источник

RP

Roman Proskuryakov in rust_offtopic
конечно появляется
источник

EG

Emmanuel Goldstein in rust_offtopic
Кстати, выглядит, как будто при фейле первой проверки, Rust тоже благополучно улетает в ud2.
источник

RP

Roman Proskuryakov in rust_offtopic
у меня объясняется причина его появления. она такая же, как и в С++
источник

EG

Emmanuel Goldstein in rust_offtopic
А, нет, вру.
источник

EG

Emmanuel Goldstein in rust_offtopic
Roman Proskuryakov
у меня объясняется причина его появления. она такая же, как и в С++
В C++ на том же коде он не появляется.
То, что появляется на другом коде с искуственно добавленной функцией — никак не опровергает исходный тезис.
источник

r

red75prime in rust_offtopic
red75prime
По шестому пункту. UB - это не "отключение проверок", это UB.
Это как аргументировать, что INT_MAX+1 отключает RAII
источник

RP

Roman Proskuryakov in rust_offtopic
Emmanuel Goldstein
Там уже в комментах за меня показали, в целом.
Во втором пункте — «это баг не в rustc, это баг в LLVM» — юзеру на это сказочно пофиг, компилируя Rust ты получишь неопределённое поведение в том случае, который в Rust неопределённым поведением не считается.
В третьем пункте — исходный код примера был заменён на другой код, и далее сравнивался его ассемблерный листинг. По факту, да, докладчик прав — код на Rust трогает память, код на C++ не трогает. Тут следовало бы в качестве аргумента показать panic=abort или сказать: «в C++ это даёт UB в таком-то случае, если для вас это допустимо, то есть функция unreachable_unchecked!(), которая в явном виде сделает то же самое»
В четвёртом пункте опять код заменяется на другой, но там докладчик тоже хорош — делать вывод про быстрее/медленнее из одного сниппета это идиотизм.
В пятом пункте подмена утверждения. Представим, что у тебя есть старая проприетарная кодовая база на C — чтобы перейти на C++ тебе нужно приложить примерно ноль усилий, чтобы перейти на Rust — нужно писать обёртки. Наличие готовых обёрток над некоторыми библиотеками, сглаживает её (для этих библиотек), но не решает. Даже если обёртка есть, её нужно поддерживать в актуальном состоянии, что тоже дополнительная работа.
В шестом пункте спорно. unsafe { }, теоретически, действительно даёт возможность сделать только ограниченное количество вещей, но на практике ты можешь в ансейфе легко сломать любой инвариант, фактически «отключив» проверку. Вот, например, мгновенный UB — два мутабельных референса на одну точку:
let mut a = 0;
let b = &mut a as *mut i32;
let c = &mut a;
unsafe {
   let d: &mut i32 = std::mem::transmute(c);
}
Тебя задевает, что ты и Антон работаете в одной компании?
источник

DF

Dollar Føølish in rust_offtopic
Хех
источник

RP

Roman Proskuryakov in rust_offtopic
вернее не так
источник

EG

Emmanuel Goldstein in rust_offtopic
источник

p

polunin.ai in rust_offtopic
Emmanuel Goldstein
В C++ на том же коде он не появляется.
То, что появляется на другом коде с искуственно добавленной функцией — никак не опровергает исходный тезис.
опровергает тезис что с++ не трогает память
источник

RP

Roman Proskuryakov in rust_offtopic
что я написал статью, опровергающую тезисы Антона, а ты и Антон работаете в одной компании, поэтому это тебя задевает?
источник

p

polunin.ai in rust_offtopic
потому что трогает
источник