Команда 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 написал заметку об этом в своем журнале, где показаны некоторые часто встречающиеся отличия движков и способы их обхода. В будущем выпуске CommonMark движок будет использоваться по умолчанию. Предупреждение появилось в ночной версии в мае прошлого года и было включено по умолчанию с октября прошлого года, поэтому многие пакеты (crates) уже исправили встретившиеся проблемы.


Еще немного о документации: исторически, документация по Cargo была немного странной. Вместо того чтобы располагаться на doc.rust-lang.org, она была расположена на doc.crates.io. С этим выпуском это изменится: теперь вы можете найти документацию Cargo на doc.rust-lang.org/cargo. Мы добавим перенаправление с doc.crates.io на эту страницу. Кроме того, документация была преобразована в наш "книжный" формат.


Подробности смотрите в примечаниях к выпуску.


Стабилизации стандартной библиотеки


Начиная с Rust 1.0, существует типаж (trait) AsciiExt, который предоставляет относящуюся к ASCII функциональность для u8, char, [u8] и str. Чтобы использовать его, вам нужно было написать подобный код:


use std::ascii::AsciiExt;

let ascii = 'a';
let non_ascii = '';
let int_ascii = 97;

assert!(ascii.is_ascii());
assert!(!non_ascii.is_ascii());
assert!(int_ascii.is_ascii());

В Rust 1.23 эти методы объявлены непосредственно для типов, поэтому вам больше не нужно импортировать типаж. Благодаря нашим гарантиям стабильности этот типаж все еще существует, так что если вы хотите поддерживать версии Rust ниже 1.23, вы можете написать:


#[allow(unused_imports)]
use std::ascii::AsciiExt;

… чтобы подавить соответствующее предупреждение. Когда вы откажитесь от поддержки старых версий Rust, обе строчки можно будет удалить и все продолжит работать.


Так же, было стабилизировано несколько API:



Подробности смотрите в примечаниях к выпуску.


Cargo features


cargo check теперь может проверять ваши модульные тесты.


cargo uninstall теперь может удалять больше одного пакета одной командой.


Подробности смотрите в примечаниях к выпуску.


Разработчики 1.23.0


Множество людей участвовало в разработке Rust 1.23. Мы не смогли бы этого добиться без участия каждого из вас. Спасибо!


Авторы перевода: @BORN2LOSE и ozkriff.

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


  1. amarao
    05.01.2018 14:23
    -4

    Перевод trait как «типаж» мне выносит мозг. Рядом кто-то переводил коммиты гита как «фиксации». Вы специально это?


    1. Mingun
      06.01.2018 12:53

      Простите, а что такого мозговыносящего в адекватных переводах? Или вы тупые кальки предпочитаете?


      1. izzholtik
        08.01.2018 21:06
        +2

        Активность, намерение.
        Иногда тупая калька намного лучше перевода, особенно когда слово на изначальном языке использовалось в переносном значении.


  1. ozkriff Автор
    05.01.2018 14:23
    +4

    Очень маленькая новость, судя по всему следующая будет больше — несколько вещей на 1.24 "съехали" по срокам.


    Тем временем я вернулся к относительно активной работе над своей пошаговой игрой на расте — https://github.com/ozkriff/zemeroth — вроде бы оно постепенно начинает напоминать что-то играбельное. Есть шансы что хоть этот проект не попадет на "кладбище недоделок".


    1. k12th
      05.01.2018 15:50

      У вас же там вроде бы были танчики и вертолетики, ЕМНИП. Концепция поменялась?:)


      1. ozkriff Автор
        05.01.2018 15:55
        +2

        Ага, было такое, но летом пришел к выводу что переоценил свои силы и решил пилить проектик значительно меньший по амбициям, но такой что бы я его точно смог закончить — https://ozkriff.github.io/2017-08-17--devlog.html :)


        1. k12th
          05.01.2018 16:00
          +1

          Мудро:) Успеха вам!


  1. tgz
    05.01.2018 15:13
    +4

    Памяти действительно стал потреблять меньше. Было 3200KB, стало 2500KB. Мелоч, а приятно.


  1. Gexon
    05.01.2018 18:33

    Спасибо за перевод!


  1. erwins22
    05.01.2018 18:47
    -3

    почти нет изменений. Язык медленно умирает?


    1. DarkEld3r
      06.01.2018 20:07
      +2

      Ты это серьёзно?..


      1. erwins22
        08.01.2018 16:39
        -3

        Да. Напишите список крупных изменений С# и Rust за последний год.
        Я нуб, но на мой взгляд С# развивается быстрее.

        Да, Rust проходит стабилизацию и т д.
        Самое стабильное ПО — то чью разработку прекратили.


        1. DarkEld3r
          08.01.2018 20:45

          "Язык N развивается быстрее" — это уже совсем другое утверждение. Особенно забавно сравнение с C#, с которым раст вообще никак не конкурирует. В таком случае, можем на джаву посмотреть или на любой другой язык, у которого "релизный цикл" больше года — ещё веселее будет.


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


          1. erwins22
            08.01.2018 20:57
            -2

            Знаете парадокс черной королевы?
            Что бы оставаться на месте надо бежать со всех ног, а что бы еще и достичь пункта назначения надо бежать еще быстрее.

            Я надеялся увидеть ответ, что Rust живет, развивается… С конкретикой. Но судя по реакции я просто высказал отгоняемые мысли.


            1. DarkEld3r
              08.01.2018 23:30

              С какой ещё конкретикой? Можно просто зайти в чейнжлог и почитать. Всё остальное, в том числе оценка изменений, субъективно. Можно, например, поспорить, насколько полезно ускорение времени компиляции, которой уделяется много внимания в последнее время. Но зачем?


              Я надеялся увидеть ответ, что Rust живет, развивается… С конкретикой. Но судя по реакции я просто высказал отгоняемые мысли.

              Я надеялся на вменяемый диалог, но судя по всему, это просто троллинг, ага.


  1. sand14
    05.01.2018 20:29
    +2

    Термин "типаж" довольно необычен, однако, сразу на интуитивном уровне дает понимание концепции trait'ов:


    • это не что-то строгое, когда мы наследуемся от типа, и уже никуда не можем уйти из иерархии и предопределенного поведения (свобода лишь в пределах добавления нового поведение и полиформизма, если таковой есть);
    • это лишь то, что в определенном разрезе наши объекты будут соответствовать определенному "типажу" — иметь определенные черты, и при этом эти объекты не будут вписаны в какую-то строгую иерархию типов, определяющих эти черты, что дает свободу в определении типа (типов), от которых будут создаваться объекты;
    • другими словами, trait'ы похожи на mixin'ы — они примешиваются к типу при его определении (в то время, как "миксины" могут примешиваться и к объектам).


    1. deb
      08.01.2018 01:50
      +2

      Историческая справка. Перевод trait как "типаж" возник при чтении первой книги по Scala и был выбран при следующих ограничениях в порядке приоритета: он должен был быть


      1. ассоциирован с дословным переводом (черта)
      2. и функциональной нагрузкой (тип),
      3. не перерегруженным,
      4. желательно кратким (2 слога)
      5. и в чём-то созвучным с оригиналом (первая буква "т").

      Этот перевод выиграл у конкурента "черта", который обладал только пунктами 1, 3 и 4.


  1. Kaiwas
    05.01.2018 22:43

    «нацеленный на безопасность, скорость и параллельное выполнение кода»
    После 3-го января 2018-го эта фраза никогда не будет прежней


    1. unsafePtr
      05.01.2018 23:12

      Думаете Intel и другие разработчики процессоров сразу же пересядут на Rust? Учитывая что программирование касаемо hardware довольно небезопасно, то сплошь и рядом придётся писать блоки unsafe кода.


    1. red75prim
      06.01.2018 00:33

      Теперь есть аппаратные дырки, поэтому об обычных можно не беспокоиться?