LINUX.ORG.RU

Rust 1.25.0

 


3

9

Сегодня вышел Rust 1.25.0 (2018-03-29).

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

$ rustup update stable

Что нового в 1.25.0 stable

Синтаксис

Компилятор

Библиотека

Стабилизированные API

  • Location::column;
  • ptr::NonNull;

    Наиболее значимое событие — это std::ptr::NonNull<T>. Этот тип похож на *mut T, но является ненулевым (non-null) и ковариантным. Если вкратце, NonNull<T> гарантирует, что никогда не будет равен null, а это означает, что Option<NonNull<T>> имеет тот же размер, что и *mut T. Если вы создаете структуру данных с небезопасным кодом, NonNull<T> зачастую будет правильным выбором для вас.

    Следующие функции теперь могут быть использованы в константных выражениях, т.е. например, static MINUTE: Duration = Duration::from_secs(60);:

  • Duration::new;
  • Duration::from_secs;
  • Duration::from_millis;
  • Duration::from_micros;
  • Duration::from_nanos.

Cargo

Разное

Примечания по поводу совместимости

>>> Подробности

★★★★★

Проверено: jollheef ()
Последнее исправление: Deleted (всего исправлений: 3)

Ответ на: комментарий от Aswed

С чего бы? Ассимптотика та же

Похоже, спорить трудно. Но

NAME
     qsort, qsort_b, qsort_r, heapsort, heapsort_b, mergesort, mergesort_b –
     sort functions

LIBRARY
     Standard C Library (libc, -lc)

SYNOPSIS
     #include <stdlib.h>

     void
     qsort(void *base, size_t nmemb, size_t size,
         int (*compar)(const void *, const void *));
как-то немного шире, а дьявол он в деталях. Конкретно в том примере — как обойтись без рекурсии?

anonymous
()

1.25.0
Стабилизированные API

anonymous
()
Ответ на: Ненавистникам и обожателям Rust от FAT_EXORCIST

безопасность написания кода или безопасность исполнения

исполнения конечно же
написание же растовского кода - это совсем не безопасное занятие

kto_tama ★★★★★
()
Ответ на: комментарий от anonymous

qsort

В общем случае пишется совершенно так же:

fn qsort<T,F>(v: &mut [T], f: &F) 
    where F: Fn(&T,&T) -> bool
{
    let len = v.len();
    if len >= 2 {
        let pivot_index = partition(v, f);
        qsort(&mut v[..pivot_index], f);
        qsort(&mut v[pivot_index + 1..len], f);
    }
}
 
fn partition<T,F>(v: &mut [T], f: &F) -> usize 
    where F: Fn(&T,&T) -> bool
{
    let len = v.len();
    let pivot_index = len / 2;
 
    v.swap(pivot_index, len - 1);
 
    let mut store_index = 0;
    for i in 0..len - 1 {
        if f(&v[i], &v[len - 1]) {
            v.swap(i, store_index);
            store_index += 1;
        }
    }
 
    v.swap(store_index, len - 1);
    store_index
}
И в отличие от libc'шного qsort, такой как раз safe (как и аналог на плюсах) — в нём нельзя серьёзно налажать с памятью, передав где-нибудь неправильный размер или криво скастовать сырой указатель.

Избавиться от рекурсии — как и в любом другом языке. Завести стек задач и идти циклом по нему. Для этого тоже unsafe не нужен.

anonymous
()
Ответ на: комментарий от playX

а зачем `|` в match использовать?

Руки старых окамльщиков пишут | автоматически :)

tailgunner ★★★★★
()
Ответ на: qsort от anonymous

Избавиться от рекурсии — как и в любом другом языке. Завести стек задач и идти циклом по нему.

Знаю я rust — слава к-лху! — поверхностно, но, полагаю, здесь как раз все сложности (в противном случае, ты бы это продемонстрировал в коде).

anonymous
()
Ответ на: комментарий от anonymous

полагаю, здесь как раз все сложности (в противном случае, ты бы это продемонстрировал в коде).

Хех, мне просто не очень удобно писать с телефона. Если все аргументы противников Rust будут в стиле «я ничего в этом не понимаю и подозреваю, что вы все меня обманываете»...

А qsort со стеком пишется как-то так:

fn qsort<T,F>(v: &mut [T], f: &F) 
    where F: Fn(&T,&T) -> bool
{
    let mut tasks = vec![(0, v.len())];

    while let Some((l, r)) = tasks.pop() {
        let len = r - l;
        if len >= 2 {
            let pivot_index = partition(&mut v[l..r], f);
            tasks.push((l, l + pivot_index));
            tasks.push((l + pivot_index + 1, r));
        }
    }
}
 
fn partition<T,F>(v: &mut [T], f: &F) -> usize 
    where F: Fn(&T,&T) -> bool
{
    let len = v.len();
    let pivot_index = len / 2;
 
    v.swap(pivot_index, len - 1);
 
    let mut store_index = 0;
    for i in 0..len - 1 {
        if f(&v[i], &v[len - 1]) {
            v.swap(i, store_index);
            store_index += 1;
        }
    }
 
    v.swap(store_index, len - 1);
    store_index
}
anonymous
()
Ответ на: комментарий от FAT_EXORCIST

Почему троля-однодневку должно волновать моё мнение?

RazrFalcon ★★★★★
()
Ответ на: комментарий от iZEN

Си в Firefox не использовался

Пальцем в небо ты попал.

WatchCat ★★★★★
()
Ответ на: Ненавистникам и обожателям Rust от FAT_EXORCIST

1) Безопасность написания - гораздо труднее выстрелить себе в ногу, чем на C/C++. В общем, чтобы приложения не крашились с сегфолтом у юзера, а отказывались компилироваться с ошибками. На наличие эксплойтов в программах никак не влияет, ибо говнокодить можно на любом языке.

2) Хотя бы в том, что нет GC. Это системный ЯП, не надо тащить в него мусор.

3) Для хорошего кодера - нет. Сложен не синтаксис, а алгоритмы. После пары лет кодинга на любом языке проблемы с синтаксисом вообще не возникают. А вот если в проекте по 10к строк в модулях и переменные вида [a, b, c], это очень усложняет понимание.

InterVi ★★★★★
()

Rust это системный язык программирования, нацеленный на надёжность, скорость и параллельное выполнение.

Просто интересно, эти цели достигнуты? Ну, есть например какое-то объективное сравнение реальных программ, где версия на расте получается надежней, быстрей и эффективней на многоядерных процессорах, чем на с++, например?

Im_not_a_robot ★★★★★
()
Ответ на: Ненавистникам и обожателям Rust от FAT_EXORCIST

1) Безопасность в rust означает отсутствие неопределенного поведения в частях кода, не огороженных unsafe-блоками. Программа либо будет функционировать как написано, либо упадет, но никаких выходов за границы массива и т.п. она не допустит. При этом НЕ гарантируются отсутствие утечек памяти и отсутствие UB в unsafe-блоках.

2) Го - язык со слабой типизацией и со сборкой мусора, предназначенный для решения совершенно других задач. Сравнивать его с rust - это все равно что сравнивать теплое с мягким.

3) Синтаксис rust зашумлен не более, чем синтаксис C++, а скорее даже менее (привет, spaceship operator). Особенно если грамотно им пользоваться. Вот например две эквивалентных конструкции:

let foo = (1..10).collect::<Vec<u32>>();
let foo: Vec<u32> = (1..10).collect();
какая из них более читаема?

anonymous
()
Ответ на: комментарий от Im_not_a_robot

Stylo в Firefox Quantum. Можешь погуглить рассказ

anonymous
()
Ответ на: комментарий от iZEN

Си в Firefox не использовался - вместо него был прикладной язык программирования C++.

А это ты сам занес Си++ в прикладные? Потому что Wiki говорит, что Си и Си++ - языки общего назначения.

tailgunner ★★★★★
()

Вот и дошли мои исправления до релиза.

O02eg ★★★★★
()
Ответ на: комментарий от anonymous

Безопасность в rust означает отсутствие неопределенного поведения в частях кода, не огороженных unsafe-блоками.

А чем Pascal и ADA не подошли?

iZEN ★★★★★
()
Ответ на: комментарий от Virtuos86

Я никогда не писал руками

У тебя лапки? Раст притягивает лапчатых, это заметно даже по лору.

anonymous
()
Ответ на: комментарий от iZEN

На C++ не пишут операционные системы.

На Си++ пишут микроядра, ядра, компоненты ядер и даже целые ОС, просто ты о них не знаешь. Но я спрашивал не об этом.

А чем Pascal и ADA не подошли?

Pascal не безопаснее Си; Ада, мало того, что мертва, не обладает даже намеком на систему lifetime-ов.

tailgunner ★★★★★
()
Последнее исправление: tailgunner (всего исправлений: 2)
Ответ на: комментарий от tailgunner

На Си++ пишут микроядра, ядра, компоненты ядер и даже целые ОС, просто ты о них не знаешь.

В академических целях, которые от нас скрывают - да, почему нет.

Pascal не безопаснее Си;

В большинстве случаев использования - Pascal безопаснее C.

Ада, мало того, что мертва, не обладает даже намеком на систему lifetime-ов.

gnat живее всех живых. fpc развивается. По-видимому, другим трудно жить в твоём няма-мирке.

iZEN ★★★★★
()
Последнее исправление: iZEN (всего исправлений: 1)
Ответ на: комментарий от iZEN

На Си++ пишут микроядра, ядра, компоненты ядер и даже целые ОС, просто ты о них не знаешь.

В академических целях, которые от нас скрывают

От тебя скрывали цель разработки L4/Fiasco? Вот гады.

да, почему нет.

То есть ты знал, что ОС на Си++ пишутся, но врал:

iZEN> На C++ не пишут операционные системы.

Врать - плохо. И да, на Си++ пишут еще хоббистские ядра (Haiku), коммерческие ядра (eCOS), и компоненты коммерческих ядер (IOKit в OS X) - это только известные. Еще на Си++ пишут непонятно что под названием Fuchsia,

Ада, мало того, что мертва, не обладает даже намеком на систему lifetime-ов.

gnat живее всех живых.

Ага. Но о Parasail ты не слышал.

fpc развивается

Это зомби.

По-видимому, другим трудно жить в твоём няма-мирке.

Маня-мирок - это днем писать на Java в венде и по вечерам запускать FreeBSD.

tailgunner ★★★★★
()
Последнее исправление: tailgunner (всего исправлений: 1)
Ответ на: комментарий от InterVi

2) Хотя бы в том, что нет GC. Это системный ЯП, не надо тащить в него мусор.

И действительно. Мусор натащит программист.

anonymous
()
Ответ на: комментарий от tailgunner

Скажем так, «На C++ не пишут операционные системы.» - означает, что на C++ не принято писать операционные системы, как и на Pascal, и на ADA. Это - языки для прикладного программирования, что нисколько не исключает их применения в системном.

iZEN ★★★★★
()
Ответ на: комментарий от tailgunner

Маня-мирок - это днем писать на Java в венде и по вечерам запускать FreeBSD.

Я на Java практически не пишу, как, впрочем, и на других ЯП. Windows у меня для работы. FreeBSD для развлечения.

С внедрением LLVM/Rust я подметил, что непонятно зачем ЭТО всунули в единственное приложение - Firefox (а теперь и в Thunderbird) и носятся с этим, как с писанной торбой. Этот язычок: громоздкий, со сложным синтаксисом, с большой трудоёмкостью поддержки и сопровождения его инфраструктуры (та, которая его порождает - LLVM). За всё время существования этого языка, на нём не написали НИЧЕГО стоящего.

Хотелось бы закончить лозунгом Н.Вирта: «Долой жирные программы!»

iZEN ★★★★★
()
Последнее исправление: iZEN (всего исправлений: 2)
Ответ на: комментарий от iZEN

Скажем так, «На C++ не пишут операционные системы.» - означает, что на C++ не принято писать операционные системы

Вообще-то принято (последние 20 лет, ага) - Genode, Haiku, Fuchsia. Впрочем. это оффтопик.

А насчет того, что такое системное программирование, почитай хотя бы в Wikipedia,

Я на Java практически не пишу, как, впрочем, и на других ЯП

Этот язычок: громодкий, со сложным синтаксисом, с большой трудоёмкостью поддержки и сопровождения его инфраструктуры

От человека, который «практически не пишет на языках программирования», это звучит так веско.

tailgunner ★★★★★
()
Ответ на: комментарий от tailgunner

От человека, который «практически не пишет на языках программирования», это звучит так веско.

Что поделаешь - в современном мире наблюдается тенденция к разделению труда (ты не заметил?): кто-то создаёт (проектирует, пишет), кто-то тестирует, кто-то собирает, кто-то пользуется, кто-то делает выводы и строит планы. А ещё есть карьерный рост...

iZEN ★★★★★
()
Последнее исправление: iZEN (всего исправлений: 1)
Ответ на: комментарий от iZEN

Этот язычок [..] с большой трудоёмкостью поддержки и сопровождения его инфраструктуры (та, которая его порождает - LLVM).

Стесняюсь спросить, и в чем же заключается «большая трудоемкость» поддержки и сопровождения «инфраструктуры LLVM»?

shty ★★★★★
()
Последнее исправление: shty (всего исправлений: 1)
Ответ на: комментарий от iZEN

«Языки для прикладного программирования» — это bash или elisp.

https://en.wikipedia.org/wiki/System_programming:

Overview

The following attributes characterize systems programming:

    The programmer can make assumptions about the hardware and other properties of the system that the program
runs on, and will often exploit those properties, for example by using an algorithm that is known to be efficient
when used with specific hardware.
    Usually a low-level programming language or programming language dialect is used so that:
        Programs can operate in resource-constrained environments
        Programs written to be efficient with little runtime overhead, they may have a small runtime library,
or none at all
        Programs may use direct and "raw" control over memory access and control flow
        The programmer may write parts of the program directly in assembly language

Virtuos86 ★★★★★
() автор топика
Ответ на: комментарий от shty

Этот язычок [..] с большой трудоёмкостью поддержки и сопровождения его инфраструктуры (та, которая его порождает - LLVM).

Стесняюсь спросить, и в чем же заключается «большая трудоемкость» поддержки и сопровождения «инфраструктуры LLVM»?

Ну как же, новые версии Фуррифокса собирать самому с недавних пор приходится, пачкая руки об Раст. Отсюда и бомбёжка.

Virtuos86 ★★★★★
() автор топика
Ответ на: комментарий от anonymous

Я никогда не писал руками

У тебя лапки? Раст притягивает лапчатых, это заметно даже по лору.

Ну всё, ты меня затралил.

Virtuos86 ★★★★★
() автор топика
Ответ на: комментарий от anonymous

Если все это действительно работает без сторонних эффектов, то ты действительно молодец. Ты проверил все?

anonymous
()
Ответ на: комментарий от Virtuos86

Ну как же, новые версии Фуррифокса собирать самому с недавних пор приходится, пачкая руки об Раст. Отсюда и бомбёжка.

Ага, байты приходится вручную таскать, а rust'ом это труд титанический. Ты вообще не болен?

anonymous
()
Ответ на: комментарий от anonymous

Сам понял, что написал? Изю бомбит от Раста исключительно с тех пор, как тот стал обязательной зависимостью при сборке FF. До этого момента Раст ему никак не мешал.

Virtuos86 ★★★★★
() автор топика
Ответ на: комментарий от iZEN

Си в Firefox не использовался - вместо него был прикладной язык программирования C++.

Насчет прошедшего времени — ты таки преувеличиваешь, firefox пока еще жив (болеет только сильно), и C в нем используется, в чем совершенно нетрудно убедиться с помощью команды find.

anonymous
()
Ответ на: комментарий от tailgunner

Pascal не безопаснее Си;

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

А если серьёзно, то там хотя бы типизация сильная (в отличие от).

Esper
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.