LINUX.ORG.RU

Rust 1.10

 ,


0

4

Анонсирована очередная версия языка программирования Rust 1.10, разрабатываемого Mozilla совместно с сообществом.

Улучшения компилятора:

  • Добавлен новый тип крейта cdylib, предназначенный для экспорта C API. Основные отличия от dylib:
    • отсутствие метаданных;
    • разрешено LTO;
    • все библиотеки должны быть статически слинкованы;
    • экспортируются лишь те символы, которые помечены как extern. Например:
      pub fn foo() {} // не экспортируется
      #[no_mangle] pub extern fn bar() {} // экспортируется
    Для сравнения: «hello world» cdylib занимает 7.2КБ, а dylib - 2.4МБ.
  • Добавлена поддержка платформ i586-unknown-linux-gnu, i686-unknown-linux-musl, и armv7-linux-androideabi;
  • Снижено потребление памяти на ~100МБ при проверке типов;
  • Ускорена проверка T: Sized на 15%;
  • Улучшена кодогенерация при #[derive(Copy, Clone)].

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

Breaking changes!

  • AtomicBool теперь преобразуется в bool, а не isize. Демонстрация:
    use std::sync::atomic::AtomicBool;
    use std::mem::transmute;
    
    fn main() {
        let foo: bool = unsafe { transmute(AtomicBool::new(true)) };
    }
    
    На старых версиях компилятора будет ошибка;
  • time::Duration::new теперь будет паниковать при переполнении;
  • String::truncate теперь будет паниковать чуть меньше;
  • Небольшое изменение поведения макросов на этапе их парсинга: из :ty и :path следует :block;
  • Исправлен баг, связанный с гигиеной макросов. Следующий код будет валидным в устаревших версиях компилятора:
    fn main() {
        let x = true;
        macro_rules! foo { () => {
            let x = 0;
            macro_rules! bar { () => {x} }
            let _: bool = bar!();
            //^ `bar!()` использует первый `x` (который bool),
            //| а должен использовать второй `x` (который i32).
        }}
        foo! {};
    }
  • Переименование платформ:
    • arm-unknown-linux-gnueabi => arm-unknown-linux-gnu;
    • arm-unknown-linux-gnueabihf => arm-unknown-linux-gnu;
    • armv7-unknown-linux-gnueabihf => armv7-unknown-linux-gnu.
    Другими словами, изменены target_env, применяемые в conditional compilation.

Изменения в менеджере зависимостей Cargo:

  • Добавлен флаг --force, -f для подкоманды cargo install, предназначенной для загрузки исходных текстов из crates.io, их компиляции и установки в каталог ~/.cargo/bin. Это нововведение теперь позволит писать:
    cargo install FOO -f
    вместо:
    cargo uninstall FOO
    cargo install FOO
    Однако всё еще невозможно узнать, а требуется ли обновление вообще?
  • Диагностические сообщения теперь отправляются в stderr, а не в stdout;
  • С помощью флагов cargo doc --bin и cargo doc --lib можно выбрать: генерировать html документацию для проекта-приложения src/main.rs или проекта-библиотеки src/lib.rs;
  • В конфигурационном файле Cargo.toml, который можно встретить в корневом каталоге каждого проекта, теперь можно указать, каким образом макрос panic!() будет завершать приложение: unwind (по умолчанию) или abort;
  • Добавлен флаг cargo --explain FOO, поведение которого идентично rustc --explain FOO: показывает документацию по номеру ошибки;
  • В черный список имен крейтов добавлены ключевые слова раста, такие как fn, unsafe, let и прочее.

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



Проверено: tailgunner ()
Последнее исправление: cetjs2 (всего исправлений: 6)

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

Rust не облегчает жизнь С/С++ программистам, а только добавляет гемора

модули (=нормальная система сборки), шаблоны с концептами. Кто бы еще добавил такого гемора

anonymous
()

«hello world» cdylib занимает 7.2КБ, а dylib - 2.4МБ.

херасе прорыв. теперь-то заживем?

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

Вообще это хорошо

Эммм. Особенно тем кто уже что-то написал на нем большое, в надежде, что мажорная 1 в версии означает, что дальше Breaking changes не будет.

Т.е. перед обновлением компилятора придется читать все изменения? Очень круто.

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

Я и не говорил, что С++ хорош, как раз наоборот. Но синтаксис раста явно не прост и не элегантен.

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

Эммм. Особенно тем кто уже что-то написал на нем большое, в надежде, что мажорная 1 в версии означает, что дальше Breaking changes не будет.

не считайте разработчиков rust глупее себя. Для каждого breaking change составляется отдельный документ (RFC) в стандартном формате, который варится сколько потребуется в отдельном репозитории. В частности проверяют, сколько пакетов на crates.io потребует изменения исходников. Потом, если RFC принят, старую фичу на несколько релизов помечают устаревшей, а новую - нестабильной. И только после этого ее мерджат в стабильный релиз.

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

Т.е. перед обновлением компилятора придется читать все изменения? Очень круто.

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

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

А Rust никуда и не вьезжает. LISP дал существенный вклад и по мнению уважаемого Алана Кея (создателя ООП, но не того, что в Си++) стоит учить LISP. Также, с LISP-машин вышел тот же Ричард Столлман без которого современная жизнь была бы ужасна.

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

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

Тому, кому удастся создать и распространить убийцу C++ сильно поднимает ЧСВ. Потому все и хотят. Но получается пока не очень.

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

Также, с LISP-машин вышел тот же Ричард Столлман без которого современная жизнь была бы ужасна.

Ага, все пилили бы FreeBSD, а не Linux, просто ужас как страшно.

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

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

Очередной отморозок, замороженный в 80-х. С разморозкой.

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

80% случаях где люди пишут на C/C++ можно использовать Go

Ну да, ну да, а в 80% случаях где люди пишут на Ассемблере можно использовать JavaScript и PHP

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

Скорее всего развитие FreeBSD без GNU/Linux было бы печальным. Фряха сейчас некому не нужна, а была бы вообще некому неизвестна.

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

Скорее всего развитие FreeBSD без GNU/Linux было бы печальным.

С чего это? GNU/Linux пилят корпорации т.к. это им выгодно, с FreeBSD было бы так же. Это GNU без Linux была бы на уровне Hurd, а то и ниже.

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

Тащемто, в forth-процессорах можно сделать ассемблер в виде PHP.

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

Это Торвальдс безбожно взял наработки проекта GNU. Без них Линукс бы остался ещё одним проприетарным ядром. К примеру, проекта GNU в системе 15%, а Linux занимает 1,5%.

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

А ничего и не считаю.

Только вот я о другом совсем. Меня мало что и квам утверждают у себя внутри.

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

Да не в жизнь не признается...

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

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

А почему все BC не вынести на мажорный апдейт?

Не знаю, я бы так и сделал. Раз в год / пару лет выпускать жирный релиз с правками языка.

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

man асинхронные программирование))

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

Откуда же вы беретесь то? Go по большей части PHP новое. Но со своими особенностями, пытается конкурировать на поле миниутилит и веба. Rust пытается конкурировать в областях, где сейчас принято использовать C/C++. Больше смысла было бы если ты бы спросил «почему не Nim?».

Откуда же вы беретесь то? ..не отличающие интерпретируемые языки от компилируемых, и не посмотревшие хотяб простейшие примеры. Го давно широко используется, включая веб. Rust пытается конкурировать в областях... ээ... ну просто пытается покачто. Больше смысла было бы вообще не спрашивать, ибо тред религиозных фанатиков.

..Переписал, не благодари))

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

Мисье, но почему фряха на дне?

Во-первых это не дно. Дно это там, где тот самый Hurd. Плюс FreeBSD сдала позиции именно из-за активного продвижения Linux. Во-вторых потому-что те самые корпорации сделали ставку на Linux. Итого ему достались разработчики, деньги и реклама. Если бы не было одного только RedHat, или в 1993 году FreeBSD уже существовал хотя бы пару лет, многое могло бы быть иначе.

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

Какой профит использовать Си для многих задач, если это можно написать на гоу?

Скорость выполнения кода + компактность, а там где действительно можно искользовать Go там им и пользуются, вместе либо отдельно с Python, JavaScript и другими высокоуровневыми языками.

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

Да не в жизнь не признается...

В чем именно?

ведет к религиозному срачу и ничего более...

Я, если что, пользователь Linux (без дуалбута) со стажем лет в 12-13. Наоборот, это религиозные фанатики считают GNU/Linux откровением.

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

Никакого, если у тебя весь проект исключительно на го Или модули на разных языках общаются друг с другом через ipc вместо abi

makoven ★★★★★
()

из :ty и :path следует :block;

Мне одному такая формулировка кажется непонятной? Речь о том, что за :block могло идти что угодно, а теперь для него такие же правила, как для :ty и :path. Цитата из старого описания:

  • expr and stmt variables may only be followed by one of: => , ;
  • ty and path variables may only be followed by one of: => , = | ; : > [ { as where
  • pat variables may only be followed by one of: => , = | if in
  • Other variables may be followed by any token.
DarkEld3r ★★★★★
()
Ответ на: комментарий от anonymous

HURD не на дне, последнее время активно взялись. Авось, скоро 0.9, а потом 1.0 выпустят таки. Просто одно дело наваять кривую поделку неправильно по книжке, а другое выпустить солидное ядро для операционной системы GNU.

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

и непонятные глюки Servo на простых местах.

Так глюки серво или раста? И если первое, то думаешь тут виноват язык?

На деле helloworld с бинарником на несколько мегабайт

Это не (совсем) правда. Если кому-то правда интересно, то есть неплохая статья.

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

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

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

Убогий синтаксис раста реально режит глаза, кококо!

Нормальный там синтаксис, хоть и разумеется далеко не идеальный.

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

А почему все BC не вынести на мажорный апдейт?

Потому что немалая (может и большая часть) этиx «breaking changes» - исправление (минорных) багов. А ошибки желательно исправлять. Тем более, пусть лучше каждый релиз ломается (условно) один проект из тысячи в одном месте, чем спустя некоторое время поломается половина проектов во многих местах.

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

Посмотри на синтаксис, все для «людей».

Посмотрел - понравилось. Что дальше?

Убогий синтаксис раста реально режит глаза, явно делалось на от..сь!

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

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

Больше смысла было бы вообще не спрашивать, ибо тред религиозных фанатиков.

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

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