LINUX.ORG.RU
ФорумTalks

Rust модель памяти

 


0

3

Наткнулся на хабре на пост о rust и несколько прифигел:

fn main() {
    let original_owner = String::from("Something");
    let new_owner = original_owner;
println!("{}", original_owner);

}

Афтор пишет, что подобный код вызавет ошибку в rust, а чому так оно же в одном блоке видимости все происходит, чому rust затирает переменную буквально сразу после присваивания? Чего ради это сделано?

Попробовал такое же на java и никакой ошибки нет, код компилируется и выполняется:

    public static void main(String[] args) {
        String original_owner = new String("Something");
        String new_owner = original_owner;
        System.out.println(original_owner);
    }

Отсутствие классов отдельный рофл: давайте получать экземляры объектов не на уровне класса, а на уровне метода, в который напихаем ещё пачку методов и побольше. Зато нет наследования, да.

★★★★★

Последнее исправление: Ygor (всего исправлений: 1)

Афтор пишет, что подобный код вызавет ошибку в rust, а чому так оно же в одном блоке видимости все происходит, чому rust затирает переменную буквально сразу после присваивания?

Инвариант: у значения единственный владелец.

Чего ради это сделано?

Позволяет аппроксимировать время жизни значения.

quantum-troll ★★★★★
()

чому rust затирает переменную буквально сразу после присваивания? Чего ради это сделано?

потому здесь это, фактически, переименование одного и того же владельца, который должен быть один, нужно это для его компилтайм анализа, который позволяет обходится, например, без GC, как в яве; и код ниже не аналог растовскому.

Зато нет наследования, да.

в языке с дженериками, трейтами и, на крайний случай, с макросами наследование реализации избыточная и чреватая хрень

zurg
()
Последнее исправление: zurg (всего исправлений: 1)
Ответ на: комментарий от yax123

ТС не прав в том, что офигев пошёл создавать на ЛОР тему при том, что объект офигевания – это какбэ прям основа языка, которая описана в гайде.

Тут обсуждать вообще нечего.

Это как «Я одолжил Васе 100 рублей, при этом у меня самого стало на 100 рублей меньше. Почему? Зачем так сделано?»

apt_install_lrzsz ★★★
()

Ты бы лучше знакомился с ЯП по официальным материалам, где всё подробно расписано, а не по каким-то мутным статьям, чтобы не задавать потом тупые вопросы.

theNamelessOne ★★★★★
()
Ответ на: комментарий от theNamelessOne

Ты бы лучше знакомился с ЯП по официальным материалам, где всё подробно расписано, а не по каким-то мутным статьям, чтобы не задавать потом тупые вопросы.

А есть адекватная дока, где о той же модели памяти можно почитать?

Ygor ★★★★★
() автор топика
std::string ass("ass");
std::string hole(std::move(ass));
std::cout<<"ass:"<<ass<<"\n";
std::cout<<"hole:"<<hole<<"\n";

ШОК СЕНСАЦИЯ РАЗРАБОТЧКИКИ C++ πДАРАСЫ!!!!!!1112/s

thunar ★★★★★
()
Ответ на: комментарий от cumvillain

Короче, ты не осилил. Тему можно закрывать.

  1. Я и не пытался, у меня был вопрос, я его задал получил исчерпывающие ответы от товарищей, из которых сделал вывод:
  • в расте не требуется управление памятью, что хорошо.

  • раст писался не для беженцев с с++(чтобы там о себе постер с хабры не возомнил), а для вкатунов с js и тп жопоскриптов, как выражается наш дражайший ловесанчик. Кстати луа он считает жопоскриптом, наверное мы это никогда не узнаем.

  1. По поводу хейтинга и тому подобное могу сказать следующее, глупо хейтить, то чего нет и не будет в этой стране в проде лет двадцать. Пока не вымрут кабанчики учившие в вузиках с/с++ для раста все плохо, ибо привыкли они пилить на всяких проектах типа авроры и ниши для раста нет и не будет.

  2. А ну сорян десять лет постинга на лоре не проходят даром, глупо не покататься на тролейбусе. Вон пацанчик сверьху порвался и запихал дыру в дыру на с++. @thunar изверьг перепейши на qt ибо не true!

Ygor ★★★★★
() автор топика
Ответ на: комментарий от Ygor

По поводу хейтинга и тому подобное могу сказать следующее, глупо хейтить, то чего нет и не будет в этой стране в проде лет двадцать. Пока не вымрут кабанчики учившие в вузиках с/с++ для раста все плохо, ибо привыкли они пилить на всяких проектах типа авроры и ниши для раста нет и не будет.

Пфф, лол. Нет. Мои коллеги напилили на расте хренову кучу строк, брат жив.

cumvillain
()
Ответ на: комментарий от cumvillain

ТС пытался вбросить, а не сказать. Кстати теория заговора: плодим неадекватных «критиков» сомнительной технологии, большинство видят что критики неадекватны, и от этого начинают подсознательно проникаться доверием к критикуемуму ими объекту. Может это и есть цель?

firkax ★★★★★
()
Последнее исправление: firkax (всего исправлений: 2)
Ответ на: комментарий от yax123

необязательно, может и просто скопировать

zurg
()

Ну прочитай ты уж хотя бы растокнигу. И перестанешь задавать тупые вопросы.

WatchCat ★★★★★
()
Ответ на: комментарий от cumvillain

Мои коллеги

На hh.ru пара десятков вакух если по rust наберётся это хорошо бы.

Ygor ★★★★★
() автор топика

оно же в одном блоке видимости все происходит

Он и видит переменную, ошибки о том что она отсутствует, нету. Если переменная будет типа int, то ошибки не будет.

чому rust затирает переменную буквально сразу после присваивания

Он ее не затирает.

Чего ради это сделано?

Оператор = на объекты в разных языках работает по разному, Rust выбрал перемещение, это хороший вариант, объект вообще может не поддерживать клонирование. В Java объектов на стеке как у тебя вообще нету, поэтому твой код вовсе не идентичен коду на Rust.

Зачем тебе во всем этом разбираться?

MOPKOBKA ★★★★
()
Последнее исправление: MOPKOBKA (всего исправлений: 2)
Ответ на: комментарий от Ygor

в расте не требуется управление памятью, что хорошо.

Rust требует заниматься управлением памятью, так же как и C/C++.

раст писался не для беженцев с с++(чтобы там о себе постер с хабры не возомнил), а для вкатунов с js и тп жопоскриптов

Бред какой то.

По поводу хейтинга и тому подобное могу сказать следующее, глупо хейтить, то чего нет и не будет в этой стране в проде лет двадцать.

К сожалению софт на этом убожестве, прилететь на пк может уже сейчас.

MOPKOBKA ★★★★
()
Ответ на: комментарий от yax123

Раст убожество или нет?

Я удваиваю вопросик. Допоможите разобратися чому rust хейтят?

Ygor ★★★★★
() автор топика
Ответ на: комментарий от Ygor

Хейтят за ублюдский синтаксис и за то, что его пихают во все бочки затычкой. Move семантика сама по себе тут ни при чём.

no-such-file ★★★★★
()
Последнее исправление: no-such-file (всего исправлений: 1)
Ответ на: комментарий от apt_install_lrzsz

Если нужно реально вкатиться, Rust in Action Tim McNamara в новой редакции лучшее что есть и будет в обозримом будущем.

ponchik-2
()
Ответ на: комментарий от Ygor

1. leftpad экосистема

2. все постоянно требует rust-nightly, везде статическая линковка, нормально опакетить это не могут

3. использование языка ограниченно каким нибудь ядром и мк, но для этого он не готов, а для написания обычных приложений он подходит плохо, хотя бы из за ручного управления памятью

MOPKOBKA ★★★★
()
Ответ на: комментарий от MOPKOBKA
  1. Пункт бред полнейший, софта и библиотек написано уже на все случаи жизни, хочешь UI на мобилки верстай, хочешь бек, хочешь драйвер пили.
ponchik-2
()
Ответ на: комментарий от ponchik-2

хочешь UI на мобилки верстай, хочешь бек

Зачем в этих областях нужен язык БЕЗ GC?

Java намного проще и безопаснее, и даже намного быстрее, чем наворотит человек которому не захочется пыхтеть над лайфтаймами, и который обернет все в умные указатели.

MOPKOBKA ★★★★
()
Последнее исправление: MOPKOBKA (всего исправлений: 1)
Ответ на: комментарий от MOPKOBKA

Затем что Java это депрекейтед банковский софт и все? А что-то новое это уже Kotlin который все меньше джава и все больше Swift с каждым годом? Чтобы разобраться с лайфтаймами нужно пару вечеров без пивасика с сериалами провести и любой мидл на любом языке все поймет.

И на джаве подобное не сделать - https://slint.dev/

ponchik-2
()
Ответ на: комментарий от ponchik-2

Затем что Java это депрекейтед банковский софт и все?

Выбери другой нормальный язык если Java не нравится.

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

В этом проблемы нету, проблема в том что управлять памятью это сложно, писать эффективные алгоритмы управления памятью еще сложнее, на это времени часто нету.

И на джаве подобное не сделать - https://slint.dev/

На чем основано это мнение? На Java и более требовательные задачи решают. У C# есть прекрасный WPF. В конце концов есть Web который доминирует сейчас.

MOPKOBKA ★★★★
()
Последнее исправление: MOPKOBKA (всего исправлений: 1)
Ответ на: комментарий от MOPKOBKA

Давай пример, как на джаве где можно для кофеварки сверстать красивый UI с блокчейном и умным домом который можно будет и на все платформы сразу собрать нативно, действительно интересно. На С охотно верю что такое есть, а на джаве?

ponchik-2
()
Последнее исправление: ponchik-2 (всего исправлений: 1)
Ответ на: комментарий от ponchik-2

максимум что у вас есть это Kotlin Multiplatform но он жирный и на кофеварке его не запустить

ponchik-2
()
Ответ на: комментарий от ponchik-2

Для этого есть QML. Я не понимаю как от «это не сделать на java» перешло к «этого нету на java». И кофеварки я в своем комментарии сразу отдельно выделил.

MOPKOBKA ★★★★
()
Последнее исправление: MOPKOBKA (всего исправлений: 2)
Ответ на: комментарий от ponchik-2

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

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

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

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

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

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

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

cumvillain
()
Последнее исправление: cumvillain (всего исправлений: 1)
Ответ на: комментарий от cumvillain

Здесь пожалуй соглашусь, к счастью мне такое почти никогда не требуется.

ponchik-2
()
Ответ на: комментарий от ponchik-2

Пункт бред полнейший, софта и библиотек написано уже на все случаи жизни, хочешь UI на мобилки верстай, хочешь бек, хочешь драйвер пили.

И получай бинарь на 30 метров, внутри которого всратый UI из говна и палок

wandrien ★★
()
Ответ на: комментарий от ponchik-2

Вопрос был: Зачем в этих областях нужен язык БЕЗ GC?

Ты отвечаешь: Затем что Java это депрекейтед банковский софт и все?

Всё в порядке у тебя?

И на джаве подобное не сделать - https://slint.dev/

Всё, что сделано на одном тьюринг-полном ЯП, может быть сделано на другом тьюринг-полном ЯП. Немножко голову включаем.

wandrien ★★
()
Ответ на: комментарий от ponchik-2

сверстать красивый UI с блокчейном и умным домом

xDD

Это прям эталонный набор баззвордов от растовика.

Еще «ИИ» забыл дописать.

wandrien ★★
()
Ответ на: комментарий от wandrien

Всё, что сделано на одном тьюринг-полном ЯП, может быть сделано на другом тьюринг-полном ЯП

Перепиши движок ЛОРа на brainfuck

hateWin ★☆
()
Ответ на: комментарий от zurg

на крайний случай, с макросами наследование реализации избыточная и чреватая хрень

Окей, а чего тогда DOM в Servo так по ублюдски написали? Как сделать наследование через макросы, где можно глянуть?

foror ★★★★★
()
Ответ на: комментарий от ponchik-2

И на джаве подобное не сделать - https://slint.dev/

Бож ты мой, какая хрень: The UI is defined in a Domain Specific Language that is declarative, easy to use, intuitive, and provides a powerful way to describe graphical elements

Ты прав на джаве такое делать не стоит. Этим дегенратам ещё в 80-х изобрели HTML, на который вся прикладуха щас ушла. Но они с упрямством ослов будут придумывать новый DSL для UI. Тут правда ничего нового, очередная копипаста с Qt и подобного.

foror ★★★★★
()
Последнее исправление: foror (всего исправлений: 1)
Ответ на: комментарий от foror

Чуваки буквально обещают серебряную пулю.

На этом маркетинг всего Раста выстроен, впрочем. Так что они долбят чётко в целевую аудиторию.

Отдельно поржал с native в списке анимированных баззвордов на главной.

wandrien ★★
()

похожие впечатления от анбординга были на пердле, языке который впаривал^Wпозиционировался как приспособленный для особенно сильных программистов. Кстати, там тоже не было нормальных классов, их запилили недавно, через 15-20лет после того когда было бы кстати и когда все эти шизы померли естественным образом. Вообще, друст очень похож на губи и пердл, франкенштейн квазимоды такой, только с еще большим градусом фошизма и «вещей в себе».

Syncro ★★★★★
()

объясняю про модель памяти раста на примере. Вот есть такая библиотека, rustls. Открываем любую ссылку и читаем: «Rustls is a modern TLS library written in Rust».

Замечательно, открываем Cargo.lock, а там какой-то непонятный «aws-lc-fips-sys» с «cc» и «cmake» в зависимостях. Что это за «aws-lc-fips-sys»? Оказывается, это статически слинкованный амазоновский форк гуглового форка openssl.

Вот такая в расте модель памяти. Все понятно? :)

Lrrr ★★★★★
()
Ответ на: комментарий от Lrrr

Понятно что среди либ на расте существуют либы с биндингами к сишными (ака платформ-нейтив) либами как и в любом языке? Ну да, понятно.

Если интересует как при этом ситуация с памятебезопасностью - ну, безопасность слоя с биндингами к сишной либе гарантируется программистом, всё что над ним - гарантируется языком. Вроде как-то так.

alois
()
Закрыто добавление комментариев для недавно зарегистрированных пользователей (со score < 50)