Сообщение Re[10]: Rust это круто от 24.09.2022 7:37
Изменено 24.09.2022 7:39 vsb
Re[10]: Rust это круто
Здравствуйте, CreatorCray, Вы писали:
J>>Rust не разрешит тебе расшаренный доступ к объекту из разных потоков, в этом и весь фикус.
CC>В чём это "не разрешит" физически проявляется?
Когда ты в расте присваиваешь один указатель другому, то старая переменная "уничтожается", т.е. её использовать больше нельзя, компилятор следит за этим. В том числе если это использование переменной в качестве аргумента при вызове функции. Так называемая семантика передачи владения. В первую очередь это используется для освобождения памяти (кто последний взял владение, тот и освобождает, грубо говоря), но и в том числе для многопоточности используется. Это отслеживается на уровне компиляции, а не на уровне исполнения. Это я всё очень грубо описал, но на практике как ты хочешь писать код — так не выйдет, раст тебе не даст. Многопоточность в основном делается через передачу иммутабельных данных между потоками, message passing, вот это вот всё. Другие варианты слишком неудобные.
J>>Rust не разрешит тебе расшаренный доступ к объекту из разных потоков, в этом и весь фикус.
CC>В чём это "не разрешит" физически проявляется?
Когда ты в расте присваиваешь один указатель другому, то старая переменная "уничтожается", т.е. её использовать больше нельзя, компилятор следит за этим. В том числе если это использование переменной в качестве аргумента при вызове функции. Так называемая семантика передачи владения. В первую очередь это используется для освобождения памяти (кто последний взял владение, тот и освобождает, грубо говоря), но и в том числе для многопоточности используется. Это отслеживается на уровне компиляции, а не на уровне исполнения. Это я всё очень грубо описал, но на практике как ты хочешь писать код — так не выйдет, раст тебе не даст. Многопоточность в основном делается через передачу иммутабельных данных между потоками, message passing, вот это вот всё. Другие варианты слишком неудобные.
Re[10]: Rust это круто
Здравствуйте, CreatorCray, Вы писали:
J>>Rust не разрешит тебе расшаренный доступ к объекту из разных потоков, в этом и весь фикус.
CC>В чём это "не разрешит" физически проявляется?
Когда ты в расте присваиваешь один указатель другому, то старая переменная "уничтожается", т.е. её использовать больше нельзя, компилятор следит за этим. В том числе если это использование переменной в качестве аргумента при вызове функции. Так называемая семантика передачи владения. В первую очередь это используется для освобождения памяти (кто последний взял владение, тот и освобождает, грубо говоря), но и в том числе для многопоточности используется. Это отслеживается на уровне компиляции, а не на уровне исполнения. Это я всё очень грубо описал, но на практике как ты хочешь писать код — так не выйдет, раст тебе не даст. Многопоточность в основном делается через передачу иммутабельных данных между потоками, message passing, вот это вот всё. Другие варианты слишком неудобные. Их можно использовать в unsafe коде для реализации каких-то низкоуровневых механизмов, интерфейсы которых потом будут выставлены для высокоуровневого кода. Но unsafe кода по определению должно быть очень мало, иначе ты теряешь основной смысл использования Rust-а.
J>>Rust не разрешит тебе расшаренный доступ к объекту из разных потоков, в этом и весь фикус.
CC>В чём это "не разрешит" физически проявляется?
Когда ты в расте присваиваешь один указатель другому, то старая переменная "уничтожается", т.е. её использовать больше нельзя, компилятор следит за этим. В том числе если это использование переменной в качестве аргумента при вызове функции. Так называемая семантика передачи владения. В первую очередь это используется для освобождения памяти (кто последний взял владение, тот и освобождает, грубо говоря), но и в том числе для многопоточности используется. Это отслеживается на уровне компиляции, а не на уровне исполнения. Это я всё очень грубо описал, но на практике как ты хочешь писать код — так не выйдет, раст тебе не даст. Многопоточность в основном делается через передачу иммутабельных данных между потоками, message passing, вот это вот всё. Другие варианты слишком неудобные. Их можно использовать в unsafe коде для реализации каких-то низкоуровневых механизмов, интерфейсы которых потом будут выставлены для высокоуровневого кода. Но unsafe кода по определению должно быть очень мало, иначе ты теряешь основной смысл использования Rust-а.