LINUX.ORG.RU

Вышел Rust 1.23

 ,


2

9

4 января состоялся плановый релиз компилятора и стандартных средств разработки системного языка программирования Rust — 1.23.

Интересные изменения:

  • За счёт предотвращения ненужного копирования аргументов функций уменьшено потребление памяти. Например сам компилятор rustc стал потреблять на 5-10% меньше памяти.
  • rustdoc перешёл на рендеринг документации при помощи CommonMark. Раньше использовался Hoedown.
  • The Cargo Book переехал с doc.crates.io на doc.rust-lang.org и обновил формат.
  • cargo uninstall научился сразу удалять несколько пакетов. Например, команда cargo uninstall foo bar удалит foo и bar.
  • auto трейты теперь разрешены в трейтовых объектах. Один из коммитов этого изменения также окончательно удалил элемент языка send.
  • Проверки типов операндов бинарных операторов теперь производится относительно левого операнда, что предотвращает путаницу в соответствующих сообщениях об ошибках.
  • Исключена необходимость в T: Sync для RwLock<T>: Send.
  • Исключена необходимость в T: Sized для {<*const T>, <*mut T>}::as_ref и для <*mut T>::as_mut.
  • Оптимизирована реализация Thread::{park, unpark}.
  • Улучшена производительность SliceExt::binary_search.
  • Трейт AsciiExt объявлен устаревшим, а его методы перенесены в примитивные типы.
  • char::escape_debug теперь использует Unicode 10 вместо Unicode 9.
  • Включён LLVM-флаг TrapUnreachable.
  • musl, используемый для сборки musl rustc, обновлён до 1.1.17.
  • Улучшена производительность SliceExt::binary_search.
  • rustfmt включён в основную инсталляцию.
  • Минимальная версия LLVM изменена на 3.9.

Полный перечень изменений

>>> Анонс

★★★★★

Проверено: Shaman007 ()

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

«А, так в Си++ отсутствуют голые указатели? Тогда окей.»

не вижу в своём комментарии слово «С++»

А, окей. Тогда о каком языке с RAII ты говоришь?

ну и, может вы всё-таки приведёте пример RAII кода

Что такое «RAII код» и пример на каком языке ты ожидаешь?

в котором есть ошибки памяти и которые мог бы отловить раст?

Зачем? Ты скажешь (как сказал выше), что это «нарушение RAII» и поэтому нещитово. Хотя весь пойнт в том, что можно нарушить все правила, и компилятор тебе ничего не скажет.

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

Тогда о каком языке с RAII ты говоришь?

Нет языков с RAII, также как нет языков с ООП: даже на самом ООП-шном из ООП языков всегда можно написать антипаттерн «public морозов» и код перестанет быть ООП.

Что такое «RAII код» и пример на каком языке ты ожидаешь?

RAII - это методология разработки, примерно как ООП код можно на любом языке написать. Но так уж сложилось, что мне легче воспринимать языки с плюсоподобным синтаксисом.

Ты скажешь (как сказал выше), что это «нарушение RAII» и поэтому нещитово.

Если вы напишете код, нарушающий RAII, то конечно скажу

можно нарушить все правила,

а зачем? они довольно просты

и компилятор тебе ничего не скажет.

ну так и растовый компилер не скажет, если я unsafe напишу

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

а зачем? они довольно просты

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

ну так и растовый компилер не скажет, если я unsafe напишу

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

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

Тогда о каком языке с RAII ты говоришь?

Нет языков с RAII

Я об этом не спрашивал. Если ты не понял прошлый вопрос, я его переформулирую: о каком языке ты говоришь?

можно нарушить все правила,

а зачем?

По ошибке, естественно.

растовый компилер не скажет, если я unsafe напишу

Скажет. deny(unsafe_code) - режим по умолчанию.

А если добавишь атрибут, разрешающий unsafe, тебе много скажут старшие товарищи.

tailgunner ★★★★★ ()
Последнее исправление: tailgunner (всего исправлений: 1)
Ответ на: комментарий от AntonyRF
{
  MyClass o;
  ...
  // destructor is called
}

{
  auto o_ptr = std::make_unique<MyClass>();
  ...
  // destructor is called
}
vertexua ★★★★☆ ()
Ответ на: комментарий от vertexua

Спасиб мил человек =) Но скажи, возможно ли тоже самое сделать с вектором, например, с std::vector?

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

С любыми классами. Вектор выглядит как std::vector<T> - где T любой тим. Таким образом при уничтожении вектора будут удалены все обьекты в нем и у них будут вызваны декструкторы.

Естественно если T окажется MyClass* или MyClass&, то декструктор не будет вызван. Необходимы вместо этого смарт-поинтеры, вроде std::unique_ptr<MyClass> или std::shared_ptr<MyClass>

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

Естественно если T окажется ... MyClass&

Не окажется.

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

По ошибке, естественно.

А компилятор и статический анализатор на что? Те вещи, которые они не отлавливают, выглядят крайне нехарактерными для С++ кода, а как правило, и вовсе нарушают ООП подход. Самое главное, в рамках RAII плюсовый код получается более лаконичным, чем без него, а логика прозрачнее, и я сам не хочу писать не-RAII попросту в силу лени: например, требование избегать явной логики в деструкторах прикладных классов. Скажете, человек «по ошибке» напишет деструктор или передаст коллекцию по значению вместо ссылки? Ну-ну.

Здесь, например:

Вышел Rust 1.23 (комментарий)

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

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

можно нарушить все правила,

а зачем?

По ошибке, естественно.

А компилятор и статический анализатор на что?

Компилятору пофиг, к «статическим анализаторам» обычно отсылают, когда становится ясно, что в языке дыры.

если написать нормально

Можно просто сказать «а вы не делайте ошибок». Отличный совет, жаль, что ты ему не следуешь.

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

А если добавишь атрибут, разрешающий unsafe, тебе много скажут старшие товарищи

Если они, положим, промолчали по поводу неRAII кода в плюсах, то почему они должны что-то сказать по поводу unsafe в расте?

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

Если они, положим, промолчали по поводу неRAII кода в плюсах, то почему они должны что-то сказать по поводу unsafe в расте?

А почему они промолчали по поводу «неRAII»?

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

к «статическим анализаторам» обычно отсылают, когда становится ясно, что в языке дыры

с точки зрения поиска ошибок, какая разница, как называется инструмент для статического обнаружения ошибок, «компилятор» или «статический анализатор»?

Можно просто сказать «а вы не делайте ошибок».

Нет. Зато можно сказать: «строго соблюдайте такие правила и не получите таких-то ошибок, а ваш код будет проще».

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

с точки зрения поиска ошибок, какая разница, как называется инструмент для статического обнаружения ошибок, «компилятор» или «статический анализатор»?

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

Можно просто сказать «а вы не делайте ошибок».

Нет.

Да. Ты именно это и говоришь.

можно сказать: «строго соблюдайте такие правила

Вышел Rust 1.23 (комментарий)

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

Хороший вопрос.

Думаю, причин может быть только 2-е

1) Неадекватность разрабов

2) Экономия на спичках: во многих проектах попросту всем плевать на безопасность и скорость кода - лишь бы на час быстрее в продакшн код запустить.

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

А почему они промолчали по поводу «неRAII»?


Думаю, причин может быть только 2-е

1) Неадекватность разрабов

2) Экономия на спичках: во многих проектах попросту всем плевать на безопасность

Ух ты. То есть причины вроде «к концу рабочего дня они заколебались выискивать малозаметные огрехи и этот просто пропустили» не рассматривается вообще. «Сколько тебе лет?» (ц).

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

ptr = nullptr; MyClass& ref = *ptr.

То, что референсы не nullptr - convention

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

Ну, психи всегда найдут себе «малозаметные огрехи» поискать. Когда-то я работал в фирме, где «трагедией» считался каждый лишний пробел в коде (и если бы только...). Слава богу, я оттуда ушёл и теперь работаю в нормальном режиме.

А так, контроль за raii-шностью кода (почти полный) у нас написан на скриптах и опционально используется во время сборки. Эти скрипты ещё много чего умеют, например, некое подобие ORM , но это другая история.

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

Анонимус хотел сказать. что ты не можешь поместить ссылку в вектор.

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

психи всегда найдут себе «малозаметные огрехи» поискать

Мне кажется, ты не понял смысл текста.

контроль за raii-шностью кода (почти полный)

почти полный

Окей.

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

Оно не умеет в

1) кастомные аллокаторы, научить этому можно, но у нас в проекте они не используются

2) внешние либы - раст в такое тоже не умеет

3) многопоточность - мы не выходим за рамки асинхронщины (нам с лихвой достаточно), а на ней скрипт отлично отрабатывает

4) не работает для блоков помеченных UNSAFE {} - у раста есть свой аналог

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

Оно не умеет в

[...]

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

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

Анализ плюсового кода скриптами - это уже анекдот, в духе регэкспов cppcheck.

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

А куда деваться? Хрен с ней с RAII и безопасностью памяти - оно у нас только потому что могём. Рефлексия на плюсах по-другому не делается, которую и в раст ЕМНИП не завезли.

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

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

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

Не знаю, что это за человек, этот ваш Никто

Не щзнаю, что за люди эти ваши «вы», и есть ли у них проекты на гитхабе.

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

И причём тут мои проекты на гитхабе?

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

И причём тут мои проекты на гитхабе?

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

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

тогда так: по какому поводу у вас истерика?

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

тогда так: по какому поводу у вас истерика?

И на этот вопрос я ответить не могу, потому что максимум моих эмоций здесь - легкое раздражение.

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

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

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

Вот оно как, это вы истерить ещё даже не начинали... Что ж, тогда мне жаль окружающих вас людей.

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