• Выпуск Rust 1.33

    • Перевод

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


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


    $ rustup update stable

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


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


    Основные улучшения этого выпуска: значительное расширение возможностей const fn и стабилизация нового Pin API.


    Расширение возможностей const fn


    const fn теперь умеет гораздо больше, а именно:


    • безусловное (irrefutable) сопоставление с образцом (например, const fn foo((x, y): (u8, u8)) { ... })
    • let привязки (например, let x = 1;)
    • изменяемые let привязки (например, let mut x = 1;)
    • выражения присваивания (например x = y) и операторов присваивания (например, x += y), включая присваивание проекциям (например, полю структуры или результату оператора индексирования — x[3] = 42)
    • инструкции выражений (expression statements) (например, 3;)
    Читать дальше →
  • Rust новости #5 (январь 2019)

      Предлагаю вашему вниманию субъективную подборку ржавых новостей за январь. В этой подборке: Rust 1.32, уход Стива Клабника и Ника Камерона, киш от Cloudflare, устройство rust-analyzer и страничной памяти, поиски GUI и async, Oxydyze конференция для встроенщиков.


      КДПВ


      Rust 1.32


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



      Подробности в переводе новости.


      Стив Клабник и Ник Камерон уходят из Mozilla


      NYT firefox 1.0


      Печальные новости: Стив Клабник и Ник "nrc" Камерон покидают Мозиллу.

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

        Поскольку праздники кончились, предлагаю вашему вниманию субъективную подборку ржавых новостей за декабрь. В этой подборке: безумие с растом, страшен ли раст, волна пророчеств, Rust 2018, Rust Analyzer.


        КДПВ


        Rust 1.31 & Rust 2018


        Самое важное событие декабря — выпуск Rust 1.31 и Rust 2018, конечно. Туда очень много всего вошло:


        редакция 2018, нелексические времена жизни, изменения системы модулей, дополнительные правила вывода времен жизни, const fn, новые инструменты, инструментальные проверки качества кода, документация, новый веб-сайт, улучшения в cargo.

        Изменений так много, что обзор всех не получилось запихнуть в один пост, так что через несколько дней были опубликованы вспомогательные заметки:



        Также, имеет смысл полистать мозиловский хорошо структурированный обзор/ликбез 2018й редакции языка: Rust 2018 is here… but what is it? (перевод, обсуждение).

        Читать дальше →
      • 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,8k
            • 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,2k
              • 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> стабилизировано. Теперь такой код соберется:

              Читать дальше →
            • Выпуск 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. Вот неплохие практики (еще рановато называть их "лучшими"), которые помогут другим людям находить, использовать и дополнять вашу библиотеку.

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