Pull to refresh

Comments 18

Мне кажется вы знаете rust лучше чем swift, поэтому не особо объективно
А можно чуть поподробнее? Особенно мне интересно, как сделать так, чтобы Брезенхем на swift'е заработал столь же быстро, как на rust'е, при этом без потери выразительности.
Что только не изобретают, чтобы не пользоваться Smalltalk ;-)
А насколько он быстрый код генерит?
Байткод, аналогичный Java, или любому иному, в новых виртуальных машинах по умолчанию включён режим JIT компиляции.
По ссылке какой-то дремучий маркетинг и ни одной цифры
Чувствую буду заминусован, но мне человеку привыкшему к C/Delphi очень сложно воспринимать этот синтаксис, что у Rust, что у Swift. На мой взгляд переборщили с синтаксическим сахаром.
Интересно какой синтаксис у нового поколения программистов меньше проблем вызовет?
В ржавчине переборщили с сахаром? О.о Обычно на обратное ругаются, что «очевидные компилятору вещи» нужно явно выписывать и «синтаксической соли» (типа `let mut`) слишком много)

А что именно мешает воспринимать код? Мне в голову в первую очередь локальный вывод типов приходит, но он во все языки сейчас потихоньку просачивается, вроде как уже норма (`auto auto(auto) auto` :) ).
Лично мне мешает воспринимать код огромное количество «сахара» вроде x=>x:x, в управляющих структурах с семантикой ассоциативных структур данных, вроде match. После лиспа в котором все ассоциативные структуры любого рода и назначения выглядят просто как {ключ значение} фильтровать эту визуальную шелуху очень тяжело. В том же ML и F# с сахаром дела обстоят куда как лучше.
Сложно сказать, в match получаются очень аккуратные таблички, значительно упрощающие визуальный разбор.
Лапша из if() elseif() или case: break — явно проигрывает по читабельности.
Но это не ассоциативные структуры а pattern matching, и по моему выглядят вполне естественно.
«Сахара» rust очень и очень мало, то что можно назвать «сахаром» есть макросы.
В лиспе сопоставление с образцом реализуется как макрос над ассоциативной структурой данных которая состоит из образцов и соответствующих значений: (match val {pat val pat val ...}).
Ну вот по поводу очевидных вещей, дописал небольшой update. Иной раз для нас то вещи кажутся очевидными, а для компилятора нет.
Не знаю, как у нового поколения, а как человек, начинавший с паскаля в 90-х и десяток лет посвятивший Делфи и перепробовавший разных языков, скажу: Rust весьма нагружен низкоуровневым синтаксисом, позволяющим контролировать многое. Это делает его итак не самым лаконичным языком. Поэтому компактное описание управляющих структур, возможность выносить многое «за скобки» макросов — тут только идёт на пользу языку. А в целом — «сахара» как такового не так уж и много. Хотя, конечно, всё относительно, но сравнивать с любимым языком, не вникнув в изучаемый — не перспективно. Первое время изучая новый язык тащишь в него привычный подход и отработанные шаблоны кода, которые обычно плохо ложатся на внутреннюю логику другого языка, поэтому на предвзятый взгляд этот «другой язык» может казаться странным и уродливым, а местами очень нелогичным. Этот этап так или иначе нужно пройти, прежде чем сделать объективный вывод.
Я вообще, так сказать, мимопроходил (программирование для меня скорее хобби), но как по мне, Swift значительно читабельнее Rust'а со всеми этими его fn apply<F: 'static>(f: F, v1: i32) -> Box<Fn(i32) -> ()>
Просто, раст намного сложнее, отсюда и более сложный синтаксис.

Сейчас в Rust (с версии 1.26) можно записать так:


fn apply(func: impl Fn(i32, i32) -> i32, v1: i32) -> impl Fn(i32) -> i32
{
    move |v2| func(v1, v2)
}
Only those users with full accounts are able to leave comments. Log in, please.