Re: Модель памяти Rust.
От: Abyx Россия  
Дата: 05.01.13 10:20
Оценка: -1
Здравствуйте, kaa.python, Вы писали:

Уникальные указатели реализуют семантику владения благодаря чему объект может адресовать только один уникальный указатель.

let y = x; // теперь y указывают на созданный ранее объект типа Point.
           // Указатель x деинициализирован.

ахаха, это же std::auto_ptr
In Zen We Trust
Re[2]: Модель памяти Rust.
От: AlexRK  
Дата: 06.01.13 08:46
Оценка:
Здравствуйте, Abyx, Вы писали:

A>Здравствуйте, kaa.python, Вы писали:


A>

A>Уникальные указатели реализуют семантику владения благодаря чему объект может адресовать только один уникальный указатель.
A>

A>let y = x; // теперь y указывают на созданный ранее объект типа Point.
A>           // Указатель x деинициализирован.

A>

A>ахаха, это же std::auto_ptr

А auto_ptr запретит обращение к старой невалидной переменной на этапе компиляции?
Re[3]: Модель памяти Rust.
От: cvetkov  
Дата: 06.01.13 09:46
Оценка:
Здравствуйте, AlexRK, Вы писали:

ARK>А auto_ptr запретит обращение к старой невалидной переменной на этапе компиляции?


а это вообще можно сделать?

наприме

X x = //уникальный указаткль
X y = //уникальный указаткль
if(random() == 1){
    y = x;
}

// вот тут компилятор ругнется на использование x?
... << RSDN@Home 1.2.0 alpha 5 rev. 1539>>
Re[4]: Модель памяти Rust.
От: AlexRK  
Дата: 06.01.13 09:49
Оценка: -1
Здравствуйте, cvetkov, Вы писали:

C>Здравствуйте, AlexRK, Вы писали:


ARK>>А auto_ptr запретит обращение к старой невалидной переменной на этапе компиляции?


C>а это вообще можно сделать?


C>наприме


C>
C>X x = //уникальный указаткль
C>X y = //уникальный указаткль
C>if(random() == 1){
C>    y = x;
C>}

C>// вот тут компилятор ругнется на использование x?
C>


У меня нет компилятора Rust, но по логике должно быть именно так.
Re[5]: Модель памяти Rust.
От: cvetkov  
Дата: 06.01.13 09:59
Оценка:
ARK>У меня нет компилятора Rust, но по логике должно быть именно так.
получается что уникальным указателем нельзя пользоватся после передачи его в любую функцию.

мне кажется это будет неудобно.
... << RSDN@Home 1.2.0 alpha 5 rev. 1539>>
Re[6]: Модель памяти Rust.
От: AlexRK  
Дата: 06.01.13 10:02
Оценка:
Здравствуйте, cvetkov, Вы писали:

ARK>>У меня нет компилятора Rust, но по логике должно быть именно так.

C>получается что уникальным указателем нельзя пользоватся после передачи его в любую функцию.

Ну да, на то он и уникальный. Иначе какая это нафиг уникальность? В этом и смысл.

Надо передавать в другую функцию — копируйте содержимое и передавайте.
Re[7]: Модель памяти Rust.
От: cvetkov  
Дата: 06.01.13 10:23
Оценка:
Здравствуйте, AlexRK, Вы писали:

ARK>Ну да, на то он и уникальный. Иначе какая это нафиг уникальность? В этом и смысл.

ARK>Надо передавать в другую функцию — копируйте содержимое и передавайте.

теперь понял.
а какя от них польза?
... << RSDN@Home 1.2.0 alpha 5 rev. 1539>>
Re[8]: Модель памяти Rust.
От: AlexRK  
Дата: 06.01.13 10:24
Оценка:
Здравствуйте, cvetkov, Вы писали:

C>Здравствуйте, AlexRK, Вы писали:


ARK>>Ну да, на то он и уникальный. Иначе какая это нафиг уникальность? В этом и смысл.

ARK>>Надо передавать в другую функцию — копируйте содержимое и передавайте.

C>теперь понял.

C>а какя от них польза?

Можно передавать большие структуры данных между потоками — без копирования.
Re[9]: Модель памяти Rust.
От: cvetkov  
Дата: 06.01.13 10:49
Оценка:
Здравствуйте, AlexRK, Вы писали:

C>>теперь понял.

C>>а какя от них польза?

ARK>Можно передавать большие структуры данных между потоками — без копирования.

да, в этом есть смысл.
но я все равно не могу придумать где это понадобится на практик.

не встречал задач в которх бы один поток создавал большую структуру данных, а другой обрабатывал бы ее. при этом после обработки выбрасывал. и данные были бы мутабельными.
... << RSDN@Home 1.2.0 alpha 5 rev. 1539>>
Re[10]: Модель памяти Rust.
От: AlexRK  
Дата: 06.01.13 11:05
Оценка: 3 (1)
Здравствуйте, cvetkov, Вы писали:

C>Здравствуйте, AlexRK, Вы писали:


C>>>теперь понял.

C>>>а какя от них польза?

ARK>>Можно передавать большие структуры данных между потоками — без копирования.

C>да, в этом есть смысл.
C>но я все равно не могу придумать где это понадобится на практик.

Ну вообще-то это много где применяется...
Например, в Singularity есть exchange heap, что по сути то же самое.

C>не встречал задач в которх бы один поток создавал большую структуру данных, а другой обрабатывал бы ее. при этом после обработки выбрасывал. и данные были бы мутабельными.


Ключевой момент в том, что выбрасывать после обработки необязательно, можно и назад вернуть.
В общем, это подходит везде, где надо передавать между потоками туда-сюда крупные массивы данных.
Re[3]: Модель памяти Rust.
От: Abyx Россия  
Дата: 06.01.13 11:08
Оценка:
Здравствуйте, AlexRK, Вы писали:

A>>let y = x; // теперь y указывают на созданный ранее объект типа Point.

A>> // Указатель x деинициализирован.

ARK>А auto_ptr запретит обращение к старой невалидной переменной на этапе компиляции?


там иммутабельные указатели?
и "деинициализирован" означает "невалидный"?
In Zen We Trust
Re[4]: Модель памяти Rust.
От: AlexRK  
Дата: 06.01.13 11:20
Оценка:
Здравствуйте, Abyx, Вы писали:

A>Здравствуйте, AlexRK, Вы писали:


A>>>let y = x; // теперь y указывают на созданный ранее объект типа Point.

A>>> // Указатель x деинициализирован.

ARK>>А auto_ptr запретит обращение к старой невалидной переменной на этапе компиляции?


A>там иммутабельные указатели?


Где "там"?
Указатели x и y из примера — мутабельные, но уникальные.

A>и "деинициализирован" означает "невалидный"?


Это означает, что считать его значение после присваивания в другое место вы не сможете.
Re[11]: Модель памяти Rust.
От: cvetkov  
Дата: 06.01.13 11:25
Оценка:
Здравствуйте, AlexRK, Вы писали:

ARK>Ну вообще-то это много где применяется...

ARK>Например, в Singularity есть exchange heap, что по сути то же самое.
надо почитать об этом

ARK>Ключевой момент в том, что выбрасывать после обработки необязательно, можно и назад вернуть.

хм. да загрузить — обработать — сохранить.
ARK>В общем, это подходит везде, где надо передавать между потоками туда-сюда крупные массивы данных.
вот для этого я сценария придумать не могу.
... << RSDN@Home 1.2.0 alpha 5 rev. 1539>>
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.