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

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

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

Это не так. Если вы начнёте писать сейчас, то вы, так или иначе, будете следовать за nightly-сборками. Но первая стабильная версия, по сути, ответвится от nightly-сборки (предварительно пройдя через статус беты), поэтому, поскольку вы следуете за nightly-сборками, вы сможете совершенно безболезненно перейти на стабильную версию и больше не переписывать свой проект из-за ломающих изменений, потому что их не будет.
Вкратце-то оно классно выглядит, но порог входа страшно высокий для понимания средств библиотек, помогающих справиться с жесткостью borrow checker'а, на уровне, достаточном для написания серьезного проекта.
И с модулями в недавнем обновлении опять что-то намутили, все руки не дойдут исправить мой проект, чтобы компилировался.
Чувствую себя идиотом и теряю интерес к языку.
Все, пожаловался :)
но порог входа страшно высокий для понимания средств библиотек, помогающих справиться с жесткостью borrow checker'а, на уровне, достаточном для написания серьезного проекта.

На самом деле не такой уж и высокий. Достаточно уяснить для себя базовые принципы, на которых работает borrow checker (это те самое владение данными, заимствования и семантика перемещения). После некоторого количества практики вы уже интуитивно станете понимать, как писать код так, чтобы borrow checker не ругался, и борьба с компилятором плавно сойдёт на нет. У меня это заняло меньше полугода очень нерегулярного программирования в свободное время.
И с модулями в недавнем обновлении опять что-то намутили, все руки не дойдут исправить мой проект, чтобы компилировался.

Вы, вероятно, имеете в виду enum'ы? Да, пока что ломающие изменения довольно часты, но вскоре всё изменится :)
Нет, именно модули. жалуется на
use modulename;
, хотя ниже
pub mod modulename;
, что настойчиво рекомендуется всей существующей документацией.
Существует папка modulename и mod.rs в ней.
Сейчас пришло в голову, что вроде бы были какие-то изменения как раз касательно mod.rs, но проверять сейчас не с руки.
PS не знаю, как заинлайнить на хабре код в строчку :(
Странно, что такая ваша программа компилировалась, потому что подобный код не работает уже давно (и я, если честно, вообще не помню чтобы так вообще когда-то было). Можете, пожалуйста, показать, какой именно документацией рекомендуется писать use и mod для одного и того же модуля?

Как мне кажется, довольно логично, что вам не нужно делать use на модуле, который объявляется непосредственно в этом же месте. Если вы сделаете rustc --pretty=expanded crate_root.rs, то компилятор вам выдаст представление всей единицы компиляции со всеми модулями, так как он его видит. В этом представлении очень хорошо видно, как модули вкладываются друг в друга.
Неточно сказал, там
use modulename::Type;

Но ошибка при компиляции как раз была о том, что ему неизвестен модуль modulename, который объявляется ниже.

А вот сейчас хотел дословно ошибку привести, но тот код уже компилируется.
Значит, просто в ночной сборке модули сломались. Значит, ничего исправлять не надо :)
Да, в таком случае, это очень странно, и скорее всего это был баг.
PS не знаю, как заинлайнить на хабре код в строчку :(
Есть тег code: <code>use modulename;</code> станет use modulename;.
Отличное выступление, спасибо.
НЛО прилетело и опубликовало эту надпись здесь
Не совсем понятно про
fn print_slice(items: &[&Show]) {
    for item in items.iter() {
        println!("{}", item);
    }
}

print_slice(&[&1i, &2i, &"a"]);

Тк у раста 0 оверхед на типы, то я так понимаю этот код показывает чисто силу статического анализатора. Могу ли я сделать то же самое с данными приходящими по сети или читаемыми с диска во время исполнения? И если да, то как это работает?
Тк у раста 0 оверхед на типы, то я так понимаю этот код показывает чисто силу статического анализатора.

Не совсем. В этом месте используются как раз trait objects, для которых применяется динамическая диспетчеризация.

Show — это трейт, поэтому &Show — это т.н. fat pointer, структура из двух указателей: на сами данные и на таблицу виртуальных методов трейта. За счёт такого представления ссылки на объекты разных типов, реализующих один трейт, можно положить в один массив.

Безусловно, вы можете это сделать с данными, приходящими по сети, если они в вашей программе представлены типом, реализующим соответствующий трейт.
Те вариант с fn print_slice<T: Show>(items: &[T]) не имеет оверхед на данные, а fn print_slice(items: &[&Show]) имеет, что в целом все объясняет.
Да, примерно так, но оверхедом дополнительное разыменование указателя в 99% случаев назвать трудно :)
В случае с таблицей виртуальных методов становятся недоступен ряд оптимизаций: inline функции из trait’а сделать не получится (или получится, но только вместе с inlin’ом print_slice, а я сомневаюсь, что компилятор сейчас на такое способен, даже если в конкретном случае такое возможно). Так что в худшем случае получите дополнительно оверхед на вызов функции (а то и двух, если шаблонная inlin’илась), плюс отсутствие оптимизаций результат inlin’а.
Googolplex, какую IDE вы используйте для разработки под RUST? Хочу попробовать побаловаться с Rust на Ubuntu, можете порекомендовать какую-нибудь IDE или тесктовый редактор для этих целей? Возможно вопрос нубский, но я в основном Windows-user, и из IDE на linux-е работал только с Intellij Idea и не очень разбираюсь, что обычно используют в линукс системах.
К сожалению, для Rust пока нет IDE. Лично я пользуюсь Vim + подсветка синтаксиса. Для IntelliJ IDEA есть плагин, включающий подсветку, но не более того. Вероятно, в будущем это изменится.
Сейчас пишу плагин Rust для Eclipse (плагин на Java). Есть подсветка синтаксиса, простой автокомплит (на основе слов из написанного кода), подсветка ошибок и возможность запуска приложения. Правда с Cargo пока работать не умеет, но Cargo можно добавить как External tool в Eclipse.

Если интересно могу скинуть ссылку на репозиторий и инструкции по установке.
Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации