пятница, 22 июня 2018 г.

[prog.flame] А наброшу-ка на Rust по случаю тяпницы и релиза 1.27 :)

Вышел Rust 1.27.

Растоделы -- они такие, им все бежать нужно куда-то. Новая версия раз в полтора месяца, не реже. Иначе случится звиздец вселенских масштабов.

Понять такую спешку сложно (а объяснить можно разве что эффективным менеджментом). Особенно в сочетании с такими пассажами:

Additionally, we would like to draw attention to something: just before the release of 1.27.0, we found a bug in the ‘default match bindings’ feature introduced in 1.26.0 that can possibly introduce unsoundness. Since it was discovered very late in the release process, and has been present since 1.26.0, we decided to stick to our release train model. We expect to put out a 1.27.1 with that fix applied soon, and if there’s demand, possibly a 1.26.3 as well.

Т.е. в версии 1.26 добавили баг в компилятор. Обнаружили это незадолго до выхода версии 1.27. Но т.к. пофиксить до релиза 1.27 не успевали, то оставили все как есть. Т.е. обнаруженный баг теперь присутствует и в 1.26, и в 1.27. По-моему -- это просто прекрасно. Больше даров богам эффективного менеджмента, когда дата релиза важнее качества релиза.

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

pub fn foo(a: &[u8], b: &[u8], c: &mut [u8]) {

Ну ведь реально в этой строке каждая закорючка имеет архиважное значение :)

А что бы еще набросить на тему синтаксиса, вот прям скопирую фразу из анонса:

Rust’s trait object syntax is one that we ultimately regret.

Это из раздела про нововведение под названием dyn Trait. Кстати, сам этот раздел почему-то сильно напоминает знаменитый афоризм "хотели как лучше, получилось как всегда".

PS. Пока что получается, что как бы меня не задолбал C++ за 25 лет, адекватной замены для него пока еще нет. Ибо переход с C++ на Rust иногда выглядит как замена шила на мыло.

PPS. Еще прекрасный образчик синтаксиса по ссылке из комментариев:

fn new<'a: 'f>(foo: &'f Foo<'a>) -> Self {
    let foo1: &'f Foo<'f> = foo;
    Context { foo: foo1 }
}

Ну ведь это же просто восхитительно! Сразу возникает желание программировать на языке с таким понятным и читабельным синтаксисом ;)