The OpenNET Project / Index page

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



"Доступен язык программирования Rust 1.19 "
Вариант для распечатки  
Пред. тема | След. тема 
Форум Разговоры, обсуждение новостей
Изначальное сообщение [ Отслеживать ]

"Доступен язык программирования Rust 1.19 "  +/
Сообщение от opennews (??) on 23-Июл-17, 12:15 
Подготовлен (https://blog.rust-lang.org/2017/07/20/Rust-1.19.html) релиз языка программирования Rust 1.19 (http://www.rust-lang.org), развиваемого проектом Mozilla, обеспечивающего автоматическое управление памятью и предоставляющего средства для высокого параллелизма выполнения заданий, при этом обходясь без использования сборщика мусора и runtime. Параллельно с Rust совместно с компанией Samsung развивается экспериментальный браузерный движок Servo (https://www.opennet.ru/opennews/art.shtml?num=44712), написанный (https://github.com/servo/servo/) на языке Rust и отличающийся поддержкой многопоточного рендеринга web-страниц и распараллеливанием операций с DOM (Document Object Model).  На Rust также разрабатывается (https://www.opennet.ru/opennews/art.shtml?num=46459) операционная система Redox (https://www.redox-os.org/), использующая концепцию экзоядра и продвигающая принцип "все есть URL".


В подготовке нового выпуска приняли участие 144 разработчика. Основные новшества (https://github.com/rust-lang/rust/blob/master/RELEASES.md#ve...):

-  Добавлена поддержка структур данных "union (https://github.com/rust-lang/rfcs/blob/master/text/1444-unio...)", представляющих собой объединения, совместимые с аналогичным типом в языке Си. В отличие от структур 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 (https://github.com/rust-lang/rust/tree/master/src/bootstrap)) в окружении платформы Android;

-  В разряд стабильных переведена новая порция (https://github.com/rust-lang/rust/blob/master/RELEASES.md) функций и методов, в том числе 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 (http://blog.rust-lang.org/2014/11/20/Cargo.html), позволяющий получить нужные для программы библиотеки  в один клик. Для размещения библиотек введён в строй репозиторий crates.io (https://crates.io/).

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

URL: https://blog.rust-lang.org/2017/07/20/Rust-1.19.html
Новость: http://www.opennet.ru/opennews/art.shtml?num=46900

Ответить | Правка | Cообщить модератору

Оглавление

Сообщения по теме [Сортировка по времени | RSS]


3. "Доступен язык программирования Rust 1.19 "  –11 +/
Сообщение от Аноним (??) on 23-Июл-17, 12:50 
Годно... Заменит питон в машинном обучении - вообще будет замечательно
Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

5. "Доступен язык программирования Rust 1.19 "  +6 +/
Сообщение от nazarpc on 23-Июл-17, 13:05 
С чего бы это? У языков совсем разные цели и характеристики.
Ответить | Правка | ^ к родителю #3 | Наверх | Cообщить модератору

6. "Доступен язык программирования Rust 1.19 "  +1 +/
Сообщение от Аноним (??) on 23-Июл-17, 13:07 
Но зачем? Rust же не векторный язык программирования как тот же R, или уж тем более не дифференцируемый и не вероятностный. Это нерационально же будет. Надеетесь получить какую-то экономию памяти и быстродействие? Вряд-ли это выйдет существенно.
Ответить | Правка | ^ к родителю #3 | Наверх | Cообщить модератору

9. "Доступен язык программирования Rust 1.19 "  +3 +/
Сообщение от Аноним (??) on 23-Июл-17, 13:29 
Раст претендует на функциональность. По производительности, естественно, питон он превосходит и идея в том, чтобы вообще использовать Раст в качестве основного языка, а не как нашлёпку над С++ библитеками в случае питона.

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

Ответить | Правка | ^ к родителю #6 | Наверх | Cообщить модератору

30. "Доступен язык программирования Rust 1.19 "  +/
Сообщение от Аноним (??) on 24-Июл-17, 18:01 
> использовать Раст в качестве основного языка

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

Ответить | Правка | ^ к родителю #9 | Наверх | Cообщить модератору

34. "Доступен язык программирования Rust 1.19 "  –1 +/
Сообщение от KBAKEP (ok) on 25-Июл-17, 02:32 
топором
Ответить | Правка | ^ к родителю #30 | Наверх | Cообщить модератору

7. "Доступен язык программирования Rust 1.19 "  –3 +/
Сообщение от Аноним (??) on 23-Июл-17, 13:19 
>Rust поддерживает смесь императивных, процедурных и объектно-ориентированных методов с такими парадигмами, как функциональное программирование, обобщённое программирование и метапрограммирование, в статических и динамических стилях.

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

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

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

Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

11. "Доступен язык программирования Rust 1.19 "  +3 +/
Сообщение от Comdiv (ok) on 23-Июл-17, 16:03 
>И вот даже https://benchmarksgame.alioth.debian.org/u64q/rust.html взять тесты
>производительности Раста против Си. Там же четко видно, что оно быстрее

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

Ответить | Правка | ^ к родителю #7 | Наверх | Cообщить модератору

21. "Доступен язык программирования Rust 1.19 "  –2 +/
Сообщение от RazrFalcon (ok) on 24-Июл-17, 11:42 
Когда кажется...
Ответить | Правка | ^ к родителю #7 | Наверх | Cообщить модератору

12. "Доступен язык программирования Rust 1.19 "  –1 +/
Сообщение от Comdiv (ok) on 23-Июл-17, 16:05 
> Реализована возможность прерывания цикла с возвратом определённого значения.
>... использовать конструкции вида "let x = loop { break 7; };"

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

Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

13. "Доступен язык программирования Rust 1.19 "  +2 +/
Сообщение от Аноним (??) on 23-Июл-17, 16:45 
В расте же почти все - это выражения. Почему бы и нет
Ответить | Правка | ^ к родителю #12 | Наверх | Cообщить модератору

14. "Доступен язык программирования Rust 1.19 "  +/
Сообщение от Comdiv (ok) on 23-Июл-17, 16:59 
Ну да, внедрив одну не самую прекрасную возможность из Algol68, они не могут остановиться и  комбинируют её с другой не лучшей чертой - подчёркнутой неструктурностью потока выполнения. Авторы языка, пытаясь решить одни проблемы кодирования, возводят в стандарт вещи, приводящие к другим проблемам кодирования.
Ответить | Правка | ^ к родителю #13 | Наверх | Cообщить модератору

15. "Доступен язык программирования Rust 1.19 "  +/
Сообщение от nobody (??) on 23-Июл-17, 20:08 
Ну какие тут конкретно "проблемы кодирования"? В том же С++ это делается так:

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

Ответить | Правка | ^ к родителю #14 | Наверх | Cообщить модератору

18. "Доступен язык программирования Rust 1.19 "  –1 +/
Сообщение от Comdiv (ok) on 24-Июл-17, 01:19 
> Ну какие тут конкретно "проблемы кодирования"?

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

Ответить | Правка | ^ к родителю #15 | Наверх | Cообщить модератору

23. "Доступен язык программирования Rust 1.19 "  +3 +/
Сообщение от Аноним (??) on 24-Июл-17, 13:06 
Это нововведение никак не нарушает структурность кода. Это простой ретурн из выражения, которого раньше почему-то не было во отличие от тех же ифов.

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

Ответить | Правка | ^ к родителю #18 | Наверх | Cообщить модератору

26. "Доступен язык программирования Rust 1.19 "  –1 +/
Сообщение от Comdiv (ok) on 24-Июл-17, 13:55 
> Это нововведение никак не нарушает структурность

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

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

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

Ответить | Правка | ^ к родителю #23 | Наверх | Cообщить модератору

31. "Доступен язык программирования Rust 1.19 "  +1 +/
Сообщение от Анонимо on 24-Июл-17, 18:01 
> Нарушает, так как струтктурность подразумевает три вида переходов: последовательное,
> ветвление, цикл по условию.

Вы так говорите, как будто:


int foo(const char *arg1, int arg2, ... arg5) {
  if (!arg1) return INVALID_ARG1;
  if (arg2 < 42) return INVALID_ARG2;
..
  return result;

от нечистого, зато

int foo(const char *arg1, int arg2, ... arg5) {
  if(arg1) {
    if(arg2 >=42) {
      ...
    } else {
      result = INVALID_ARG2;
    }
  } else {
    result = INVALID_ARG1;
  }
  return result;
}

return result;
}


Прям образец читаемости и вникаемости.

Ответить | Правка | ^ к родителю #26 | Наверх | Cообщить модератору

33. "Доступен язык программирования Rust 1.19 "  –2 +/
Сообщение от Comdiv (ok) on 24-Июл-17, 20:45 

if (NULL == arg1) result = INVALID_ARG1;
else if (arg2 < 42) result = INVALID_ARG2;
else {
....
}
end_code(context);
return result;

При неструктурном программировании проблемы с end_code случаются регулярно, в том числе и критические, а "образец читаемости и вникаемости" (с) получается, как правило, от низкой культуры кодирования, которая, в свою очередь, прививается при использовании неструктурного подхода.
Ответить | Правка | ^ к родителю #31 | Наверх | Cообщить модератору

28. "Доступен язык программирования Rust 1.19 "  –3 +/
Сообщение от Аноним (??) on 24-Июл-17, 15:06 
проблемы начинаются когда внутрь цикла начинают пихать десять выходов в разных "местах", по сути оптимальным было бы отсутствие операции выхода из цикла(оставить только окончание итерации и переход к условию)
Ответить | Правка | ^ к родителю #15 | Наверх | Cообщить модератору

16. "Доступен язык программирования Rust 1.19 "  –4 +/
Сообщение от Дуплик (ok) on 23-Июл-17, 22:49 
>По структуре язык Rust напоминает C++

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

Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

17. "Доступен язык программирования Rust 1.19 "  +/
Сообщение от Аноним (??) on 23-Июл-17, 23:28 
А они разве уходили?
Ответить | Правка | ^ к родителю #16 | Наверх | Cообщить модератору

19. "Доступен язык программирования Rust 1.19 "  –2 +/
Сообщение от Аноним (??) on 24-Июл-17, 02:19 
NIH же

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

Ответить | Правка | ^ к родителю #17 | Наверх | Cообщить модератору

20. "Релиз языка программирования Rust 1.19 "  +1 +/
Сообщение от Аноним (??) on 24-Июл-17, 10:25 
> На 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.

Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

22. "Релиз языка программирования Rust 1.19 "  –1 +/
Сообщение от YetAnotherOnanym (ok) on 24-Июл-17, 12:29 
> Для сжатия архивов вместо gzip по умолчанию теперь применяется сжатие с использованием xz

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

Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

24. "Релиз языка программирования Rust 1.19 "  +2 +/
Сообщение от Аноним (??) on 24-Июл-17, 13:12 
Нет, это не запихано ни в язык, ни в стандартную библиотеку. Там просто начали по другому ужимать готовый бинарник самого компилятора, который вы можете скачать на сайте или через rustup.
Просто это типичный перевод новости на русский язык без понимания контекста.
Ответить | Правка | ^ к родителю #22 | Наверх | Cообщить модератору

25. "Релиз языка программирования Rust 1.19 "  –1 +/
Сообщение от Аноним (??) on 24-Июл-17, 13:35 
Так завезут когда-то зависимые типы или как выше написали, будут и дальше копировать фичи с алгола68?
Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

27. "Релиз языка программирования Rust 1.19 "  –1 +/
Сообщение от Comdiv (ok) on 24-Июл-17, 14:03 
> Так завезут когда-то зависимые типы или как выше написали, будут и дальше
> копировать фичи с алгола68?

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

Ответить | Правка | ^ к родителю #25 | Наверх | Cообщить модератору

32. "Релиз языка программирования Rust 1.19 "  +2 +/
Сообщение от Ordu email(ok) on 24-Июл-17, 20:12 
Обсуждалось. 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, по одному на каждый трейт реализуемый слайсом, а затем компилятор уже будет инстанцировать эти реализации _по_мере_необходимости_.

Ответить | Правка | ^ к родителю #27 | Наверх | Cообщить модератору

29. "Релиз языка программирования Rust 1.19 "  +/
Сообщение от Ordu email(ok) on 24-Июл-17, 17:27 
Вау! Все перечисленные нововведения туфта, по сравнению с тем, что скорость компиляции реально выросла. Мне сложно сравнить скорость компиляции с gcc, clang или ещё кем-то (это надо делать не "на глаз", а организовать какое-то тестовое окружение и померять), но 1.19, по сравнению с тем кошмаром, который был в 1.18, просто летает.
Мозилла обещала, Мозилла сделала.
Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

35. "Релиз языка программирования Rust 1.19 "  +1 +/
Сообщение от Аноним (??) on 25-Июл-17, 04:59 
> Мозилла обещала, Мозилла сделала.

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

Ответить | Правка | ^ к родителю #29 | Наверх | Cообщить модератору

36. "Релиз языка программирования Rust 1.19 "  +1 +/
Сообщение от Ordu email(ok) on 25-Июл-17, 08:03 
>> Мозилла обещала, Мозилла сделала.
> Вы, случайно, не в курсе, она не обещала сделать браузер для людей?

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

Ответить | Правка | ^ к родителю #35 | Наверх | Cообщить модератору

37. "Релиз языка программирования Rust 1.19 "  +/
Сообщение от Led (ok) on 26-Июл-17, 01:34 
>> Мозилла обещала, Мозилла сделала.
> Вы, случайно, не в курсе, она не обещала сделать браузер для людей?

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

Ответить | Правка | ^ к родителю #35 | Наверх | Cообщить модератору

Архив | Удалить

Рекомендовать для помещения в FAQ | Индекс форумов | Темы | Пред. тема | След. тема




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

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