The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

Релиз языка программирования Rust 1.19

23.07.2017 08:45

Подготовлен релиз языка программирования Rust 1.19, развиваемого проектом Mozilla, обеспечивающего автоматическое управление памятью и предоставляющего средства для высокого параллелизма выполнения заданий, при этом обходясь без использования сборщика мусора и runtime. Параллельно с Rust совместно с компанией Samsung развивается экспериментальный браузерный движок Servo, написанный на языке Rust и отличающийся поддержкой многопоточного рендеринга web-страниц и распараллеливанием операций с DOM (Document Object Model). На Rust также разрабатывается операционная система Redox, использующая концепцию экзоядра и продвигающая принцип "все есть URL".

В подготовке нового выпуска приняли участие 144 разработчика. Основные новшества:

  • Добавлена поддержка структур данных "union", представляющих собой объединения, совместимые с аналогичным типом в языке Си. В отличие от структур enum, в union не производится сохранение тегов, используемых для проверки выбора корректного варианта данных во время выполнения, т.е. запись и чтение полей в "union" может применяться только в блоках unsafe. Основным назначением union является обеспечение переносимости с кодом на языке Си и упрощение создания обвязок вокруг библиотек на Си;
    
       union MyUnion {
           f1: u32,
           f2: f32,
       }
    
       let u = MyUnion { f1: 1 };
       unsafe { u.f1 = 5 };
       let value = unsafe { u.f1 };
    
  • Реализована возможность прерывания цикла с возвратом определённого значения. Например, теперь можно обойтись без создания промежуточной переменной для передачи результата работы цикла и использовать конструкции вида "let x = loop { break 7; };"
  • Замыкания (closures), которые не захватывают окружение, теперь могут быть приведены к типу "указатель на функцию". Например, "let f: fn(i32) -> i32 = |x| x + 1;";
  • Для сжатия архивов вместо gzip по умолчанию теперь применяется сжатие с использованием xz;
  • Добавлена поддержка сборки компилятора (bootstrap) в окружении платформы Android;
  • В разряд стабильных переведена новая порция функций и методов, в том числе API OsString::shrink_to_fit, cmp::Reverse, Command::envs и thread::ThreadId. Также стабилизированы макросы "eprint!" и "eprintln!", которые работают по аналогии с "print!" "еprintn!", но выводят результат в stderr вместо stdout;
  • В пакетном менеджере Cargo прекращён учёт локального рабочего каталога в индексе crates.io, что позволило добиться сокращения размера файла со сборочным реестром и уменьшить время операций клонирования. В команду "cargo bench" добавлена опция "--all" для вызова тестов сразу для всех пакетов в указанном рабочем окружении (отдельные пакеты можно исключить через опцию "--exclude"). В опции "--features" теперь допускается перечисление нескольких значений, разделённых запятой или пробелом. Реализована возможность подключения своих обработчиков (runner) для заданных целевых платформ.

Напомним, что язык Rust сфокусирован на безопасной работе с памятью и обеспечении высокого параллелизма выполнения заданий. При этом Rust обходится без использования сборщика мусора или runtime, что делает возможным создания на Rust библиотек, которые могут выступать в роли прозрачной замены библиотекам для языка Си. Для распространения библиотек на языке Rust, обеспечения сборки и управления зависимостями проектом развивается пакетный менеджер Cargo, позволяющий получить нужные для программы библиотеки в один клик. Для размещения библиотек введён в строй репозиторий crates.io.

По структуре язык Rust напоминает C++, но существенно отличается в некоторых деталях реализации синтаксиса и семантики. Автоматическое управление памятью избавляет разработчика от манипулирования указателями и защищает от проблем, возникающих из-за низкоуровневой работы с памятью, таких как обращение к области памяти после её освобождения, разыменование нулевых указателей, выход за границы буфера и т.п. Rust поддерживает смесь императивных, процедурных и объектно-ориентированных методов с такими парадигмами, как функциональное программирование, обобщённое программирование и метапрограммирование, в статических и динамических стилях.



  1. Главная ссылка к новости (https://blog.rust-lang.org/201...)
  2. OpenNews: Эксперимент по разработке частей ядра Linux на языке Rust
  3. OpenNews: Доступна операционная система Redox 0.2, написанная на языке Rust
  4. OpenNews: Успехи Rust: Подготовка первого выпуска Servo и использование Rust в новом хранилище Dropbox
  5. OpenNews: Facebook работает над реализацией сервера Mercurial на языке Rust
  6. OpenNews: В Firefox 48 начнётся интеграция компонентов на языке Rust
Лицензия: CC BY 3.0
Короткая ссылка: https://opennet.ru/46900-rust
Ключевые слова: rust
При перепечатке указание ссылки на opennet.ru обязательно


Обсуждение (32) Ajax | 1 уровень | Линейный | +/- | Раскрыть всё | RSS
  • 1.3, Аноним (-), 12:50, 23/07/2017 [ответить] [﹢﹢﹢] [ · · · ]  
  • –11 +/
    Годно... Заменит питон в машинном обучении - вообще будет замечательно
     
     
  • 2.5, nazarpc (?), 13:05, 23/07/2017 [^] [^^] [^^^] [ответить]  
  • +6 +/
    С чего бы это? У языков совсем разные цели и характеристики.
     
  • 2.6, Аноним (-), 13:07, 23/07/2017 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Но зачем? Rust же не векторный язык программирования как тот же R, или уж тем более не дифференцируемый и не вероятностный. Это нерационально же будет. Надеетесь получить какую-то экономию памяти и быстродействие? Вряд-ли это выйдет существенно.
     
     
  • 3.9, Аноним (-), 13:29, 23/07/2017 [^] [^^] [^^^] [ответить]  
  • +3 +/
    Раст претендует на функциональность. По производительности, естественно, питон он превосходит и идея в том, чтобы вообще использовать Раст в качестве основного языка, а не как нашлёпку над С++ библитеками в случае питона.

    Кстати,http://dawn.cs.stanford.edu/2017/04/25/weld/

     
     
  • 4.30, Аноним (-), 18:01, 24/07/2017 [^] [^^] [^^^] [ответить]  
  • +/
    > использовать Раст в качестве основного языка

    Каргокультисты as is.
    Забивать гвозди молотком, подметать молотком, резать хлеб молотком и т.д.

     
     
  • 5.34, KBAKEP (ok), 02:32, 25/07/2017 [^] [^^] [^^^] [ответить]  
  • –1 +/
    топором
     

  • 1.7, Аноним (-), 13:19, 23/07/2017 [ответить] [﹢﹢﹢] [ · · · ]  
  • –3 +/
    >Rust поддерживает смесь императивных, процедурных и объектно-ориентированных методов с такими парадигмами, как функциональное программирование, обобщённое программирование и метапрограммирование, в статических и динамических стилях.

    Будто спайс. Впрочем, пользователи Rust'a это растаманы, так что есть что-то общее.

    И вот даже https://benchmarksgame.alioth.debian.org/u64q/rust.html взять тесты производительности Раста против Си. Там же четко видно, что оно быстрее, но потребляет больше и при том значительно памяти.

    https://benchmarksgame.alioth.debian.org/u64q/compare.php?lang=rust&lang2=gpp
    А если взять против Си++, то он побеждает преимущественно в парсерах и мне кажется, что там победа из-за того, что используются другие алгоритмы в библиотеках раста, на комбинаторах, а не из-за преимущества языка в основном.

     
     
  • 2.11, Comdiv (ok), 16:03, 23/07/2017 [^] [^^] [^^^] [ответить]  
  • +3 +/
    >И вот даже https://benchmarksgame.alioth.debian.org/u64q/rust.html взять тесты
    >производительности Раста против Си. Там же четко видно, что оно быстрее

    Там же четко видно, что оно быстрее только в 1-м из 10-и воплощённых алгоритмов.

     
  • 2.21, RazrFalcon (ok), 11:42, 24/07/2017 [^] [^^] [^^^] [ответить]  
  • –2 +/
    Когда кажется...
     

  • 1.12, Comdiv (ok), 16:05, 23/07/2017 [ответить] [﹢﹢﹢] [ · · · ]  
  • –1 +/
    > Реализована возможность прерывания цикла с возвратом определённого значения.
    >... использовать конструкции вида "let x = loop { break 7; };"

    Вот из-за таких вещей язык становиться всё больше неадекватным.

     
     
  • 2.13, Аноним (-), 16:45, 23/07/2017 [^] [^^] [^^^] [ответить]  
  • +2 +/
    В расте же почти все - это выражения. Почему бы и нет
     
     
  • 3.14, Comdiv (ok), 16:59, 23/07/2017 [^] [^^] [^^^] [ответить]  
  • +/
    Ну да, внедрив одну не самую прекрасную возможность из Algol68, они не могут остановиться и  комбинируют её с другой не лучшей чертой - подчёркнутой неструктурностью потока выполнения. Авторы языка, пытаясь решить одни проблемы кодирования, возводят в стандарт вещи, приводящие к другим проблемам кодирования.
     
     
  • 4.15, nobody (??), 20:08, 23/07/2017 [^] [^^] [^^^] [ответить]  
  • +/
    Ну какие тут конкретно "проблемы кодирования"? В том же С++ это делается так:

    auto x = []{ for(...) return 7; }();

     
     
  • 5.18, Comdiv (ok), 01:19, 24/07/2017 [^] [^^] [^^^] [ответить]  
  • –1 +/
    > Ну какие тут конкретно "проблемы кодирования"?

    Это в 2-х словах не объяснить, потому что требует глубокого понимания и на простых примерах никак не проявляется. В этом состоит одна из проблем любителей принимать решения на основе созерцания микроскопических кусков кода. А дело в нарушении структурности потока выполнения, которое является важной составляющей надёжного программирования. В том же MISRA C неструктурное кодирование запрещено почти полностью.

     
     
  • 6.23, Аноним (-), 13:06, 24/07/2017 [^] [^^] [^^^] [ответить]  
  • +3 +/
    Это нововведение никак не нарушает структурность кода. Это простой ретурн из выражения, которого раньше почему-то не было во отличие от тех же ифов.

    В MISRA C запрещены goto и неявная рекурсия, а не возвращения значения из цикла.

     
     
  • 7.26, Comdiv (ok), 13:55, 24/07/2017 [^] [^^] [^^^] [ответить]  
  • –1 +/
    > Это нововведение никак не нарушает структурность

    Нарушает, так как струтктурность подразумевает три вида переходов: последовательное, ветвление, цикл по условию. Никаких прыжков из середины цикла не предусмотрено в том числе.

    > В MISRA C запрещены goto и неявная рекурсия,  а не возвращения значения из цикла

    Кроме этого там запрещены continue и return из середины функции. Один(не больше) break, хотя и нарушает структурность, но дозволен из соображений оптимальности. Возвращение значения из цикла в MISRA C не запрещено, потому что его нет в самом C, если только Вы не имеете ввиду return, так он, как раз, запрещён.

     
     
  • 8.31, Анонимо (?), 18:01, 24/07/2017 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Вы так говорите, как будто CODE int foo const char arg1, int arg2, arg5 ... текст свёрнут, показать
     
     
  • 9.33, Comdiv (ok), 20:45, 24/07/2017 [^] [^^] [^^^] [ответить]  
  • –2 +/
    CODE if NULL arg1 result INVALID_ARG1 else if arg2 42 result INV... текст свёрнут, показать
     
  • 5.28, Аноним (-), 15:06, 24/07/2017 [^] [^^] [^^^] [ответить]  
  • –3 +/
    проблемы начинаются когда внутрь цикла начинают пихать десять выходов в разных "местах", по сути оптимальным было бы отсутствие операции выхода из цикла(оставить только окончание итерации и переход к условию)
     

  • 1.16, Дуплик (ok), 22:49, 23/07/2017 [ответить] [﹢﹢﹢] [ · · · ]  
  • –4 +/
    >По структуре язык Rust напоминает C++

    От чего ушли, к тому и пришли.

     
     
  • 2.17, Аноним (-), 23:28, 23/07/2017 [^] [^^] [^^^] [ответить]  
  • +/
    А они разве уходили?
     
     
  • 3.19, Аноним (-), 02:19, 24/07/2017 [^] [^^] [^^^] [ответить]  
  • –2 +/
    NIH же

    В каждую новость копипастят: "По структуре язык Rust напоминает C++, но".

     

  • 1.20, Аноним (-), 10:25, 24/07/2017 [ответить] [﹢﹢﹢] [ · · · ]  
  • +1 +/
    > На Rust также разрабатывается операционная система Redox, использующая концепцию экзоядра

    странно, документация говорит что система микроядерная

    https://doc.redox-os.org/book/design/kernel/microkernels.html

    > Redox has less then 9,000 lines of kernel code. For comparison Minix has ~6,000 lines of kernel code.

     
  • 1.22, YetAnotherOnanym (ok), 12:29, 24/07/2017 [ответить] [﹢﹢﹢] [ · · · ]  
  • –1 +/
    > Для сжатия архивов вместо gzip по умолчанию теперь применяется сжатие с использованием xz

    И это запихнуто в сам язык? Не в либы, пристёгиваемые по выбору девелопера, а в само ядро? Ну охренеть...

     
     
  • 2.24, Аноним (-), 13:12, 24/07/2017 [^] [^^] [^^^] [ответить]  
  • +2 +/
    Нет, это не запихано ни в язык, ни в стандартную библиотеку. Там просто начали по другому ужимать готовый бинарник самого компилятора, который вы можете скачать на сайте или через rustup.
    Просто это типичный перевод новости на русский язык без понимания контекста.
     

  • 1.25, Аноним (-), 13:35, 24/07/2017 [ответить] [﹢﹢﹢] [ · · · ]  
  • –1 +/
    Так завезут когда-то зависимые типы или как выше написали, будут и дальше копировать фичи с алгола68?
     
     
  • 2.27, Comdiv (ok), 14:03, 24/07/2017 [^] [^^] [^^^] [ответить]  
  • –1 +/
    > Так завезут когда-то зависимые типы или как выше написали, будут и дальше
    > копировать фичи с алгола68?

    Можете раскрыть тему чуть подробней?
    Опишите, пожалуйста, какие потребности это должно удовлетворить. Почему Вы считаете, что зависимые типы долждны появиться в Rust? Это активно обсуждалось у разработчиков?

     
     
  • 3.32, Ordu (ok), 20:12, 24/07/2017 [^] [^^] [^^^] [ответить]  
  • +2 +/
    Обсуждалось. https://github.com/rust-lang/rfcs/pull/1933

    Это очень удобная фишка, которая позволяет, например, объявлять типы параметризованные значением. Не другим типом, а значением.

    Там в rfc неплохой пример есть:

    impl<const n: usize, T: Clone> Clone for [T; n] {
        fn clone(&self) -> [T; n] {
            // Clone it...
        }
    }

    Так могла бы выглядеть реализация трейта Clone, создающего копию объекта, для всех возможных типов слайсов. Сейчас в стандартной библиотеке rust'а, есть *33* реализации трейта PartialEq (это операция ==) для слайсов с размерами от 1 до 32. Да, конечно, там не 33 раза написано impl PartialEq for ... бла-бла-бла..., там ради такого написано макрос принимающий в качестве параметра значение типа usize.
    Собственно за подробностями можно сходить сюда: https://doc.rust-lang.org/src/core/array.rs.html
    И найти там строчки https://doc.rust-lang.org/src/core/array.rs.html#213-218 :

    array_impls! {
         0  1  2  3  4  5  6  7  8  9
        10 11 12 13 14 15 16 17 18 19
        20 21 22 23 24 25 26 27 28 29
        30 31 32
    }

    Это, так сказать, квинтэссенция всего предыдущего макрописания. Раскрытие этого макроса компилятором приводит к появлению 33*16 отдельных блоков impl (33 значения для N, и, если я не сбился со счёта, 16 трейтов, типа AsRef, AsMut, Borrow, BorrowMut, PartialEq...), каждый из которых реализует 1-2 функции.

    Можно такие штуки делать макросами, но это раздувает код. И это работает только для конечного числа значений n. С зависимыми типами можно будет обойтись без макросов и написать 16 блоков impl, по одному на каждый трейт реализуемый слайсом, а затем компилятор уже будет инстанцировать эти реализации _по_мере_необходимости_.

     

  • 1.29, Ordu (ok), 17:27, 24/07/2017 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Вау! Все перечисленные нововведения туфта, по сравнению с тем, что скорость компиляции реально выросла. Мне сложно сравнить скорость компиляции с gcc, clang или ещё кем-то (это надо делать не "на глаз", а организовать какое-то тестовое окружение и померять), но 1.19, по сравнению с тем кошмаром, который был в 1.18, просто летает.
    Мозилла обещала, Мозилла сделала.
     
     
  • 2.35, Аноним (-), 04:59, 25/07/2017 [^] [^^] [^^^] [ответить]  
  • +1 +/
    > Мозилла обещала, Мозилла сделала.

    Вы, случайно, не в курсе, она не обещала сделать браузер для людей?

     
     
  • 3.36, Ordu (ok), 08:03, 25/07/2017 [^] [^^] [^^^] [ответить]  
  • +1 +/
    >> Мозилла обещала, Мозилла сделала.
    > Вы, случайно, не в курсе, она не обещала сделать браузер для людей?

    Обещала. Кстати, с выполнением этого обещание у неё тоже есть подвижки: https://metafluff.com/2017/07/21/i-am-a-tab-hoarder/

     
  • 3.37, Led (ok), 01:34, 26/07/2017 [^] [^^] [^^^] [ответить]  
  • +/
    >> Мозилла обещала, Мозилла сделала.
    > Вы, случайно, не в курсе, она не обещала сделать браузер для людей?

    А тебе-то какая разница?

     

     Добавить комментарий
    Имя:
    E-Mail:
    Текст:



    Партнёры:
    PostgresPro
    Inferno Solutions
    Hosting by Hoster.ru
    Хостинг:

    Закладки на сайте
    Проследить за страницей
    Created 1996-2024 by Maxim Chirkov
    Добавить, Поддержать, Вебмастеру