Pull to refresh
89
0
Александр Мещеряков@freecoder_xx

Rust разработчик

Send message

Открою маленький секрет: если попытаться скомпилировать мой код без async_recursion, то компилятор скажет


error[E0733]: recursion in an `async fn` requires boxing
  --> src/main.rs:10:26
   |
10 |     async fn walk(&self) {
   |                          ^ recursive `async fn`
   |
   = note: a recursive `async fn` must be rewritten to return a boxed `dyn Future`
   = note: consider using the `async_recursion` crate: https://crates.io/crates/async_recursion

Так что в данном случае, наверное, такой код смогут написать почти все, кто вообще дошел до async/.await в Rust ))

Такое поведение имеется ввиду?


struct Comment {
    id: u64,
    children: Vec<Comment>,
}

impl Comment {
    #[async_recursion(?Send)]
    async fn walk(&self) {
        let content = get_content(self.id).await;
        println!("{}", content);

        for child in &self.children {
            child.walk().await;
        }
    }
}

async fn get_content(comment_id: u64) -> String {
    format!("Content of {}", comment_id)
}

Полный код

Пока — нигде.

В подовляющем большинстве случаев используется просто lifetime elision.

Вы пишете бред полный

Я знаю ситуацию изнутри.

На Scala я ничего серьезного не разрабатывал, но много лет назад брался ее изучать. Сначала все сильно нравилось, а потом стал пробовать писать код посложнее и смешение ООП и функционального подхода мне нравиться перестали. Rust в этом смысле более практичный язык, как мне кажется. Хотя конечно, многих ФП-плюшек в нем не хватает.

Достаточно написать достаточно сложню рекурсивную асинк функцию чтобы пины и лайфтаймы повылазили во все стороны :)

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

Фронт написан с использованием Yew и компилируется в WASM.

Сравнивать экосистемы Java и Rust сейчас совершенно бессмысленно — у Java она просто гигантская.


Но вот о технологических фичах стоит поговорить: почему какой-нибудь Яндекс пишет добрую половину своих сервисов на C++? Почему не все на Java? Потому что когда начинают считать, во сколько серверов обойдутся фичи Java, все ее преимущества сходят на нет. Но C++ дороже в разработке и поддержке — вот и получается 50 на 50 (грубо). А Rust — он как раз в этой средней точке.

Я Java-приложения на Rust не переписывал. Просто говорю по своему опыту, что возни с GC в крупных приложениях на Java больше, чем проблем с BC (наличие которого через полгода практики перестаешь замечать).

Согласен, наверное это самое большое разочарование для программиста на Rust: язык сначала воодушевляет, а потом оказывается, что то — нельзя, это — нельзя… И возникает уныние.


Я прошел этот этап с пониманием того, что Rust — это не состояние, а процесс. Язык никогда не будет соответствовать своему идеалу, он все время будет как-бы недоработан, и это нормально. В Rust заметно противоречивое балансирование между красотой/стройностью и практичностью. Я принял это и вижу в таком подходе даже преимущества. Идеал виден, он осязаем, и язык развивается в его сторону, хоть и не так быстро. Настоящие проблемы возникнут у него если развитие остановится.

Переметнулся? )


Не знаю, но я использую Rust уже 4 года, и количество проектов, где я его с успехом для себя применяю — растет. И все это прикладная разработка. Rust тем и хорош, что это императивный язык по-сути, он сильно проще, чем Scala.


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

Почему бэкенд не заберет? Использую Rust на бэке много где (кое-где и на фронте), очень удобно. И вообще web-часть в экосистеме Rust значительна и хорошо развита.

Ну что принципиально она упрощает? Я писал долгое время web-приложения на Java, теперь пишу на Rust. И разницы не замечаю (в вопросах удобства управления памятью). А вот то, что теперь не надо тюнить JVM, чтобы сделать выделение памяти и сборку мусора предсказуемой — очень даже чувствую.

Плюс скорость разработки сложных приложений значительно выше на JAVA

Очень спорно. Хорошая система типов в Rust увеличивает скорость разработки и поддержки именно сложных приложений.

Rust по-умолчанию использует системный аллокатор, но может использовать и любой другой, пользовательский (например, jemalloc). Также сборщик мусора можно сделать в виде внешней библиотеки.


Вообще, есть мнение (неподтвержденное), что следование концепции владения и заимствования в Rust, которая относится к любым ресурсам в программе, приводит к лучшей архитектуре, чем без него.

Вы ошибаетесь. Rust — универсальный ЯП, хоть и позиционируется прежде всего как системный. Поэтому так медленно и отвоевывает себе рынок. Реально Rust так же интересно использовать в прикладной разработке, как и в системном программировании, если не интереснее.

К тому времени все уже на Rust перепишут )

rustup ставится в домашнюю директорию и все установленное через него тоже сохраняется туда же. Довольно удобно.

В Rust Utf-8 строки, просто вы на них смотрите по-умолчанию как на байтовый массив.

Information

Rating
Does not participate
Location
Санкт-Петербург, Санкт-Петербург и область, Россия
Registered
Activity