Programming
Concurrent computing
Rust
Comments 19
UFO landed and left these words here
0
Подход сам по себе не ужасный, но он ухудшает читаемость кода. Однако компилятор вроде как отлавливает все эти скользкие моменты.
UFO landed and left these words here
+1
У той строчки, что вы скопируете, будет в конце точка с запятой, поэтому она не превратиться в return.
UFO landed and left these words here
0
return еще хуже. При перемещении строчки с return, меняется смысл других строчек — некоторые перестают выполняться.
UFO landed and left these words here
0
Добавление разделителя ";" — это появление нового пустого выражения, не более того.
"," в некоторых языках разделитель аргументов функции. Если допускаются опциональные аргументы, то добавление/удаление "," может менять смысл.
-3
Тоже так кажется. Да и вообще, снова эти точки с запятой, почему я должен думать об этой фигне, а не компилятор?
UFO landed and left these words here
0
Ну loop это по сути то же самое что while true в других языках — просто сокращение (которое ещё может учитываться компилятором для оптимизации). Кроме того, из-за паттерн-матчинга очень часто я замечаю за собой применение паттерна типа

loop {
    match do_something {
        p1 if a => { ... }
        p2 if b => { ... }
        something_else => { ...; break }
    }
}

или что-то подобное. Актуально для парсеров.
+3
Лично я не вижу никакой ужасности этого подхода. Вариант с оператором return немного проще замечается, зато вариант со специальным синтаксисом для финального выражения короче и более адекватно смотрится с короткими анонимными функциями, которые в Rust довольно часто используются. Я бы не сказал, что читаемость в целом страдает.

Я так понимаю, этот вариант достался ржавчине от функциональных языков (ocaml, например).

На практике, пока я экспериментировал с ржавчиной ( github.com/ozkriff/marauder ), никаких сложностей с этим у меня не возникало: если у функции в сигнатуре есть "->" то сразу понятно, что последняя строчка чего-то возвращает, а анонимные функции обычно очень короткие (иначе стоит вынести из них логику) и в них вообще все сразу понятно.

По этому поводу интересная статейка давно еще была: lucumr.pocoo.org/2012/10/18/such-a-little-thing
+2
Да не, достаточно удобно. Главное, что если вы функцию опишете как возвращающую что-то, но влепите лишнюю ';', то оно не скомпилируется.

fn add(a: uint, b: uint) -> uint {
    a + b;
}

<anon>:5:1: 7:2 error: not all control paths return a value
<anon>:5 fn add(a: uint, b: uint) -> uint {
<anon>:6     a + b;
<anon>:7 }
<anon>:6:10: 6:11 note: consider removing this semicolon:
<anon>:6     a + b;
                  ^
error: aborting due to previous error


is.gd/9tD5AB — пример.
-9
Они опять изобрели Perl. Только пока что сильно испорченный.
-10
С таким синтаксисом популярность Rust не грозит. Будущее за D.
+4
У Rust современный синтаксис. Если что-то привычное, не значит, что оно правильное.
+3
Вот читаю уже вторую статья… Может вы лучше сразу перейдете к хардкоку, и напишите про управление памяти в Rust? А как циклы работают, ну это и так все очень просто…
Only those users with full accounts are able to leave comments.  , please.