LINUX.ORG.RU

История изменений

Исправление cumvillain, (текущая версия) :

Чтобы разобраться с лайфтаймами нужно пару вечеров без пивасика с сериалами провести и любой мидл на любом языке все поймет.

Все куда хуже. Borrow checker сам по себе – ерунда. Ну то есть если ты умеешь писать адекватный асинхронный код на C, у тебя borrow checker не вызовет проблем, потому что ты по сути то же самое делаешь, только руками.

Треш начинается дальше, когда мы приходим к структурами данных. В какой-то момент тебе нужен treebitmap, например. Или похожая срань. Да ещё и lockless. И чтобы оно в TLB попадало как надо. И чтобы скалировалось на три сотни гигабайт с приемлимой латентностью. И вроде Rust как раз для этого и был придуман, все классно.

Но нет. Как только мы приходим в этот прекрасный мир эффективных структур данных, Rust начинает хромать на обе ноги.

Сразу вылезает unsafe. Но это мелочи, мы же умеем писать на C, с указателями справимся. Так, пажжи. У нас появились структуры, ссылающиеся на себя. Теперь нам нужен Pin, потому что Rust может ловко выбить незапиненный указатель и ты получишь порчу памяти. А Pin страшный. Но окей, кое-как разобрались. Потом вылезает PhantomData, которая по факту жирнейший костыль из-за неспособности системы типов описать лайфтайм в случаях, когда поля с ним в структуре нет (а это частый случай с указателями).

И вот в какой-то момент вместо нормального пердолева с битами и байтами, анализом попадания в TLB и прочими domain-specific проблемами, ты оказываешь в этом аду дрочевания на концепты компилятора.

Так что на сложных стуктурах данных Rust заглатывает за обе щеки.

Исходная версия cumvillain, :

Чтобы разобраться с лайфтаймами нужно пару вечеров без пивасика с сериалами провести и любой мидл на любом языке все поймет.

Все куда хуже. Borrow checker сам по себе – ерунда. Ну то есть если ты умеешь писать адекватный асинхронный код на C, у тебя borrow checker не вызовет проблем, потому что ты по сути то же самое делаешь, только руками.

Треш начинается дальше, когда мы приходим к структурами данных. В какой-то момент тебе нужен treebitmap, например. Или похожая срань. Да ещё и lockless. И чтобы оно в TLB попадало как надо. И чтобы скалировалось на три сотни гигабайт с приемлимой латентностью. И вроде Rust как раз для этого и был придуман, все классно.

Но нет. Как только мы приходим в этот прекрасный мир эффективных структур данных, Rust начинает хромать на обе ноги.

Сразу вылезает unsafe. Но это мелочи, мы же умеем писать на C, с указателями справимся. Так, пажжи. У нас появились структуры, ссылающиеся на себя. Теперь нам нужен Pin, потому что Rust может ловко выбить незапиненный указатель и ты получишь порчу памяти. А Pin страшный. Но окей, кое-как разобрались. Потом вылезает PhantomData, которая по факту жирнейший костыль из-за неспособности системы типов описать лайфтайм в случаях, когда поля с ним в структуре нет (а это частый случай с указателями).

И вот в какой-то момент вместо нормального пердолева с битами и байтами, анализом попадания в TLB и прочими domain-specific проблемами, ты оказываешь в этом аду дрочевания на концепты компилятора.

Так что на сложных стуктурах данных Rust пихает за обе щеки.