ФлеймФорумПрограммирование

Стоит ли изучать новый язык Rust? (7 стр)

Страницы: 16 7 8 9291 Следующая »
#90
15:09, 4 мар 2018

Aroha
> Впрочем уже поздно, я сражен и умер.
Баба с возу - кобыле легче.

#91
20:52, 4 мар 2018

desss

> Не завезли и хрен знает когда завезут
Весьма прискорбно.

#92
0:55, 6 мар 2018

Все таки решился и поставил IntelliJ IDEA и плагин IntelliJ Rust.
Я говорил в VS Code поддержка нормальная, так вот она полное говно по сравнению IntelliJ Rust.

#93
12:46, 6 мар 2018

desss
> Все таки решился и поставил IntelliJ IDEA и плагин IntelliJ Rust.
> Я говорил в VS Code поддержка нормальная, так вот она полное говно по сравнению
> IntelliJ Rust.

30-летний Тарас сыч как-то нечаянно пригласил женщину Машу на ужин в кафе.
Попили кофе, поели тортики, женщина Маша оставила телефон.
Через 10 лет звонок:
- Все таки решился и попил кофе с Люсей. Я говорил, что ты нормальная, Маша, так вот ты полное говно по сравнению с Люсей.

#94
15:55, 6 мар 2018

Двусвязный список на русте делается вот так. И это всё, что вам надо знать о данном языке программирования. :trf:

#95
16:02, 6 мар 2018

Sbtrn. Devil
> Двусвязный список на русте делается вот так. И это всё, что вам надо знать о
> данном языке программирования.
А что там не так?

#96
16:07, 6 мар 2018

Sbtrn. Devil
> Двусвязный список на русте делается вот так. И это всё, что вам надо знать о данном языке программирования. :trf:
Документации слишком много что ли?

Вот двусвязный список на C++:
https://github.com/gcc-mirror/gcc/blob/da8dff89fa9398f04b107e388c… lude/std/list
https://github.com/gcc-mirror/gcc/blob/da8dff89fa9398f04b107e388c… bits/list.tcc
https://github.com/gcc-mirror/gcc/blob/da8dff89fa9398f04b107e388c… ts/stl_list.h

Красота невероятная, да? Глаз радуется.

Вот реализация из стандартной библиотеки Rust:
https://doc.rust-lang.org/std/collections/struct.LinkedList.html
https://doc.rust-lang.org/src/alloc/linked_list.rs.html
https://github.com/rust-lang/rust/blob/0ff9872b2280009f094af0df3d… inked_list.rs

Слишком опрятно, аж глаза режет: всё документировано, выглядит аккуратно.
Не по-нашему это - нельзя так делать.

#97
16:42, 6 мар 2018

> Двусвязный список... делается вот так.

И все ради того, чтобы заменить тупое C-шное

/* Список типа X обязан иметь указатель X *next и деструктор del##X() */
#define LIST(X) p##X next;
#define FREE(X) free##X(p) p##X p; { if (p) { free##X(p->next); del##X(p); free(p); } }
/* Двусвязный список типа X обязан иметь указатели X *next, *pred и деструктор del##X() */
#define BLIST(X) p##X next, pred;

#98
17:18, 6 мар 2018

gudleifr
> И все ради того, чтобы заменить тупое C-шное
Всё верно. Лучше использовать простыню кода на Rust, чем этот высер из макросни.

#99
17:21, 6 мар 2018

Panzerschrek[CN]
> Лучше использовать
Чем лучше-то? Тем, что программист заведомо не понимает, что пишет?
Или, просто, Вы сидите на построчной оплате?

#100
17:25, 6 мар 2018

gudleifr
> Чем лучше-то?
С макроснёй можно очень просто прострелить себе ногу. На крестошаблонах это можно сделать гораздо сложнее. В Rust (без unsafe) ногу прострелить нельзя.

Подобный код, кстати, пишется один раз, и не рядовым разработчиком, а разработчиком стандартной библиотеки.

#101
17:33, 6 мар 2018

Sbtrn. Devil
> Двусвязный список на русте делается вот так. И это всё, что вам надо знать о данном языке программирования. :trf:
А, я понял. Ты наверное подумал, что этот велосипедный лист на векторе это реализация из стандартной библиотеки?.
Нет.

gudleifr
> Чем лучше-то? Тем, что программист заведомо не понимает, что пишет?
Ща научу как понимать.
Ну смотри, пишешь:

let list = LinkedList::new();

Не можешь понять, что вообще значит new().
Поэтому смотришь реализацию new():

    pub fn new() -> Self {
        LinkedList {
            head: None,
            tail: None,
            len: 0,
            marker: PhantomData,
        }
    }

Затем пишешь:

list.push_back(foo);

И снова получилось что-то очень неочевидное.
Поэтому смотришь реализацию push_back():

    pub fn push_back(&mut self, elt: T) {
        self.push_back_node(box Node::new(elt));
    }

Видишь там вызов очень непонятной функции push_back_node().
Поэтому смотришь её реализацию, чтобы понять что она вообще делает:

    #[inline]
    fn push_back_node(&mut self, mut node: Box<Node<T>>) {
        unsafe {
            node.next = None;
            node.prev = self.tail;
            let node = Some(Shared::from(Box::into_unique(node)));

            match self.tail {
                None => self.head = node,
                Some(mut tail) => tail.as_mut().next = node,
            }

            self.tail = node;
            self.len += 1;
        }
    }

Ну и так далее. Понятно?

#102
17:34, 6 мар 2018

Panzerschrek[CN]
> С макроснёй можно очень просто прострелить себе ногу.
Обоснуйте!

Panzerschrek[CN]
> Подобный код, кстати, пишется один раз, и не рядовым разработчиком, а
> разработчиком стандартной библиотеки.
Т.е. для того, чтобы заменить три очевидные строчки кода сотней понадобился отдельный "разработчик"? Браво крестам!

#103
17:34, 6 мар 2018

gudleifr
>
> Чем лучше-то? Тем, что программист заведомо не понимает, что пишет?
> Или, просто, Вы сидите на построчной оплате?
>
Если он не понимает, что пишет. Тогда он и на си не будем понимать. Все пишем на асме

#104
17:44, 6 мар 2018

desss
> Ща научу как понимать.
> Смотришь реализацию push_back()...
> Смотришь реализацию push_back_node()...
Самим не смешно?
Для замены одной очевиднейшей строки кода.

Страницы: 16 7 8 9291 Следующая »
ФлеймФорумПрограммирование