Aroha
> Впрочем уже поздно, я сражен и умер.
Баба с возу - кобыле легче.
desss
> Не завезли и хрен знает когда завезут
Весьма прискорбно.
Все таки решился и поставил IntelliJ IDEA и плагин IntelliJ Rust.
Я говорил в VS Code поддержка нормальная, так вот она полное говно по сравнению IntelliJ Rust.
desss
> Все таки решился и поставил IntelliJ IDEA и плагин IntelliJ Rust.
> Я говорил в VS Code поддержка нормальная, так вот она полное говно по сравнению
> IntelliJ Rust.
30-летний Тарас сыч как-то нечаянно пригласил женщину Машу на ужин в кафе.
Попили кофе, поели тортики, женщина Маша оставила телефон.
Через 10 лет звонок:
- Все таки решился и попил кофе с Люсей. Я говорил, что ты нормальная, Маша, так вот ты полное говно по сравнению с Люсей.
Двусвязный список на русте делается вот так. И это всё, что вам надо знать о данном языке программирования. :trf:
Sbtrn. Devil
> Двусвязный список на русте делается вот так. И это всё, что вам надо знать о
> данном языке программирования.
А что там не так?
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
Слишком опрятно, аж глаза режет: всё документировано, выглядит аккуратно.
Не по-нашему это - нельзя так делать.
> Двусвязный список... делается вот так.
И все ради того, чтобы заменить тупое 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;
gudleifr
> И все ради того, чтобы заменить тупое C-шное
Всё верно. Лучше использовать простыню кода на Rust, чем этот высер из макросни.
Panzerschrek[CN]
> Лучше использовать
Чем лучше-то? Тем, что программист заведомо не понимает, что пишет?
Или, просто, Вы сидите на построчной оплате?
gudleifr
> Чем лучше-то?
С макроснёй можно очень просто прострелить себе ногу. На крестошаблонах это можно сделать гораздо сложнее. В Rust (без unsafe) ногу прострелить нельзя.
Подобный код, кстати, пишется один раз, и не рядовым разработчиком, а разработчиком стандартной библиотеки.
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; } }
Ну и так далее. Понятно?
Panzerschrek[CN]
> С макроснёй можно очень просто прострелить себе ногу.
Обоснуйте!
Panzerschrek[CN]
> Подобный код, кстати, пишется один раз, и не рядовым разработчиком, а
> разработчиком стандартной библиотеки.
Т.е. для того, чтобы заменить три очевидные строчки кода сотней понадобился отдельный "разработчик"? Браво крестам!
gudleifr
>
> Чем лучше-то? Тем, что программист заведомо не понимает, что пишет?
> Или, просто, Вы сидите на построчной оплате?
>
Если он не понимает, что пишет. Тогда он и на си не будем понимать. Все пишем на асме
desss
> Ща научу как понимать.
> Смотришь реализацию push_back()...
> Смотришь реализацию push_back_node()...
Самим не смешно?
Для замены одной очевиднейшей строки кода.