LINUX.ORG.RU

Rust 1.35

 


1

7

Команда разработчиков Rust рада представить новую версию своего языка: 1.35. Rust - это язык программирования, который позволяет писать надёжные и эффективные программы.

Если у вас уже установлен Rust через rustup,то можно обновиться командой: $ rustup update stable

Главное в обновлении - это реализиция трейтов замыкания Fn, FnOnce, FnMut, для Box<dyn Fn>, Box<dyn FnOnce>, Box<dyn FnMut>, соответственно. Добавлении возможности приводить замыкания к указателям на небезопасные функции, вызов макроса dbg!() теперь возможен без аргументов, была проведена стабилизация стандартной библиотеки.

К деталям:

  • В новой версии добавили реализации трейтов Fn, FnOnce, FnMut, для Box<dyn Fn>, Box<dyn FnOnce>, Box<dyn FnMut>, соответственно.
    Теперь такой код будет работать:
    fn foo(x: Box<dyn Fn(u8) -> u8>) -> Vec<u8> {
        vec![1, 2, 3, 4].into_iter().map(x).collect()
    }
    
    Также, можно вызывать замыкание прямо из Box<dyn FnOnce>:
    fn foo(x: Box<dyn FnOnce()>) {
        x()
    }
    

  • Теперь замыкания можно приводить к указателям на unsafe fn Теперь можно делать вот так:
    /// The safety invariants are those of the `unsafe fn` pointer passed.
    unsafe fn call_unsafe_fn_ptr(f: unsafe fn()) {
        f()
    }
    
    fn main() {
        // SAFETY: There are no invariants.
        // The closure is statically prevented from doing unsafe things.
        unsafe {
            call_unsafe_fn_ptr(|| {
                dbg!();
            });
        }
    }
    

  • Добавлена возможность вызова макроса dbg!() без аргументов Если передать этому макросу какое-то выражение то, макрос выведет его результат. Пример:
    fn main() {
        let mut x = 0;
    
        if dbg!(x == 1) {
            x += 1;
        }
    
        dbg!(x);
    }
    
    При запуске такого кода вы увидите:
    [src/main.rs:4] x == 1 = false
    [src/main.rs:8] x = 0
    
    Сейчас вы можете написать вот так:
    fn main() {
        let condition = true;
    
        if condition {
            dbg!();
        }
    }
    
    При выполнении такого кода вы увидите: [src/main.rs:5]
  • Были стабилизированы некоторые части стандартной библиотеки
    • Новые методы для f32 и f64:
      • f32::copysign
      • f64::copysign
      Собственно, функции копируют знак у другого числа. Пример:
      fn main() {
          assert_eq!(3.5_f32.copysign(-0.42), -3.5);
      }
      
    • Добавлены новые методы для Range типов
      • Range::contains
      • RangeFrom::contains
      • RangeTo::contains
      • RangeInclusive::contains
      • RangeToInclusive::contains
      С этим можно легко проверить есть ли определенное значение в последовательности:
      fn main() {
          if (0..=10).contains(&5) {
              println!("Five is included in zero to ten.");
          }
      }
      

Подробнее

Перемещено jollheef из development

★★

Последнее исправление: snake266 (всего исправлений: 8)

В новой версии добавили реализации трейтов Fn, FnOnce, FnMut, для Box<dyn Fn>, Box<dyn FnOnce>, Box<dyn FnMut>, соотвественно.

Ну наконец-то.

hippi90 ★★★★★
()

пойду обновлюсь, откопаю хэлоуворды и поиграюсь опять пару дней.

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

с чем тут играться, минорщина же. В 1.36 должны завезти футуры, вот тогда да

anonymous
()

А вобще, скорее бы const_generics завезли. А то без них совсем грустно.

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

Да, нужно тему о предыдущей версии закрывать, как «темы о некорректных сообщениях» и новую начинать, т.е. эту.

grem ★★★★★
()
Последнее исправление: grem (всего исправлений: 1)

Так что брать как замену питону для говняк-говняк прототипирования? Раст или го для этого годятся?

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

если нужны корутины, то го. Если не нужны, то зачем, ведь питон уже идеален для такого

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

Я решил себя попробовать в этом. В следующий раз постараюсь сделать лучше, главное же руку набить.

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

Желание совершенствоваться весьма похвально, но за столько исправлений можно было бы наконец обратить внимание на явные орфографические ошибки:

соотвественно

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

что брать как замену питону для говняк-говняк прототипирования

Питон уже идеален для такого[2].

intelfx ★★★★★
()

В новой версии добавили реализации трейтов Fn, FnOnce, FnMut, для Box<dyn Fn>, Box<dyn FnOnce>, Box<dyn FnMut>, соответственно.

Годно.

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

Так ведь и вместо языка срань. Так что все ок

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

Но мне кажется, что больше получился перевод, чем что-то свое

snake266 ★★
() автор топика

Вот это радость: полные штаны!

> pkg info rust
rust-1.35.0
Name           : rust
Version        : 1.35.0
Installed on   : Fri May 24 20:39:25 2019 MSK
Origin         : lang/rust
Architecture   : FreeBSD:12:amd64
Prefix         : /usr/local
Categories     : lang
Licenses       : MIT, APACHE20
Maintainer     : rust@FreeBSD.org
WWW            : https://www.rust-lang.org/
Comment        : Language with a focus on memory safety and concurrency
Options        :
	DOCS           : off
	GDB            : off
	LLNEXTGEN      : off
	SOURCES        : off
Shared Libs required:
	libcurl.so.4
	libssh2.so.1
	libgit2.so.28
Annotations    :
	FreeBSD_version: 1200510
Flat size      : 398MiB
Description    :
Rust is an open-source systems programming language that runs blazingly
fast, prevents almost all crashes, and eliminates data races.
Some of its features:

  - Algebraic data types, type inference
  - Pattern matching and closures
  - Concurrency without data races
  - Guaranteed memory safety
  - Optional garbage collection
  - Zero-cost abstractions
  - Minimal runtime
  - Efficient C bindings

WWW: https://www.rust-lang.org/

LLNEXTGEN имеет смысл включать и чего он делает?

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

Да, такой топик можно и в мини-новость оформить, если у тебя будет такое желание.

Virtuos86 ★★★★★
()

Когда в руст добавят все фичи? Ждать руст 2.0?

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

Как я понимаю, это что-то типа std::function из плюсов?

Горячо, но не совсем.

В rust, например, можно «употребить» все замыкание, и владение им уйдет в вызываемый код! Это FnOnce. Раньше в стабильной версии не было явной поддержки вызова указателей на такие замыкания, которые Box<dyn FnOnce>, т.е. забоксенные замыкания из кучи. Приходилось или расписывать в ручную (существующий крейт не покрывал все случаи), или использовать нестабильную версию rust. Как понимаю, теперь все поддерживается в стабильной версии из коробки.

Ну, и касательно размещения в памяти. Скорее всего, в rust нет «small size optimisation» для указателей на замыкания, но я точно не знаю. Сами замыкания без боксинга, конечно, находятся на стеке, а вот забоксенные как указатели на кучу - фиг знает, оптимизируется их размещение для крошечных замыканий или нет.

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

В rust, например, можно «употребить» все замыкание, и владение им уйдет в вызываемый код!

Не можно, а нужно. Это костыль и дыра в дизайне, а не "!!!!".

delightfish
()

Ураа!!! Можно не плакать в пустой квартире до понедельника, а участвовать в растосраче. Добра тебе, змеюшка!

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

Так что брать как замену питону для говняк-говняк прототипирования? Раст или го для этого годятся?

Раст не годится потому что слишком сложный, а го потому что слишком примитивный. Для прототипирования вообще динамика лучше.

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

Так что брать как замену питону для говняк-говняк прототипирования? Раст или го для этого годятся?

Сгодится. На себе проверено. Но только в том случае, если есть желание использовать Type-driven development и есть цель потом двигаться от прототипа дальше. Если цель в том, чтобы создать прототип и только, то тут, как уже написали, лучше взять что-то подинамичнее.

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

Сгодится.

Нет.

На себе проверено.

Ты заранее ангажирован и будешь врать.

Но только в том случае, если есть желание использовать Type-driven development

Ну ты действительно начал врать, придумывая новые смысла словам.

Type

Никакого type в этом пхп нет.

и есть цель потом двигаться от прототипа дальше.

Цель может быть только одна - попытка на хайпе лутануть халявку. Вчера ты ваял говно на пхп, а сегодня у тебя тот же хелворд, но на новом пхп. Но это куда круче, уже никто не смотрит на то, что это хелворд. Главное базворд есть и всё.

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

Ну это пхп не особо менее динамичное. Оно скорее просто убогое.

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

О, явление эксперда народу! Давай, расскажи нам ещё про язык, про который ты ровным счётом ничего не знаешь.

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

а вот забоксенные как указатели на кучу - фиг знает, оптимизируется их размещение для крошечных замыканий или нет.

Нет, не оптимизируется. Если есть Box, то есть и выделение памяти на куче. Но есть одно исключение - боксинг типов нулевого размера не выделяет память. То есть, забоксенная лямбда (например Box::new(|x| { x + 1 }) as Box<Fn(i32) -> i32> ), не выделяет память на куче.

red75prim ★★★
()
Последнее исправление: red75prim (всего исправлений: 1)

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

покажите мне такую программу на этом языке, оценю популярность
а то больше похоже на язык для написания хеллов вордов

anonymous
()

Даааааааа...
Все чудесатее

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

И будут правы со своей точки зрения. Дейсвительно, Rust не нужен чтобы программировать на С++ (что и есть их задачей)

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

CSS в Firefox обрабатывается с помощью Rust в рамках проекта Quantum. Уже давно.

vertexua ★★★★★
()
Последнее исправление: vertexua (всего исправлений: 1)
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.