Информация об изменениях

Сообщение Re[22]: Безопасность Rust от 27.05.2019 21:37

Изменено 28.05.2019 11:28 ·

Re[22]: Безопасность Rust
Здравствуйте, alex_public, Вы писали:

_>>>Это на самом деле тоже иллюзия, даже без unsafe. Потому как гонки могут быть и в рамках одного потока (сопрограммы, лёгкие потоки и т.п.), а Rust как я понимаю это даже не пытается отслеживать.

_>·>Ты не понимаешь термины. Иван говорит об отсутствии _гонок данных_ (data race), а ты говоришь о гонках вообще.
_>То, что я описал, — это классические гонки данных, так что не надо тут глупости писать. Или тебе конкретный код показать что ли? )))
Ты описал какое-то своё понимание. Я тебе привёл цитату того, что под этим понимает, например, стандарт Плюсов. То что ты описал это называется race condition.
Код показывай, конечно.

_>·>

_>·>The memory model defined in the C11 and C++11 standards uses the term "data race" for a race condition caused by potentially concurrent operations on a shared memory location, of which at least one is a write. A C or C++ program containing a data race has undefined behavior.
_>·>

_>·>Так вот. В C++ это undefined behaviour, в rust — ошибка компиляции.
_>Детский сад какой-то. Ты вообще понимаешь в чём собственно проблема с параллельным доступом к одной памяти?
Да, понимаю.

_>В чём смысл атомарности и нужна ли она например для int'ов?

В случае конкурентного чтения и записи, например, атомарость говорит о том, что читатель увидит либо старое значение, до записи, либо новое, после записи и ничто другое. Да, атомарность нужна для интов.

_>Как это всё решает например CAS, который доступен в том же C++11 даже без ассемблера

Что конкретно "всё"?

_>и как это соотносится с твоей цитатой о неопределённом поведение?

Никак не соотносится. Atomic не создают data race и не обладают undefined behaviour.

_>Может всё же стоит понимать как оно внутри работает, а не рассуждать как о чёрном ящике?

Да, стоит.

_>Да, и Rust в этом смысле ничем не отличается от C++ и других системных языков: https://doc.rust-lang.org/nomicon/races.html — там вроде как есть и про Undefined Behavior и про то, что гарантий нет (причём речь не про unsafe).

"A data race has Undefined Behavior, and is therefore impossible to perform in Safe Rust." собственно что мы тут тебе и талдычим. Об чём спор-то?
Re[22]: Безопасность Rust
Здравствуйте, alex_public, Вы писали:

_>>>Это на самом деле тоже иллюзия, даже без unsafe. Потому как гонки могут быть и в рамках одного потока (сопрограммы, лёгкие потоки и т.п.), а Rust как я понимаю это даже не пытается отслеживать.

_>·>Ты не понимаешь термины. Иван говорит об отсутствии _гонок данных_ (data race), а ты говоришь о гонках вообще.
_>То, что я описал, — это классические гонки данных, так что не надо тут глупости писать. Или тебе конкретный код показать что ли? )))
Ты описал какое-то своё понимание. Я тебе привёл цитату того, что под этим понимает, например, стандарт Плюсов. То что ты описал это называется race condition.
Код показывай, конечно.

_>·>

_>·>The memory model defined in the C11 and C++11 standards uses the term "data race" for a race condition caused by potentially concurrent operations on a shared memory location, of which at least one is a write. A C or C++ program containing a data race has undefined behavior.
_>·>

_>·>Так вот. В C++ это undefined behaviour, в rust — ошибка компиляции.
_>Детский сад какой-то. Ты вообще понимаешь в чём собственно проблема с параллельным доступом к одной памяти?
Да, понимаю.

_>В чём смысл атомарности и нужна ли она например для int'ов?

В случае конкурентного чтения и записи, например, атомарость говорит о том, что читатель увидит либо старое значение, до записи, либо новое, после записи и ничто другое. Да, атомарность нужна для интов.

_>Как это всё решает например CAS, который доступен в том же C++11 даже без ассемблера

Что конкретно "всё"?

_>и как это соотносится с твоей цитатой о неопределённом поведение?

Никак не соотносится. Atomic не создают data race и не обладают undefined behaviour.

_>Может всё же стоит понимать как оно внутри работает, а не рассуждать как о чёрном ящике?

Да, стоит.

_>Да, и Rust в этом смысле ничем не отличается от C++ и других системных языков: https://doc.rust-lang.org/nomicon/races.html — там вроде как есть и про Undefined Behavior и про то, что гарантий нет (причём речь не про unsafe).

"A data race has Undefined Behavior, and is therefore impossible to perform in Safe Rust." собственно что мы тут тебе и талдычим. В то же время "C or C++ program containing a data race has undefined behavior.". В этом и отличие Rust от C/C++. Об чём спор-то?