LINUX.ORG.RU

Выпуск языка программирования Rust 1.47

 ,


2

8

Опубликован релиз 1.47 языка системного программирования Rust, основанного проектом Mozilla. Язык сфокусирован на безопасной работе с памятью, обеспечивает автоматическое управление памятью и предоставляет средства для достижения высокого параллелизма выполнения заданий, при этом обходясь без использования сборщика мусора и runtime (runtime сводится к базовой инициализации и сопровождению стандартной библиотеки).

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

Основные новшества:

  • Реализована поддержка типажей для массивов произвольного размера. Ранее, из-за невозможности определить generic-функции для всех целых значений, стандартная библиотека предоставляла встроенную поддержку типажей только для массивов, размер которых не превышал 32 элемента (типажи для каждого размера были определены статически). Благодаря созданию функциональности константных дженериков («const generics») появилась возможность определения generic-функций для любых размеров массива, но они пока не включены в состав стабильных возможностей языка, хотя реализованы в компиляторе и теперь задействованы в стандартной библиотеке для типажей массивов любого размера. Например, следующая конструкция в Rust 1.47 приведёт к выводу содержимого массива, хотя раньше привела бы к ошибке:
    fn main() {
        let xs = [0; 34];
        println!("{:?}", xs);
    }
  • Обеспечен вывод более коротких трассировок (backtrace), выводимых при внештатных ситуациях. Из трассировки исключены элементы, не представляющие интереса в большинстве ситуаций, но захламляющие вывод и отвлекающие внимание от первичных причин проблемы. Для возвращения полной трассировки можно использовать переменную окружения «RUST_BACKTRACE=full». Например, для кода
    fn main() {
        panic!();
    }

раньше выводилась трассировка в 23 этапа, а теперь она будет сведена к 3 этапам, позволяющим сразу уловить суть:

thread 'main' panicked at 'explicit panic', src/main.rs:2:5
    stack backtrace:
       0: std::panicking::begin_panic
                 at /rustc/d...d75a/library/std/src/panicking.rs:497
       1: playground::main
                 at ./src/main.rs:2
       2: core::ops::function::FnOnce::call_once
                 at /rustc/d...d75a/library/core/src/ops/function.rs:227
  • Компилятор rustc обновлён до сборки с использованием LLVM 11 (Rust использует LLVM в качестве бэкенда для генерации кода). При этом сохранена возможность сборки со старыми LLVM, вплоть до версии 8, но по умолчанию (в rust-lang/llvm-project) теперь используется LLVM 11. Релиз LLVM 11 ожидается в ближайшие дни.
  • На платформе Windows в компиляторе rustc обеспечена поддержка включения проверок целостности потока выполнения (Control Flow Guard), активируемых при помощи флага «-C control-flow-guard». На других платформах данный флаг пока игнорируется.
  • В разряд стабильных переведена новая порция API, в том числе стабилизированы Ident::new_raw, Range::is_empty, RangeInclusive::is_empty, Result::as_deref, Result::as_deref_mut, Vec::leak, pointer::offset_from, f32::TAU и f64::TAU.
  • Признак «const», определяющий возможность использования в любом контексте вместо констант, применён в методах:
    • new для всех целых, отличных от нуля;
    • checked_add, checked_sub, checked_mul,checked_neg, checked_shl, checked_shr, saturating_add, saturating_sub и saturating_mul для всех целых;
    • is_ascii_alphabetic, is_ascii_uppercase, is_ascii_lowercase, is_ascii_alphanumeric, is_ascii_digit, is_ascii_hexdigit, is_ascii_punctuation, is_ascii_graphic, is_ascii_whitespace и is_ascii_control для типов char и u8.
  • Для FreeBSD задействован инструментарий из FreeBSD 11.4 (FreeBSD 10 не поддерживает LLVM 11).

Взято с opennet.ru

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

★★

Проверено: Shaman007 ()
Последнее исправление: CYB3R (всего исправлений: 2)

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

На питоне можно …?

Конечно можно.

Щас бы различать сорта полных по Тьюрингу языков по их возможностям.

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

Щас бы различать сорта полных по Тьюрингу языков по их возможностям.

А зачем когда есть плюсы? Берешь и пишешь. И не нужен тебе никак YOBA-хруст.

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

На питоне можно писать bare metal?

Без рантайма на Си - нет. Причём рантайм надо будет адаптировать под голое железо.

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

А зачем когда есть плюсы? Берешь и пишешь. И не нужен тебе никак YOBA-хруст.

Ты же понимаешь, что на твое заявление есть симметричный ответ.

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

https://ru.wikipedia.org/wiki/Симметрия#Симметрия_в_геометрии

Виды геометрических симметрий:

  • Зеркальная симметрия
  • Осевая симметрия
  • Вращательная симметрия
  • Центральная симметрия
  • Скользящая симметрия
  • Винтовая симметрия

Выбирай

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

Ну хорошо, я забыл. А ответ то какой? Хилый?

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

Как это соотносится с ОС? На bare metal обычно пишут как раз таки прикладной софт, без всяких ОС.

Хочешь сказать что не слышал о встраиваемых системах?

anonymous
()

Так это, там что появились const generics? Для юзер кода доступ появится скоро?

Когда уже придет С++-капец и отпадет соблазн оставаться на сях из-за уникальной возможности использовать значения в параметрах шаблонов.

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

Для юзер кода доступ появится скоро?

да обещают что скоро

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

Геральт ведет себя часто агрессивно, но он прав.

Называть язык системным до тех пор, пока его системное использование не имеет широкого применения, нельзя.

Причина например в том, что как бы ты чего лежа на диване не думал, в реальной жизни в больших сложных проектах всегда есть миллион факапов, которые никак предугадать нельзя. (Ну или надо быть шибко умным как Стивен Хокинг.) И все эти факапы и то, насколько язык и архитектура оказались удачно выбранными, увы, выясняется уже на практике.

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

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

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

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

Я слышал еще Кармак в сторону него смотрит. И еще гномовцам он нраится, со временем все больше проектов на нём.

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

Как bare metal относится к OS? Да уж, действительно, как :D

Как распил бабла-ресурсов на написание этой OS?

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

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

Ты думаешь что каждый раз когда эмбедеру нужна прошивка, он её заново пишет? Даже Arduin-щики так не делают.

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

Типа ОС это приложение для bare metal.

ОС - это не приложение. ОС - это (ненужная) прослойка между приложением и железом.

Удивительно, правда?

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

Ну можно и так смотреть, конечно.

Де-юре системный, де-факто пока такие заявления делать рановато.

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

Полностью с вами согласен. Когда использовал Espruino всё летало, после стал юзать embox и стмка стала ДИКО глючить

anonymous
()
Ответ на: ДОКАЗАНО от anonymous

ДОКАЗАНО_1

То есть ты хочешь сказать что из-за того что интерпретатор питона написан на С то он не является сис. языком?

А это значит что Rust является сис. языком.

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

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

сисьтемный

Твое мнение очень важно. (Нет.)

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

Ну я вообще за то что бы на ++ писалось всё, т.к. по мне это самый годный ЯП, поэтому я люблю Fuchia и Хайку.

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

эм, продакшн код, который формально принадлежит не мне на ревью? Ну ок :)

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

думаешь что каждый раз когда эмбедеру нужна прошивка, он её заново пишет

Прошивка - это рантайм. Если есть рантайм, то можно прикрутить любой язык.

no-such-file ★★★★★
()
Ответ на: комментарий от no-such-file

Прошивка - это рантайм. Если есть рантайм, то можно прикрутить любой язык.

Nyet. Прошивка это не рантайм, это таки прошивка, а реализует она рантайм или сразу приложение, - это дело того, кто ТЗ писал.

мимо-специалист-по-прошивкам.

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

Как bare metal относится к OS? Да уж, действительно, как :D

Как распил бабла-ресурсов на написание этой OS?

Ты думаешь что каждый раз когда эмбедеру нужна прошивка, он её заново пишет?

Эмм… Интересный у тебя ход мыслей…

shkolnick-kun ★★★★★
()
Ответ на: комментарий от ugoday

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

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

Ничего, это проходит с возрастом

И показал пример вошедшего во вкус профессионального мозахиста.

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

а реализует она рантайм или сразу приложение

В контексте обсуждения анонимусы имели в виду именно рантайм, в виде встраиваемой ОС и т.п.

no-such-file ★★★★★
()
Ответ на: комментарий от anonymous

Ну я надеюсь, что после 100500 удара по лбу у него в голове появятся некоторые мысли, что инструмент всё же не идеален )))

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

профессиональный мозахист

после 100500 удара по лбу у него в голове появятся некоторые мысли

Профдеформация ни о чем не говорит?

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

Профдеформация ни о чем не говорит?

Иногда боль побеждает привычки ))

htower_ ★★
()
Ответ на: комментарий от no-such-file

Прошивка - это рантайм

Чего???

Если есть рантайм, то можно прикрутить любой язык.

А раст или питон можно прикрутить?

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

А раст или питон можно прикрутить?

Хоть чёрта лысого в ступе. Непонятно почему это вызывает такое удивление? Каждый первый ПК из 80-х имел вместо ОС «прошивку» в виде интерпретатора бейсика, который выступал в роли системного языка.

no-such-file ★★★★★
()
Ответ на: комментарий от seiken

а откуда ты знаешь, что в твоем коде нет багов?

Может там всё покрыто:

  • тестами

  • санитайзерами

  • анализаторами

  • фаззерами

и весь код собирается:

  • c Weverything

  • в constexpr

В C++ есть наибольшее количество инструментов для проверки кода…

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

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

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

Из этого всего списка только «анализаторы и санитайзеры» адресуют специфические проблемы С++. Общие проблемы тестирования сохраняются и в rust, но вот потребность в «анализаторы и санитайзеры» отпадает, ну или по крайней мере уходит на второй (третий/четвертый) план. Кстати, если почитать best practices по статическим анализаторам С++, рекомендуется натравливать как можно большее их количество на разрабатываемый продукт. T.e. нужно еще тратиться на лицензии, интеграцию, администрирование. В случае со всякими valgrind еще и дизайнить такие тесты, чтобы все это работало не полдня, забивая интеграционную цепочку на каждый чих или нанимать xxx за доширак, чтобы гоняли этот valgrind.

И вот так работодатель думает: "с одной стороны мне нужен спец по плюсам с 20 летним стажем, и еще дорогие тулзы и/или помощники в придачу («со мной ездит мальчик»), а с другой стороны, вчерашний студент, который С++ знает на базовом уровне, плюс основной опыт в rust, и без всяких «мальчиков» и дорогих тулзов. И что выберет работодатель?

в constexpr

А что constexpr ? Как он помогает бороться с порчей памяти? Я всегда думал, что оно для оптимизации производительности.

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