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

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

Изменено 27.05.2019 19:55 alex_public

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

ИД>>>Потому что Rust требует отсутствие гонок данных.

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

То, что я описал, — это классические гонки данных, так что не надо тут глупости писать. Или тебе конкретный код показать что ли? )))

·>

·>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 даже без ассемблера и как это соотносится с твоей цитатой о неопределённом поведение? Может всё же стоит понимать как оно внутри работает, а не рассуждать как о чёрном ящике?

Да, и Rust в этом смысле ничем не отличается от C++ и других системных языков.
Re[21]: Безопасность Rust
Здравствуйте, ·, Вы писали:

ИД>>>Потому что Rust требует отсутствие гонок данных.

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

То, что я описал, — это классические гонки данных, так что не надо тут глупости писать. Или тебе конкретный код показать что ли? )))

·>

·>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 даже без ассемблера и как это соотносится с твоей цитатой о неопределённом поведение? Может всё же стоит понимать как оно внутри работает, а не рассуждать как о чёрном ящике?

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