Как стать автором
Обновить

Комментарии 19

НЛО прилетело и опубликовало эту надпись здесь
Подход сам по себе не ужасный, но он ухудшает читаемость кода. Однако компилятор вроде как отлавливает все эти скользкие моменты.
НЛО прилетело и опубликовало эту надпись здесь
НЛО прилетело и опубликовало эту надпись здесь
НЛО прилетело и опубликовало эту надпись здесь
return еще хуже. При перемещении строчки с return, меняется смысл других строчек — некоторые перестают выполняться.
НЛО прилетело и опубликовало эту надпись здесь
Добавление разделителя ";" — это появление нового пустого выражения, не более того.
"," в некоторых языках разделитель аргументов функции. Если допускаются опциональные аргументы, то добавление/удаление "," может менять смысл.
Тоже так кажется. Да и вообще, снова эти точки с запятой, почему я должен думать об этой фигне, а не компилятор?
А loop с метками это какой-то жуткий goto
НЛО прилетело и опубликовало эту надпись здесь
Ну loop это по сути то же самое что while true в других языках — просто сокращение (которое ещё может учитываться компилятором для оптимизации). Кроме того, из-за паттерн-матчинга очень часто я замечаю за собой применение паттерна типа

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

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

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

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

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

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 — пример.
Они опять изобрели Perl. Только пока что сильно испорченный.
С таким синтаксисом популярность Rust не грозит. Будущее за D.
НЛО прилетело и опубликовало эту надпись здесь
НЛО прилетело и опубликовало эту надпись здесь
Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации

Истории