LINUX.ORG.RU

Rust 1.36

 


1

9

Команда разработчиков с радостью представляет вам Rust 1.36!

Что нового в Rust 1.36? Стабилизирован трейт Future, из нового: крейт alloc, MaybeUninit<T>, NLL для Rust 2015, новая реализация HashMap<K, V> и новый флаг --offline для Cargo.

А теперь подробнее:

  • В Rust 1.36 наконец-то стабилизировали трейт Future.
  • Крейт alloc.
    Начиная с Rust 1.36, части std, которые зависят от глобального аллокатора (например, Vec<T>), находятся в крейте alloc. Теперь std реэкспортирует эти части. Больше об этом.
  • MaybeUninit<T> вместо mem::uninitialized.
    В предыдущих релизах mem::uninitialized позволяла вам обходить проверку инициализации, использовалось это для ленивой аллокации массивов, но эта функция довольно-таки опасна (подробнее), поэтому был стабилизирован тип MaybeUninit<T>, который безопаснее.
    Ну и так как MaybeUninit<T> является более безопасной альтернативой, то, начиная с Rust 1.38, mem::uninitialized будет являться устаревшей функцией.
    Если хотите больше узнать про неинициализированную память, можете прочесть запись в блоге (Alexis Beingessner).
  • NLL для Rust 2015.
    В анонсе Rust 1.31.0 разработчики рассказывали нам о NLL (Non-Lexical Lifetime), улучшении для языка, которое делает borrow checker умнее и более дружелюбнее к пользователю. Пример:
    fn main() {
        let mut x = 5;
        let y = &x;
        let z = &mut x; // This was not allowed before 1.31.0.
    }
    
    В 1.31.0 NLL работал только в Rust 2018, с обещанием, что разработчики добавят поддержку и в Rust 2015.
    Если хотите больше узнать про NLL, можете прочитать больше в этой записи в блоге (Felix Klocks).
  • Новый флаг для Cargo - --ofline.
    В Rust 1.36 стабилизировали новый флаг для Cargo. Флаг --offline говорит Cargo использовать локально кешированные зависимости, для того, чтобы позже их можно было использовать без интернета. Когда нужные зависимости не доступны оффлайн, и если интернет все-таки нужен, то Cargo вернет ошибку. Для того, чтобы предварительно скачать зависимости, можно использовать команду cargo fetch, которая скачает все зависимости.
  • Здесь вы можете прочитать более детальный обзор изменений.

Также есть и изменения в стандартной библиотеке:

Другие изменения Rust, Cargo и Clippy.

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

★★★

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

Скажите а есть шанс что раст когда-нибудь упростится? Или будет все сложнее и монструознее как плюсы?

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

Ну NLL упрощает работу с лайфтаймами. Вроде это одно из самых сложных

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

Не, это плиз к пёрлу и его встроенному регэкспу...

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

так он и так пока более-менее простой, успевайте вливаться пока не кресты

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

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

Скажите а есть шанс что раст когда-нибудь упростится? Или будет все сложнее и монструознее как плюсы?

Все как в плюсах, сам язык усложняется, но писать на нем становится проще. Как пример выше уже привели NLL.

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

Как скучно мы живём! В нас пропал дух авантюризма... (с)

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

Неверно. В нём нету даже 10% возможностей плюсов. Как бы тебе объяснить. Это достаточно сложно понять адептам, которые нихрена в теме не понимают. Если попроще. С++ сложный не потому, что он какой-то там системный, лоулевел и прочая херня. Он сложный чисто номинально. Базовая сложность у него обычная.

В случае же с недоязычком оно не обладает даже возможностями пхп, но уже сложное(вернее оно не сложное - оно мусорное). Это значит, что коэффициент сложности у него больше. Т.е. если мы представим себе недоязычок, который вдруг станет мочь всё тоже, что могут кресты - он будет в десятки раз сложнее. Вернее его просто не существует и существовать не будет. Именно поэтому он и недоязчок.

К тому же, эта сложность, как я уже говорил, имеет разную природу. В С++ сложность она человеческая, она логичная. Как бы тебе попроще объяснить. Вот представь, что есть некая фича. В одном языке она реализована просто как дополнение к базовому функционалу.

Допустим, тот же constexpr. Ты всегда хотел посчитать, но не мог. Тебе дали возможность и далее тебе ничего изучать ненужно. Да, есть какие-то нюансы по части ограничений, но их(ограничения и как следствие нюансы) постоянно выпиливают.

В другом языке тебе добавляют попросту набор новой магии, новой семантики. Допустим, берём макросы недораста. Хомячки всегда орали «вот у си препроцессор и он говно, типа другой язык». И тут им дали «другой язык», но их это не волнует.

При это, сам язык pp использует базовую семантику си и он достаточно прост. Раст говно же является отдельным недоязычком уровня m4. Т.е. дошколята просто взяли древнее говно и прикрутили к своему недоязычку. Как только тебе начнут кукарекать про «у нас там не текст» - шли нахрен клоунов, потому что это текст. Абсолютно неважно на какой стадии и с какой валидацией ты вставляешь куски текста. Семантически это куски текста, в контексте макроса.

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

Что-то уровня тех же говномакросов в С++ есть - это всякие parameter pack. Там так же запилена некая новая семантика, но в любом случае всё это сделано не так убого и в гораздо меньших масштабах.

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

У недоязычков есть все возможности. Это делается крайне просто. Т.е. если ты не сделал в новом язычке то, что может С++ - ты говно, по определению. Но они не сделали.

Дак вот, parameter pack вполне себе типичный пример той самой плохой сложности. И С++ состоит из неё на 5%, но даже это проблема. недоязычок состоит из неё на 95%. И пока он ничего не может - он ещё не превысил предел убогости, и чем больше в него будут пытаться впихнуть - тем больше оно будет разваливаться. Оно уже разваливается.

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

Расскажи, почему у тебя так бомбит от раста?

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

Когда выходит новая версия моего рабочего инструмента, я бегу не лог изменений смотреть, не тулчейн обновлять, нет. Я бегу на лор. Я знаю, что царь копрофилии будет здесь. И да, он опять будет доказывать, что это не он жрёт говно (кстати, именно этим и объясняется количество слов «говно» и производных в твоём недоопусе). В целом, здесь нечему стыдиться. Любой психолог знает, что перенос своего влечения на окружающих — общая черта для сторонников пикацизма, кем этот персонаж и является. Тщетные попытки доказать, что говно это и не говно вообще, а полезное сочетание сероводорода, индола, скатола и т.д., а значит говном нужно называть как раз обычную еду, избавленную от столь замечательных ингредиентов.

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

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

А как можно было бы сделать? Ну теоретически. Раз пример ошибки.

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

Скажите а есть шанс что раст когда-нибудь упростится?

Только если будет его разрабатывать инженер уровня Вирта/Хоара/Дийкстры.

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

Для сравнения:

Можно определённо сказать, что язык Модула-2, сохранив положительные черты Паскаля, имеет ряд особенностей, делающих её языком, гораздо более мощным и лучше приспособленным как для системного, так и для прикладного программирования. Основные преимущества Модулы-2 перед современными ему языками структурного программирования следующие:

Простота и лаконичность определения языка. Полное определение синтаксиса в нотации РБНФ занимает менее 3 страниц, полные синтаксические диаграммы — 12 страниц, официальное «сообщение о языке» имеет объём 40 страниц, что для универсального языка с такими возможностями — едва ли не абсолютный минимум. Для сравнения: официальное полное определение языка Ада занимает 400 машинописных страниц.

Простой, логичный и однородный синтаксис, очищенный от избыточных конструкций и элементов, провоцирующих ошибки написания. Модула-2 — первый из директивных языков программирования, в котором удалось отказаться от оператора GOTO.

Хорошо продуманный механизм разделения программы на единицы компиляции (модули) с явно описываемыми интерфейсами и полностью контролируемым импортом, позволяющим импортировать как целые модули, так и отдельные элементы с возможностью как квалифицированного (с указанием имени модуля) так и неквалифицированного использования имён импортированных объектов.

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

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

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

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

Скажите а есть шанс что раст когда-нибудь упростится?

Только если будет его разрабатывать инженер уровня Вирта/Хоара/Дийкстры.

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

Не понимаю стонов с якобы «сложности» языка Rust. На мой взгляд, Rust - один из самых стройных, изящных и понятных языков, где нет сборщика мусора (GC). Другое дело, что если нет опыта с языками ФП и с языками без GC, такими как Си / Си++ / Паскаль / Ада, то Rust по началу может показаться непривычным. Порог вхождения выше, чем у Java или C#, но это абсолютно нормально для языка без GC. А то обленились, понимаешь!)

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

Я думаю его читали многие, но ссылку на кусок кода, который бы доказывал, что там есть GC никто не приводил (не выдуманный пример, как царь показывал какие в Rust дженерики, а кусок кода из исходников Rust

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

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

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

GC GC рознь.

Тут дело не в нем, а в способе проектирования. То, что прокатывает с прикладным ПО (итерационная разработка), не прокатывает с инструментальным. По сути, это если бы тебе приносили отвертку, каждый раз новой формы и способа эксплуатации.

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