Comments 19
UFO just landed and posted this here
Подход сам по себе не ужасный, но он ухудшает читаемость кода. Однако компилятор вроде как отлавливает все эти скользкие моменты.
0
UFO just landed and posted this here
UFO just landed and posted this here
return еще хуже. При перемещении строчки с return, меняется смысл других строчек — некоторые перестают выполняться.
0
Тоже так кажется. Да и вообще, снова эти точки с запятой, почему я должен думать об этой фигне, а не компилятор?
-3
А loop с метками это какой-то жуткий goto
+2
UFO just landed and posted this here
Ну
или что-то подобное. Актуально для парсеров.
loop
это по сути то же самое что while true
в других языках — просто сокращение (которое ещё может учитываться компилятором для оптимизации). Кроме того, из-за паттерн-матчинга очень часто я замечаю за собой применение паттерна типаloop {
match do_something {
p1 if a => { ... }
p2 if b => { ... }
something_else => { ...; break }
}
}
или что-то подобное. Актуально для парсеров.
0
Лично я не вижу никакой ужасности этого подхода. Вариант с оператором return немного проще замечается, зато вариант со специальным синтаксисом для финального выражения короче и более адекватно смотрится с короткими анонимными функциями, которые в Rust довольно часто используются. Я бы не сказал, что читаемость в целом страдает.
Я так понимаю, этот вариант достался ржавчине от функциональных языков (ocaml, например).
На практике, пока я экспериментировал с ржавчиной ( github.com/ozkriff/marauder ), никаких сложностей с этим у меня не возникало: если у функции в сигнатуре есть "->" то сразу понятно, что последняя строчка чего-то возвращает, а анонимные функции обычно очень короткие (иначе стоит вынести из них логику) и в них вообще все сразу понятно.
По этому поводу интересная статейка давно еще была: lucumr.pocoo.org/2012/10/18/such-a-little-thing
Я так понимаю, этот вариант достался ржавчине от функциональных языков (ocaml, например).
На практике, пока я экспериментировал с ржавчиной ( github.com/ozkriff/marauder ), никаких сложностей с этим у меня не возникало: если у функции в сигнатуре есть "->" то сразу понятно, что последняя строчка чего-то возвращает, а анонимные функции обычно очень короткие (иначе стоит вынести из них логику) и в них вообще все сразу понятно.
По этому поводу интересная статейка давно еще была: lucumr.pocoo.org/2012/10/18/such-a-little-thing
+3
Да не, достаточно удобно. Главное, что если вы функцию опишете как возвращающую что-то, но влепите лишнюю
is.gd/9tD5AB — пример.
';'
, то оно не скомпилируется.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 — пример.
+2
Они опять изобрели Perl. Только пока что сильно испорченный.
-9
С таким синтаксисом популярность Rust не грозит. Будущее за D.
-10
Вот читаю уже вторую статья… Может вы лучше сразу перейдете к хардкоку, и напишите про управление памяти в Rust? А как циклы работают, ну это и так все очень просто…
+3
Это же перевод rustbyexample.com — управление памятью и т.п. начнется, если я не ошибаюсь, в главе «19 Box, stack and heap» — осталось всего семь глав.
+3
Sign up to leave a comment.
Rust на примерах. Часть 2