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)

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

Опять бот нёсёт херню игнорируя мои тезисы. Целевое использование бубунты - стряпать новые дистры. Значит - попов не вор. Целевое использование машины - ехать. Значит, угнать машину - это не воровство.

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

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

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

Нет, ты ошибаешься.

Методичка у вас одна на всех.

С паранойей - в психдиспансер и принять таблеточки, пожалуйста.

Я уже приводил тысячи примеров ещё больше «поливания помоями» - где ты был? Поливали говном меня - где ты был?

Я не читаю ЛОР насквозь. И никто из модераторов не читает. Есть претензии - есть спецтема, на которую в т.ч. я подписан и оперативно реагирую.

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

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

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

Вот досада будет если создатели llvm, на определенном этапе жизни проекта, сочтут что можно продолжить его разработку на rust :3 (спойлер: вряд ли такое когда-либо будет, разве что частично)

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

Твои вайтишно-параноидальные тезисы не меняются со времен твоего первого появления в растотредах

Это вы раст-сектанты, неменяетесь

их даже читать не нужно

А зачем ты их читаешь тогда?

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

Откуда ты знаешь, что у него в голове? Знать ты не можешь, а значит ты уже несешь бред.

Ничего нового же, скучно.

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

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

Мы можем опять поиграть в это

Мы, Николай Второй?

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

Тяжёлая симптоматика, опять без таблеток.

Пожалуй, закрою тред от анонимов.

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

У них цикл разработки, так что обед на лор приходит точно по расписанию.

quantum-troll ★★★★★
()

Погуглил «крейт»,

«Крейт» — […] моделирующее бельё.

Так что за бельё нужно брать, чтобы лучше код писать, подскажите, если не секрет?

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

Так что за бельё нужно брать

Из фольги. Чтобы мозг не разжижало.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Аноним, как всегда, бьет не в бровь, а в глаз.

1) Базарная модель разработки превратила язык в базар, где, собственно, никто не понимает, что происходит в целом и куда они идут. Куча мелких улучшений и плюшек, которые не складываются в единую цельную картину и порой вообще друг другу мешают либо просто абсурдны. Не хватает «диктатора», который бы нарисовал общую концепцию и фильтровал бы то, что ей не соответствует. Демократия - это хорошо, но не тут...

2) Язык «системным» никогда не был, не разрабатывался для этого и вообще даже не задумывался, судя по всему. Почему его начали продвигать как «системный» - ума не приложу. Он слишком много абстрагирует и скрывает от программиста, чтобы на нем можно было комфортно писать драйвера и прошивки. Какие-нибудь системные утилиты или СУБД - да, пожалуй, но не близкие к железу вещи.

Barracuda72 ★★
()
Ответ на: комментарий от Barracuda72
  1. Какие-либо примеры есть? У авторов есть вполне чёткий план развития.
  2. «Он слишком много абстрагирует и скрывает от программиста». Например?
  3. «Какие-нибудь системные утилиты или СУБД» - это и есть современная системщина.
RazrFalcon ★★★★★
()
Ответ на: комментарий от Barracuda72

1) Ну это полная чушь, даже комментировать не буду.

2) Чушь не меньшая, но прокомментирую. Язык абстрагирует не больше, чем требует от него программист, но из-за своей системности в абстракция всё же сильно ограничен.

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

Представляю ситуацию. Человек Х вызывает скорую, говорит «тут человека надо забрать в дурку». Приезжают санитары «кого забирать?». Х: «смотрите, здесь аноним на форуме пишет такой бред, но чтобы понять, что это бред, надо быть компетентным разработчиком ПО». Санитары: «о, а вам мерещатся люди, заберём-ка вас на обследование».

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

Даже если человек всерьёз хочет писать всю системщину на пыхе в глазах санитаров он полностью здоров пока не нарушает дисциплину ИРЛ.

Вон нашлись где-то люди, которые хотят писать под ардуино и подобное не на сишке, а на js. Казалось бы, повод звать санитаров «тут реалтайм драйвера на js пишут». Но всем пох. Главное - дисциплина ИРЛ.

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

Кроме того, что «системность» ограничивает набор фич, для нормального программирования не хватает множества фич, например GAT и implicit параметры.

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

С большой вероятностью царь и irl такой же шизик.

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

Rust

экспертное мнение от @Eddy_Em

Очевидный п.19 офтопик-листа.

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

А на практике этого почти не случается.

Дохрена, вообще-то, в том числе и за последнее время.

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

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

У раста есть Cranelift,но в нем пока нету каких либо оптимизаций

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

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

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

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

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

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

Вон нашлись где-то люди, которые хотят писать под ардуино и подобное не на сишке, а на js. Казалось бы, повод звать санитаров «тут реалтайм драйвера на js пишут». Но всем пох. Главное - дисциплина ИРЛ.

JS JS рознь. Мы же разным диалектам лиспа не удивляемся? Синтаксически — да, есть стандартные конструкции. По рантайму же это всё «две большие разницы». Типичный писака под веб или ноду, посади его за такой рантайм вроде Искры или даже десктопный Gjs, скажет «куда я попал и где мои вещи?» И правильно, между прочим, скажет. Знание синтаксиса в данном случае — даже не 5% успеха.

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

Жаль что царя разкороновали, я ему фуксию притащил (и там этого rust чуть ли не в каждый поддиректории), да и всем тем кто говорит что rust не подходит для системщины. Там воде и go где-то я видел, и python и что-то еще, но подавляющее количество исходников это rust,c++,c

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

Нет концепции наследования ни в каком виде

Объясните мне, почему наследование — это недостаток? По-моему, так вполне удобная вещь.

любая структура - это тупой набор байт, нет исключений и связанных с этим минных полей

В языках с наследованием точно так же можно делать «тупые наборы байт». Конкретно в C++ с этим не совсем удачно получилось, там вся разница между struct и class в дефолтной области видимости, и за простотой структуры надо следить самому. Но в новом языке можно же было развести чётко — вот это POD, ничего лишнего, а вот класс с наследованием и полиморфизмом.

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

Объясните мне, почему наследование — это недостаток? По-моему, так вполне удобная вещь.

Может возникнуть ситуация, при которой невозможно избавиться от функционала «наследуемого класса» которая не в пень колоду для «класса» который его наследует. Но на самом деле это проблема неправильно построения и композиции, а не наследования как такового. Но что есть, то есть. Поэтому многим проще разрабатывать на «интерфейсах» нежели чем через наследование.

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

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

Вот именно. :(

Поэтому многим проще разрабатывать на «интерфейсах» нежели чем через наследование.

Интерфейсы можно рассматривать как частный случай наследования, который решает часть задач. Но не все. У меня есть часть функциональности, которая одинакова для двух классов. В C++, в объектном паскале (да и в Java, как я понимаю) я мог вынести её в предок. В расте, как я понимаю, это имитируется через типажи?

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

тут дело в том, что в больших иерархиях наследования, когда они перестают быть обозримы человеческой «оперативкой» мозга, очень просто нагородить очень плохого в архитектурном плане кода, который потом будет очень сложно рефакторить. Если для вашего проекта у вас все вполне обозримо, складно и вы наперед знаете какую функциональность вы будете добавлять в иерархию наследования, тогда да, в наследовании ничего плохого нет. Но обычно практика показывает, что редко кому это удается, а «интерфейсы», как говорится - «ня». В общем от этого и тенденция немного «хейтить» наследование.

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

культ свидетелей воровства процветает? :D

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

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

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

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

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

Когда там Дебиан новый уже выйдет?

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

Какие-либо примеры есть?

Из самого распоследнего - много лет в стабильном компиляторе не было возможности сборки standalone бинарников. Причем формально no_std стабилизировали, а panic_handler все эти годы висел за feature_gate и был недоступен. В итоге в стабильном компиляторе была фича, которую нельзя использовать. Пофиксили ситуацию только в декабре 2018. И такая дребедень у них во все поля. Да что там, они до сих пор с моделью памяти не определились! В «системном» ЯП, ага. «Ну когда-нибудь в будущем определимся, но чето типа похожее на C» - официальный ответ, описанный в документации. Это было бы смешно, если бы не было так грустно.

У авторов есть вполне чёткий план развития.

Ворох RFC называть «четким планом» очень смело.

«Он слишком много абстрагирует и скрывает от программиста». Например?

Например всё. Очень и очень многие фишки языка требуют поддержки как минимум со стороны core. Официальная рекомендация - «перед написанием софта под платформу сначала пересоберите или портируйте на нее core, core - это аналог freestanding headers в C». Правда о том, что эти freestanding headers в целом не особо и нужны, да и по объему на порядки меньше, они умалчивают. Отдельные куски core (почти все полезные) требуют аллокатора - а это, на секундочку, настроенный и работающий MMU и прочие нетривиальные вещи. Список можно продолжать бесконечно, но все это вытекает из моего пункта №1 - язык развивается хаотично, без четкой цели, и «системности» во всех смыслах в нем ноль. Я не говорю что он плох - нет, как раз в прикладных и околоприкладных вещах, типа многопоточных и сложных программ вроде ВНЕЗАПНО браузеров, он очень к месту. Но не в ОС, драйверах и прошивках.

«Какие-нибудь системные утилиты или СУБД» - это и есть современная системщина.

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

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

Да, но у V есть поддержка только x64, у LLVM же все таки больше поддерживаемых платформ

Авторы V, судя по всему, проживают сразу в нескольких временных потоках и «уже есть» и «уже сделано» может означать «репозиторий с README» создан. Но транспиляция в Си как минимум заявлена. Не IR конечно, но зато универсальней. Хотя, полагаю, на этом пути куча камней в реальности.

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