• Rust новости #3 (ноябрь 2018)

      КДПВ про Rust2018


      Предлагаю вашему вниманию субъективную подборку ржавых новостей за ноябрь. В этой подборке: Rust 2018, RustRush, видео с конференций, Amazon Lambda и Firecracker, квизы, переход exonum на actix-web, 10 причин использовать Rust.


      Результаты Rust опроса 2018


      график из опроса про сложность изучения тем


      Опубликованы результаты ежегодного Rust-опроса (обсуждение), который шел с августа.

      Читать дальше →
    • Новости Rust #2 (октябрь 2018)

        КДПВ с тыквой, потому что хэллоуин


        Лучше с задержкой на неделю, чем никогда, так что предлагаю вашему вниманию субъективную подборку ржавых новостей за октябрь.


        В этой подборке: Rust 1.30, Rust 2018, конференция RustRush, Amethyst 0.9, сквотинг crates.io, сборщик мусора, споры про 2D графику, Non-lexical lifetimes, функциональный GUI.


        Rust 1.30 и тестирование Rust2018


        Вышел Rust 1.30 (обсуждение). Основные нововведения — частичная стабилизация процедурных макросов, импорт макросов через обычный use, улучшение системы модулей, "сырые" идентификаторы и поддержка no_std приложений (подробнее в хабропереводе).


        Rust 1.31 будет первым выпуском редакции (edition) "Rust2018" (что за "редакции"?), в связи с чем всех желающих приглашают подключаться к тестированию бета версии 1.31 и cargo fix.


        RustRush 2018: конференция 15-16 декабря в Москве


        RustRush 2018 — конференция для разработчиков на Rust, посвящённая вебу, блокчейну, высокой производительности и системному программированию.


        Обновился сайт (rustrush.ru) — опубликован почти полный список докладчиков и программа, начата продажа основной партии билетов.


        Будут четыре участника проекта Rust Language: Стив Клабник, Эшли Уильямс, Паскаль Хертлиф, Катарина Фей. Из других звёзд локальных и не очень — Максим Лапшин с прошивкой IP-камеры, Костя Степанов и Пьер Кригер aka tomaka. Программа.

        Читать дальше →
        • +43
        • 4,5k
        • 9
      • Новости Rust #1 (Сентябрь 2018)

          кдпв


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


          В этой подборке: Rust 1.29, записи докладов с Rustconf 2018, gfx-rs, Rust2018, порт Flatbuffers, новые версии ripgrep и Alacritty.


          Rust 1.29


          Вышел Rust 1.29. Основные нововведения — доступные сразу из rustupcargo fix и cargo clippy (подробнее в хабропереводе).


          Следом была выпущена версия 1.29.1, закрывшая ошибку в std::repeat (обсуждение).


          Rust 1.30 и 1.31 будут очень значительными.

          Точного списка пока нет, но ожидается что:


          • в 1.30 (2018.10.26) войдет частичная стабилизация процедурных макросов;
          • в 1.31 (2018.12.07) войдут Rust 2018 + non-lexical lifetimes (NLL).
          Читать дальше →
          • +41
          • 6,1k
          • 6
        • Выпуск Rust 1.29

          • Перевод

          Команда разработчиков Rust рада сообщить о выпуске новой версии Rust: 1.29.0. Rust — это системный язык программирования, нацеленный на безопасность, скорость и параллельное выполнение кода.


          Если у вас установлена предыдущая версия Rust с помощью Rustup, то для обновления Rust до версии 1.29.0 вам достаточно выполнить:


          $ rustup update stable

          Если у вас еще не установлен Rustup, вы можете установить его с соответствующей страницы нашего веб-сайта. С подробными примечаниями к выпуску Rust 1.29.0 можно ознакомиться на GitHub.


          Что вошло в стабильную версию 1.29.0


          1.29 привносит не очень много изменений. Ожидается что Rust 1.30 и 1.31 будут очень значительными, так что большая часть 1.29 итерации ушла на подготовку к будущим изменениям. Два самых заметных нововведения этого выпуска даже не касаются самого языка: это две новые возможности Cargo и обе они касаются предупреждений.


          • cargo fix автоматически исправляет предупреждения в коде
          • cargo clippy — статический анализатор Rust кода, помогающий поймать распространенные ошибки и просто улучшить код

          cargo fix


          С выпуском Rust 1.29 у Cargo появляется новая подкоманда: cargo fix. Если вы когда-либо писали на Rust, то скорее всего уже сталкивались с предупреждениями компилятора. Например, рассмотрим такой код:


          fn do_something() {}
          
          fn main() {
              for i in 0..100 {
                  do_something();
              }
          }

          В нем мы вызываем do_something сто раз, но никогда не используем переменную i. Rust предупреждает нас об этом:

          Читать дальше →
        • Выпуск Rust 1.25

          • Перевод

          Команда Rust рада сообщить о новой версии Rust: 1.25.0. Rust — это системный язык программирования, нацеленный на безопасность, скорость и параллельное выполнение кода.


          Если у вас установлена предыдущая версия Rust, для обновления достаточно выполнить:


          $ rustup update stable

          Если же у вас еще не установлен rustup, вы можете установить его с соответствующей страницы нашего веб-сайта. С подробными примечаниями к выпуску Rust 1.25.0 можно ознакомиться на GitHub.


          Что вошло в стабильную версию 1.25.0


          Несколько последних выпусков были незначительными, но Rust 1.25 содержит много
          нововведений! Во-первых: мы обновили LLVM с 4-ой версии до 6-ой. Обновление
          влечёт ряд изменений, наиболее важное из которых — поддержка AVR.

          Читать дальше →
          • +36
          • 7,1k
          • 9
        • Неявность

          • Перевод

          Часто, когда я обсуждаю дизайн Rust на RFCs или на internals-форуме с другими пользователями, я замечаю характерные высказывания насчет явности. Обычно что-то в духе:


          Мне не нравится <дизайн возможности X>, потому что он менее явный. Всякая магия уместна в <другом языке Y>, а Rust — это явный язык, так что следует использовать <дизайн возможности Z>.

          Подобные комментарии жутко меня раздражают, потому что дают очень мало полезной обратной связи. Они лишь утверждают, что "явное лучше неявного" (при этом предполагается, что это бесспорное утверждение), и что какой-то дизайн менее явный, чем альтернатива (хотя часто даже не приводится объяснений, почему именно критикуемый дизайн менее явный), из чего следует, что их подход предпочтительнее.


          В своей опубликованной ранее в этом году заметке Аарон пытался докопаться до сути вопроса явности, обсуждая размер контекста (reasoning footprint). Он попытался разбить понятия "явность" и "неявность" на составные части, чтобы подготовить почву для суждения о явности дизайна той или иной возможности. Я же хочу изложить немного другой взгляд на проблему и попытаюсь очертить в общих словах, что мы подразумеваем под словом "явный".


          Английский — довольно нечеткий язык, в котором прилагательные имеют множества контекстно-зависимых значений, например, как используется слово "нечеткий" (fuzzy) в предыдущем предложении. Слово "явный" тоже многозначно, так что я не могу утверждать наверняка, что кто-то неправильно использует это слово. Однако я предлагаю выражать свои мысли при обсуждении "явности" более четко, чтобы все лучше понимали, о чем именно идет речь.

          Читать дальше →
        • Выпуск Rust 1.23

          • Перевод

          Команда Rust рада сообщить о новой версии Rust: 1.23.0. Rust — это системный язык программирования, нацеленный на безопасность, скорость и параллельное выполнение кода.


          Если у вас установлена предыдущая версия Rust, для обновления достаточно выполнить:


          $ rustup update stable

          Если же у вас еще не установлен rustup, вы можете установить его с соответствующей страницы нашего веб-сайта. С подробными примечаниями к выпуску Rust 1.23.0 можно ознакомиться на GitHub.


          Что вошло в стабильную версию 1.23.0


          Новый год, новый Rust! Нашим первым улучшением является избавление от избыточных копий в некоторых ситуациях. С этими изменениями потребление памяти rustc уменьшилось на 5-10%, но результаты для ваших приложений могут отличаться.


          Команда документации прошла долгий путь для того чтобы rustdoc использовал CommonMark. До этого rustdoc не гарантировал какой движок отрисовки markdown он использовал. В рамках этого выпуска мы все еще визуализируем документацию нашим прошлым движком — Hoedown — но параллельно визуализируем еще и совместимым с CommonMark движком, выдавая предупреждения при различных результатах. Нам еще не встречались ситуации, где нельзя было бы изменить синтаксис документа так, чтобы он удовлетворял обоим движкам сразу. Участник команды документации Guillaume Gomez написал заметку об этом в своем журнале, где показаны некоторые часто встречающиеся отличия движков и способы их обхода.

          Читать дальше →
        • Выпуск Rust 1.22 (и 1.22.1)

          • Перевод

          Команда Rust рада сообщить о двух новых версиях Rust: 1.22.0 и 1.22.1. Rust — это системный язык программирования, нацеленный на безопасность, скорость и параллельное выполнение кода.


          Подождите, две версии? В последний момент мы обнаружили проблему с новой macOS High Sierra в версии 1.22.0 и по разным причинам выпустили версию 1.22.0 как обычно, но так же выпустили 1.22.1 с исправлением. Ошибка была найдена в менеджере пакетов Cargo, а не в rustc, и затронула только пользователей macOS High Sierra.

          Если у вас установлена предыдущая версия Rust, для обновления достаточно выполнить:


          $ rustup update stable

          Если же у вас еще не установлен rustup, вы можете установить его с соответствующей страницы нашего веб-сайта. С подробными примечаниями к выпуску Rust 1.22.0 и 1.22.1 можно ознакомиться на GitHub.


          Что вошло в стабильную версии 1.22.0 и 1.22.1


          Самое главное изменение в этой версии, которого многие долго ждали: теперь вы можете использовать ? с Option<T>! Около года назад, в Rust 1.13, мы ввели оператор ? для работы с Result<T, E>. С тех пор ведутся дискуссии о том, как далеко оператор ? должен зайти: Должен ли он остаться только для Result? Разрешать ли пользователям расширять его? Должен ли он использоваться с Option<T>?


          В Rust 1.22, основное использование оператора ? с Option<T> стабилизировано. Теперь такой код соберется:

          Читать дальше →
          • +31
          • 5,9k
          • 5
        • Выпуск Rust 1.21

          • Перевод

          Команда Rust рада представить выпуск Rust 1.21.0. Rust — это системный язык программирования, нацеленный на скорость, безопасность и параллельное выполнение кода.


          Если у вас установлена предыдущая версия Rust, для обновления достаточно выполнить:


          $ rustup update stable

          Если же у вас еще не установлен rustup, вы можете установить его с соответствующей страницы нашего веб-сайта. С подробными примечаниями к выпуску Rust 1.21.0 можно ознакомиться на GitHub.


          Что вошло в стабильную версию 1.21.0


          Этот выпуск содержит несколько небольших, но полезных изменений языка и новую документацию.


          Первое изменение касается литералов. Рассмотрим код:


          let x = &5;

          В Rust он аналогичен следующему:


          let _x = 5;
          let x = &_x;

          То есть 5 будет положено в стек или возможно в регистры, а x будет ссылкой на него.


          Однако, учитывая, что речь идет о целочисленном литерале, нет причин делать значение таким локальным. Представьте, что у нас есть функция, принимающая 'static аргумент вроде std::thread::spawn. Тогда вы бы могли использовать x так:


          use std::thread;
          
          fn main() {
              let x = &5;
          
              thread::spawn(move || {
                  println!("{}", x);
              });
          }
          Читать дальше →
        • Выпуск Rust 1.17

          • Перевод

          Команда Rust рада представить выпуск Rust 1.17.0. Rust — это системный язык программирования, нацеленный на безопасность, скорость и параллельное выполнение кода.


          Если у вас установлена предыдущая версия Rust, то для обновления достаточно выполнить:


          $ rustup update stable

          Если у вас ещё не установлен Rust, то вы можете установить rustup c соответствующей страницы нашего веб-сайта и ознакомиться с подробным примечанием к выпуску 1.17.0 на GitHub.


          Что вошло в стабильную версию 1.17.0


          Выпуск Rust 1.17.0 в основном вносит небольшие улучшения, преимущественно касающиеся удобства использования. Например, время жизни 'static теперь автоматически подразумевается для констант или статических переменных. При создании константы или статической переменной:


          Читать дальше →
        • Выпуск Rust 1.16

          • Перевод

          Команда Rust рада представить выпуск Rust 1.16.0. Rust — это системный язык программирования, нацеленный на безопасность, скорость и параллельное выполнение кода.


          Если у вас установлена предыдущая версия Rust, то для обновления достаточно выполнить:


          $ rustup update stable

          Если у вас ещё не установлен Rust, то вы можете установить rustup c соответствующей страницы нашего веб-сайта и ознакомиться с подробным примечанием к выпуску 1.16.0 на GitHub.


          Что вошло в стабильную версию 1.16.0


          Самым большим дополнением в Rust 1.16 является команда cargo check. Эта новая подкоманда в большинстве случаев должна ускорить процесс разработки.


          Что она делает? Давайте вернёмся немного назад и поговорим о том, как rustc компилирует ваш код. Компиляция происходит в несколько "проходов". Это значит, что компилятор выполняет множество различных этапов, прежде чем из вашего исходного кода будет создан бинарный файл. Вы можете увидеть каждый их этих этапов (и сколько времени и памяти они занимают) передав компилятору параметр -Z time-passes (только для nightly):


          Читать дальше →
        • Советы по написанию библиотек на Rust

          Перевод статьи Pascal Hertleif "Good Practices for Writing Rust Libraries" (2015.10.24).



          Прошел примерно год, как меня заинтересовал Rust, язык программирования от Mozilla Research, сосредоточенный на решении трёх задач: безопасность, скорость и параллелизм. Он такой же низкоуровневый, как Си или C++, имеет хорошую систему типов (с обобщениями (generics) и типажами (traits)), дружелюбный компилятор и отличный менеджер пакетов Cargo.


          С выпуска Rust 1.0 прошло уже полгода (май 2015): многие библиотеки (пакеты, crates), включая некоторые мои, были опубликованы в центральном регистре crates.io. Вот неплохие практики (еще рановато называть их "лучшими"), которые помогут другим людям находить, использовать и дополнять вашу библиотеку.

          Читать дальше →