Where communities thrive


  • Join over 1.5M+ people
  • Join over 100K+ communities
  • Free without limits
  • Create your own community
People
Repo info
Activity
  • Mar 27 2015 20:26
    User @sudodoki banned @doneck-russia from this room
  • Mar 19 2015 20:58
    User @mr-mig banned @pgr-ru from this room
  • Mar 15 2015 01:09
    User @mr-mig banned @putin-hero from this room
  • Mar 15 2015 01:09
    User @mr-mig banned @stepan-bendera from this room
Grigorij Eleskin
@Nyarum
Как тут одиноко.
Джон, просто Джон
@sudodoki
Не одиноко, а пустынно. Потому что все настолько понятно и прозрачно, даже вопросы не о чем задавать.
Stanislav Panferov
@s-panferov

Хочу поделиться парочкой своих проектов на расте:

https://github.com/rustless
https://github.com/deuterium-orm

Может быть кому-нибудь поможет в деле освоения этого языка)

Джон, просто Джон
@sudodoki
:+1:
Anton Simakov
@ttohin
@s-panferov очень хорошо
Андрей Листочкин (Andrey Listochkin)
@listochkin
мои впечатления пока что
Senin Roman
@Rastopyr
fn main() {
        let mut inc: int = 1;

        print_number(inc);
        print_sum(12, inc);

        inc_one(&mut inc);

        print_number(inc);
        print_sum(12, inc);
}

fn print_number(x: int) {
        println!("Number is: {}", x);
}

fn print_sum(x: int, y:int) {
        println!("Sum of arguments is: {}", x + y);
}

fn inc_one(x: &mut int) {
        x += 1;
}
вот этот код мне выдает ошибку при компиляции
binary assignment operation += cannot be applied to type &mut int
что я делаю не так?
Paul Colomiets
@tailhook
*x += 1
у тебя же x это указатель
Senin Roman
@Rastopyr
@tailhook спасибо! я только учусь.
оператор *, получается, позволяет получить занчение, на которое указывает x?
Paul Colomiets
@tailhook
да, получить значение, или записать значение
Senin Roman
@Rastopyr
спасибо. буду изучать дальше
Андрей Листочкин (Andrey Listochkin)
@listochkin

https://twitter.com/steveklabnik/status/552183835623165952

в общем, вроде решают все правильно - убирают int и uint, что очень правильно. А для arbitrary precision вводят пару isize/usize, и что самое приятное - делают для них суффиксы. Можно будет писать 10is так же как сейчас 10i32

Джон, просто Джон
@sudodoki
Андрей Листочкин (Andrey Listochkin)
@listochkin
Кстати, я попрограммировал на Расте за выходные. Хотите, скринкаст запишу на тему?
Senin Roman
@Rastopyr
@listochkin на какую тему?)
Андрей Листочкин (Andrey Listochkin)
@listochkin
на Расте что-то покодить
Senin Roman
@Rastopyr
Мне было бы интересно
Ulric Wilfred
@shamansir
по поводу http, я пользовал https://github.com/hyperium/hyper, он приятный, но... вот что-то в расте обновилось 3 часа назад и он снова упал)
собственно инты и порушили, да
но они обычно чинят в пределах двух-трёх дней
Андрей Листочкин (Andrey Listochkin)
@listochkin
они вообще столько всего перелопатили: куча всего полетело.
Grigorij Eleskin
@Nyarum
Ломать, ломать и еще раз ломать :)
Denis Borovikov
@dborovikov
Привет. Подскажите как реализовать метод pop: http://is.gd/JBbBEt
Ulric Wilfred
@shamansir
в коде не стек (LIFO), а FIFO (связанный список). поэтому добраться по хвосту до последнего элемента и вернуть его
но если хотите стек, то надо хранить не голову, а хвост :)
Denis Borovikov
@dborovikov
Вы что-то путаете, стек на односвязном списке вполне реализунтся, голова это последний добавлений добавленный элемент. В pop нужно просто head присвоить хвост списка. Да собственно проблема не в этом, как стек программируется я знаю, не понятно как произвести копирование, borrow checker ругается. В методе push я его победил таки чере mem::replace.
Denis Borovikov
@dborovikov
вот то, что я хочу сделать "в лоб": http://is.gd/5ETNz6
вполне законно ругается

<anon>:26:17: 26:22 error: cannot move out of borrowed content

<anon>:26 self.head = *tail;
^~~~~

<anon>:27:10: 27:15 error: cannot move out of borrowed content

<anon>:27 Some(*data)
^~~~~

<anon>:26:5: 26:22 error: cannot assign to self.head because it is borrowed

<anon>:26 self.head = *tail;

Denis Borovikov
@dborovikov
вот очередная попытка реализовать: http://is.gd/hry01l
теперь error: use of collaterally moved value: (old_head:Cons).1
Ulric Wilfred
@shamansir
да, вы правы по поводу что поторопился тогда. меня смущают присвоения в методах и memory-replace, это не очень функциональный путь и иммутабельность нарушается. возможно из push нужно возвращать новый список, если уж вы используете cons-ячейки.
Ulric Wilfred
@shamansir
Denis Borovikov
@dborovikov
Это учебный пример, мне интересно как работать с мутабельными структурами. С иммутабельными все понятно. Я посмотрел стандартные коллекции, там зачачстую raw указатели используются, но это если ничего не получится с обычными.
Paul Colomiets
@tailhook
Ну походу там достаточно было звёздочку переместить: http://is.gd/YpW2ok
Denis Borovikov
@dborovikov
спасибо.. я нифига не понял что произошло, честно говоря )) все-таки rust довольно сложный язык
неужели аргумент match-а в другом скоупе?
Paul Colomiets
@tailhook
Нет, просто ты когда делаешь match для reference'а, то он берёт от всего что проматчил ссылки тоже. А когда ты делаешь match от enum'а (по значению), то enum типа распадается на запчасти, соответственно ты получаешь значения, а не ссылки на них, ну и соответственно може переместить их дальше куда-нибудь
Denis Borovikov
@dborovikov
хм, вообще-то как мне казалось в моем случае enum тоже разбирается на запчасти. что бы брались ссылки там надо явно ref прописать, типа Node::Cons(ref data, ref tail)
Paul Colomiets
@tailhook
Ну в последнем примере типа да, но ошибка говорит, видимо что ты этого просто сделать не можешь из ссылки. Хотя ошибка странноватая, по-этому не сильно уверен.
artem.prikhodin
@dsociative
Привет, а можно как-нибудь обойти поля в Struct ?
Андрей Листочкин (Andrey Listochkin)
@listochkin
по-моему нельзя. а зачем тебе?
artem.prikhodin
@dsociative
Хочу описать какую-нибудь древовидную иерархию, а потом обойти каждый его айтем и проинициализировать
Андрей Листочкин (Andrey Listochkin)
@listochkin
не совсем понятно, что именно ты хочешь сделать, но обычно для “проинициализировать” просто определяют new для структуры
как вариант “сделать все для каждого поля” определи итератор http://doc.rust-lang.org/core/iter/
а как вариант “сконвертировать из другого формата” http://doc.rust-lang.org/serialize/index.html