Cuno
Почему странный? Допустим я thread-safe контейнер написал.
Cuno
и засунул его в Arc
Cuno
почему чтобы его изменять, я должен мьютекс использовать?
Anonymous
засунул thread-safe контейнер в thread-safe контейнер?
Cuno
Arc не thread-safe
Cuno
Ну, не совсем
Anonymous
как это
Cuno
Оно не делает внутренний T thread-safe
Cuno
как это делает мьютекс
Anonymous
thread-safe?
Anonymous
мютекс это примитив для защиты общей информации
Cuno
Так?
Anonymous
причем тут thread safety?
Cuno
Arc не защищает эту самую "общую информацию". Он только позволяет разделенное владение нескольким тредам.
Anonymous
у тебя проблема с терминами
Anonymous
но ответ на твой вопрос это Arc::into_raw
Cuno
fn into_raw(this: Arc<T>) -> *const T
Я не знаком с сырыми указателями в Rust, но опыт в C++ подсказывает мне, что по этому указателю изменять данные нельзя.
Anonymous
получется, что Mutex задает свой get_mut и он вызывается вместо того, что у Arc
Vladimir
@d34d10cc всё просто. Нужно сначала определить, что такое Thread - safe. В раст это понятие разделили на два типажа:
Send - можно безопасно отдавать владение другому потоку.
Sync - можно безопасно иметь доступ по ссылке к одному объекту.
Т.е. большинство вкладывают в термит thread-safe коллекций именно реализацию Sync типажа.
Теперь, что касаемо &mut T. Тебе он не нужен. Реализация Thread-safe контейнера, должна иметь интерфейс в котором изменение состояния будет происходить по обычной ссылке & T
Cuno
> Реализация Thread-safe контейнера, должна иметь интерфейс в котором изменение состояния будет происходить по обычной ссылке & T
Вот это немного странно выглядит.
Oleg
Interior mutability типа RefCell это не так уж и безопасно.
Cuno
Т.е. shared mutable state на систему типов не ложится никак. Считается, что оно immutable, хотя на самом деле это не так.
Cuno
Похоже это из за конфликта с правилами borrow-checker'а.
Cuno
Окей, значит проблема не в Arc, а в моем "контейнере". Как тогда заставить такой код заработать?
https://play.rust-lang.org/?gist=fb072d544ab1e36de2925e44682e1c22&version=stable
Cuno
По ссылке - прямой выстрел в ногу, но предположим, что я знаю что делаю
Маjко
Реализуй для него unsafe Sync
Vladimir
завернуть значение в Atomic
Vladimir
например
Vladimir
и реализация Sync тут не обязательно, любая композиция из Sync полей, автоматически реализует Sync
Cuno
завернуть значение в Atomic
u32 там для примера. В моем коде структура с несколькими полями. Судя по всему стоит лезть и смотреть как эти самые атомики реализованы.
Cuno
https://github.com/rust-lang/rust/blob/master/src/libcore/sync/atomic.rs#L126
Cuno
UnsafeCell, ясно
Cuno
Oleg
Я уже вижу, что поторопился высказать мнение :)
Мерль
Rust: an example of Autism-Driven Development?
https://developers.slashdot.org/comments.pl?sid=10924699&threshold=-1&commentsort=0&mode=thread&pid=54904703
Мерль
>_>
Маjко
АХахахахахаха
Dmitry
I don't intend this to be taken as a joke in any way, nor do I intend it to be unnecessarily mean, but I think that the Rust community inadvertently discovered a new paradigm of software development: Autism-Driven Development.
Dmitry
Мерль
ADD
Alex
Programming languages like Java, Python, C++, Perl and PHP want to be used by normal people.
Alex
> php
> normal people
でゲソ
> programming languages
> want to be used
でゲソ
Чему я дейсвтительно рад, так это отсутсвию каноничного растоввского code of conduct в этих ваших чатиках
Судзумия
Чатик же
Судзумия
Место дегенерерирования
Anton
Крч посоны
Anton
Пара ансейф блоков
Anton
И мир заиграл радужными цветами
Anton
Охуинно
Anton
Хоть сделал нормальное подобие MVC
Anton
Для gtk
Anton
Пиздато
Anton
Все прям удобно и пиздато стало
Anton
Anton
Годнота
Anton
А то я посмотрел код других проектов где юзали gtk на расте
Anton
И там ебать пиздец какой ад
Cuno
станет не так уж и удобно
ne_on
а зачем писать на расет unsafe код вообще
ne_on
оно же специально придумано чтоб избежать всех этих проблем которые возникают в unsafe
Cuno
Многие safe абстракции строятся на основе unsafe кода
Маjко
Маjко
Ты ж не стал бы всерьез писать дерево на Rc, скорее взял бы голые поинтеры и покрыл тестами по самые гланды, чтобы убедиться в безопасности
Berkus
однако деревья на Vec<Node> популярны я смотрю, аж три крейта нашел про это дело
Маjко
Единственный способ сделать деревья в safe rust без утечек памяти
でゲソ
でゲソ
Nikita
Есть ли крейт с вектором, который имеет статический капасити и хранится на стеке?
պլհկ
smallvec
Cuno