Вышла новая версия языка Rust с номером 0.3. Несмотря на то, что говорить о каком бы то ни было коммерческом использовании языка рано, он обретает все более и более четкие формы, появляется понимание куда же он движется. Лично меня то что я вижу очень и очень радует.
С официальным анонсом можно ознакомиться тут. Кроме того, я сделал перевод обзора основных нововведений несколько дополнив его, относительно официальной версии.
P.S. в моем переводе есть пара мест, помеченных "(как это перевести?)". Буду очень благдарен за идеи как это лучше сделать
Синтаксис у него что-то уж слишком дикий и такой же страшный как в С++, поэтому непонятно накой оно вообще) По мне так D более симпатичный и жизнеспособный.
Выделенное — это временное чудище. Идет обкатка концепции и пока то, как этот концепция выглядит, не критично.
P>Новые типы массивов о_О
Вот как раз модель памяти Rust очень удобная (особенно если ты много писал на C/C++ и надо писать параллельный код). Как минимум попортить чужую память будет сложно.
P>а что будет если так написать? P>let x: ~[int] = &[0];
Здравствуйте, kaa.python, Вы писали:
KP>Вот как раз модель памяти Rust очень удобная (особенно если ты много писал на C/C++ и надо писать параллельный код). Как минимум попортить чужую память будет сложно.
Кратко, как это работает? какие отличия от С ? сенкс .
Здравствуйте, minorlogic, Вы писали:
M>Кратко, как это работает? какие отличия от С ? сенкс .
Память делится на 3 типа: стек, разделяемые указатели, уникальные указатели. Стековая память и разделяемые указатели не могут быть переданны за пределы текущего потока. Уникальные указатели могут передаваться другому потоку в режиме "только чтение". Так же есть понятие ссылки (в Rust они называются регионами), которые могут работать с любым типом указателя и по поведению схожие с сылками в C++, основное отличие состоит в том, что они могут безопасно работать не только с lvalue, но и rvalue, так как при необходимости создается копия объекта.
Тут все же правильнее с Ц++ сравнивать.
KP>Память делится на 3 типа: стек, разделяемые указатели, уникальные указатели. Стековая память и разделяемые указатели не могут быть переданны за пределы текущего потока.
Так интересно чем же отличается стековая память от разделяемых указателей? Если я не ошибаюсь в Ц++ локальная память выделялась на стеке...
KP>Уникальные указатели могут передаваться другому потоку в режиме "только чтение". Так же есть понятие ссылки (в Rust они называются регионами), которые могут работать с любым типом указателя и по поведению схожие с сылками в C++, основное отличие состоит в том, что они могут безопасно работать не только с lvalue, но и rvalue, так как при необходимости создается копия объекта.
Что-то тут намудрили. Тут сам язык обеспечивает синхронизацию при обращении к объекту из другого потока?
Здравствуйте, vpchelko, Вы писали:
V>Так интересно чем же отличается стековая память от разделяемых указателей?
Первое на стеке, второе в куче.
V> Тут сам язык обеспечивает синхронизацию при обращении к объекту из другого потока?
А не нужно, два потока один объект не могут менять одновременно: при передаче уникального указателя из одного потока во второй первый поток его "теряет" и не может больше использовать.
Здравствуйте, D. Mon, Вы писали:
V>> Тут сам язык обеспечивает синхронизацию при обращении к объекту из другого потока?
DM>А не нужно, два потока один объект не могут менять одновременно: при передаче уникального указателя из одного потока во второй первый поток его "теряет" и не может больше использовать.
Я не уверен точно, но вроде в случае уникального указателя, передающий поток не теряет владения им, в то время как получающий поток имеет доступ только-чтение и при попытке модификации создается копия объекта. См. пример из пункта "квалификатор const"
KP>Я не уверен точно, но вроде в случае уникального указателя, передающий поток не теряет владения им, в то время как получающий поток имеет доступ только-чтение и при попытке модификации создается копия объекта. См. пример из пункта "квалификатор const"
Здравствуйте, kaa.python, Вы писали:
KP>Вышла новая версия языка Rust с номером 0.3. Несмотря на то, что говорить о каком бы то ни было коммерческом использовании языка рано, он обретает все более и более четкие формы, появляется понимание куда же он движется. Лично меня то что я вижу очень и очень радует. KP>С официальным анонсом можно ознакомиться тут. Кроме того, я сделал перевод обзора основных нововведений несколько дополнив его, относительно официальной версии.
KP>P.S. в моем переводе есть пара мест, помеченных "(как это перевести?)". Буду очень благдарен за идеи как это лучше сделать
Идеи хорошие, но синтаксис в стиле J и уйма сокращений немного напрягают. В данном случае это именно экономия на спичках. Насчёт модели памяти и ссылок ничего умного сказать не могу, т.к. опыта маловато. Может, и можно было бы сделать попроще. Хотя в том же D, который все регулярно вспоминают, обошлись собственно управляемой кучей и placement new.
Здравствуйте, kaa.python, Вы писали:
KP>Я не уверен точно, но вроде в случае уникального указателя, передающий поток не теряет владения им, в то время как получающий поток имеет доступ только-чтение и при попытке модификации создается копия объекта. См. пример из пункта "квалификатор const"
То, что вы описали — borrowing. У них же вроде в мане написано, что unique pointers — как раз передача указателя новому владельцу с потрохами, так, что старый таск его теряет и не может использовать. Они так избавились от необходимости копирования данных между тасками.
Здравствуйте, Мишень-сан, Вы писали:
МС>То, что вы описали — borrowing. У них же вроде в мане написано, что unique pointers — как раз передача указателя новому владельцу с потрохами, так, что старый таск его теряет и не может использовать. Они так избавились от необходимости копирования данных между тасками.
Загляни в пример из из пункта "квалификатор const".