Развитие Rust
От: kaa.python Ниоткуда РСДН профессионально мёртв и завален ватой.
Дата: 13.07.12 07:04
Оценка: 56 (6)
Вышла новая версия языка Rust с номером 0.3. Несмотря на то, что говорить о каком бы то ни было коммерческом использовании языка рано, он обретает все более и более четкие формы, появляется понимание куда же он движется. Лично меня то что я вижу очень и очень радует.
С официальным анонсом можно ознакомиться тут. Кроме того, я сделал перевод обзора основных нововведений несколько дополнив его, относительно официальной версии.

P.S. в моем переводе есть пара мест, помеченных "(как это перевести?)". Буду очень благдарен за идеи как это лучше сделать
rust
Re: Развитие Rust
От: pepelac Россия  
Дата: 13.07.12 07:18
Оценка: +1 -2
Здравствуйте, kaa.python, Вы писали:

Синтаксис у него что-то уж слишком дикий и такой же страшный как в С++, поэтому непонятно накой оно вообще) По мне так D более симпатичный и жизнеспособный.
Re[2]: Развитие Rust
От: kaa.python Ниоткуда РСДН профессионально мёртв и завален ватой.
Дата: 13.07.12 07:23
Оценка:
А что именно в синтаксисе кажется страшным? Я на него как первый раз глянул — так сразу родным показалось все
Re[3]: Развитие Rust
От: pepelac Россия  
Дата: 13.07.12 07:35
Оценка: +1
Здравствуйте, kaa.python, Вы писали:

KP>А что именно в синтаксисе кажется страшным? Я на него как первый раз глянул — так сразу родным показалось все


Ну например:
pure fn unpack_slice<T, U>(s: [const T]/& , f: fn(*T, uint) -> U) -> U;

do unpack_slice(rhs) |p, len| {
    for range(0, len) |i| {
        ...
    }
}


Новые типы массивов о_О
// Уникальный массив (unique vector), располагающийся в глобальной памяти
let x: ~[int] = ~[0];
// Разделяемый массив (shared vector), располагающийся в локальной памяти
let y: @[int] = @[0];
// Стековый массив (stack vector), располагающийся на стеке
let z: &[int] = &[0];


а что будет если так написать?
let x: ~[int] = &[0];

По-моему, они там в Мозиле слишком уж увлеклись, проще надо быть))
Re[4]: Развитие Rust
От: kaa.python Ниоткуда РСДН профессионально мёртв и завален ватой.
Дата: 13.07.12 07:40
Оценка:
Здравствуйте, pepelac, Вы писали:

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


P>pure fn unpack_slice<T, U>(s: [const T]/& , f: fn(*T, uint) -> U) -> U;


Выделенное — это временное чудище. Идет обкатка концепции и пока то, как этот концепция выглядит, не критично.

P>Новые типы массивов о_О


Вот как раз модель памяти Rust очень удобная (особенно если ты много писал на C/C++ и надо писать параллельный код). Как минимум попортить чужую память будет сложно.

P>а что будет если так написать?

P>let x: ~[int] = &[0];

Ошибка компиляции будет.
Re[5]: Развитие Rust
От: vpchelko  
Дата: 13.07.12 12:32
Оценка: +1
KP>Ошибка компиляции будет.
Не понятно откуда у афтара синтаксиса такие ассоциации? Ё это глобальная память и т.п.
Сало Украине, Героям Сала
Re[5]: Развитие Rust
От: vpchelko  
Дата: 13.07.12 12:41
Оценка: -4 :))
Да и стиль стандартных функций — нечитабельный, все в нижнем регистре... Берите хороший пример Java Coding Style.
Сало Украине, Героям Сала
Re[5]: Развитие Rust
От: minorlogic Украина  
Дата: 14.07.12 08:57
Оценка:
Здравствуйте, kaa.python, Вы писали:

KP>Вот как раз модель памяти Rust очень удобная (особенно если ты много писал на C/C++ и надо писать параллельный код). Как минимум попортить чужую память будет сложно.


Кратко, как это работает? какие отличия от С ? сенкс .
... << RSDN@Home 1.2.0 alpha 5 rev. 1539>>
Ищу работу, 3D, SLAM, computer graphics/vision.
Re[6]: Развитие Rust
От: kaa.python Ниоткуда РСДН профессионально мёртв и завален ватой.
Дата: 14.07.12 09:20
Оценка: 6 (1)
Здравствуйте, minorlogic, Вы писали:

M>Кратко, как это работает? какие отличия от С ? сенкс .


Память делится на 3 типа: стек, разделяемые указатели, уникальные указатели. Стековая память и разделяемые указатели не могут быть переданны за пределы текущего потока. Уникальные указатели могут передаваться другому потоку в режиме "только чтение". Так же есть понятие ссылки (в Rust они называются регионами), которые могут работать с любым типом указателя и по поведению схожие с сылками в C++, основное отличие состоит в том, что они могут безопасно работать не только с lvalue, но и rvalue, так как при необходимости создается копия объекта.
Re[7]: Развитие Rust
От: vpchelko  
Дата: 14.07.12 17:01
Оценка:
Тут все же правильнее с Ц++ сравнивать.

KP>Память делится на 3 типа: стек, разделяемые указатели, уникальные указатели. Стековая память и разделяемые указатели не могут быть переданны за пределы текущего потока.

Так интересно чем же отличается стековая память от разделяемых указателей? Если я не ошибаюсь в Ц++ локальная память выделялась на стеке...

KP>Уникальные указатели могут передаваться другому потоку в режиме "только чтение". Так же есть понятие ссылки (в Rust они называются регионами), которые могут работать с любым типом указателя и по поведению схожие с сылками в C++, основное отличие состоит в том, что они могут безопасно работать не только с lvalue, но и rvalue, так как при необходимости создается копия объекта.

Что-то тут намудрили. Тут сам язык обеспечивает синхронизацию при обращении к объекту из другого потока?
Сало Украине, Героям Сала
Re[8]: Развитие Rust
От: D. Mon Великобритания http://thedeemon.livejournal.com
Дата: 14.07.12 18:09
Оценка: +1
Здравствуйте, vpchelko, Вы писали:

V>Так интересно чем же отличается стековая память от разделяемых указателей?


Первое на стеке, второе в куче.

V> Тут сам язык обеспечивает синхронизацию при обращении к объекту из другого потока?


А не нужно, два потока один объект не могут менять одновременно: при передаче уникального указателя из одного потока во второй первый поток его "теряет" и не может больше использовать.
Re[9]: Развитие Rust
От: kaa.python Ниоткуда РСДН профессионально мёртв и завален ватой.
Дата: 14.07.12 22:42
Оценка:
Здравствуйте, D. Mon, Вы писали:

V>> Тут сам язык обеспечивает синхронизацию при обращении к объекту из другого потока?


DM>А не нужно, два потока один объект не могут менять одновременно: при передаче уникального указателя из одного потока во второй первый поток его "теряет" и не может больше использовать.


Я не уверен точно, но вроде в случае уникального указателя, передающий поток не теряет владения им, в то время как получающий поток имеет доступ только-чтение и при попытке модификации создается копия объекта. См. пример из пункта "квалификатор const"
Re: Развитие Rust
От: IT Россия linq2db.com
Дата: 15.07.12 00:25
Оценка:
Здравствуйте, kaa.python, Вы писали:

KP>Вышла новая версия языка Rust с номером 0.3.


Кто придумал такое название для языка?
Если нам не помогут, то мы тоже никого не пощадим.
Re[2]: Развитие Rust
От: kaa.python Ниоткуда РСДН профессионально мёртв и завален ватой.
Дата: 15.07.12 00:37
Оценка:
Здравствуйте, IT, Вы писали:

IT>Кто придумал такое название для языка?


Не знаю Идиотское название — факт.
Re[2]: Развитие Rust
От: Don Reba Канада https://stackoverflow.com/users/49329/don-reba
Дата: 15.07.12 00:48
Оценка: :))) :))) :))) :))) :))) :))
Здравствуйте, IT, Вы писали:

IT>Кто придумал такое название для языка?


Видимо, Rust позиционируется как убийца IronPython (IronRuby, IronScheme).
Ce n'est que pour vous dire ce que je vous dis.
Re[10]: Развитие Rust
От: vpchelko  
Дата: 15.07.12 10:47
Оценка:
KP>Я не уверен точно, но вроде в случае уникального указателя, передающий поток не теряет владения им, в то время как получающий поток имеет доступ только-чтение и при попытке модификации создается копия объекта. См. пример из пункта "квалификатор const"

ИМХО это переусложнизм на базовом уровне.
Сало Украине, Героям Сала
Re: Развитие Rust
От: Мишень-сан  
Дата: 16.07.12 07:38
Оценка:
Здравствуйте, kaa.python, Вы писали:

KP>Вышла новая версия языка Rust с номером 0.3. Несмотря на то, что говорить о каком бы то ни было коммерческом использовании языка рано, он обретает все более и более четкие формы, появляется понимание куда же он движется. Лично меня то что я вижу очень и очень радует.

KP>С официальным анонсом можно ознакомиться тут. Кроме того, я сделал перевод обзора основных нововведений несколько дополнив его, относительно официальной версии.

KP>P.S. в моем переводе есть пара мест, помеченных "(как это перевести?)". Буду очень благдарен за идеи как это лучше сделать


Идеи хорошие, но синтаксис в стиле J и уйма сокращений немного напрягают. В данном случае это именно экономия на спичках. Насчёт модели памяти и ссылок ничего умного сказать не могу, т.к. опыта маловато. Может, и можно было бы сделать попроще. Хотя в том же D, который все регулярно вспоминают, обошлись собственно управляемой кучей и placement new.
Re[10]: Развитие Rust
От: Мишень-сан  
Дата: 16.07.12 08:00
Оценка:
Здравствуйте, kaa.python, Вы писали:

KP>Я не уверен точно, но вроде в случае уникального указателя, передающий поток не теряет владения им, в то время как получающий поток имеет доступ только-чтение и при попытке модификации создается копия объекта. См. пример из пункта "квалификатор const"


То, что вы описали — borrowing. У них же вроде в мане написано, что unique pointers — как раз передача указателя новому владельцу с потрохами, так, что старый таск его теряет и не может использовать. Они так избавились от необходимости копирования данных между тасками.
Re[11]: Развитие Rust
От: kaa.python Ниоткуда РСДН профессионально мёртв и завален ватой.
Дата: 16.07.12 09:43
Оценка:
Здравствуйте, Мишень-сан, Вы писали:

МС>То, что вы описали — borrowing. У них же вроде в мане написано, что unique pointers — как раз передача указателя новому владельцу с потрохами, так, что старый таск его теряет и не может использовать. Они так избавились от необходимости копирования данных между тасками.


Загляни в пример из из пункта "квалификатор const".
Re[2]: Развитие Rust
От: vpchelko  
Дата: 16.07.12 17:03
Оценка:
Простота залог успеха. Тут намутили так, что надо разбираться.
Сало Украине, Героям Сала
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.