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 и прочее.

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

Хмм, а оно видимо уже юзабельное.

Reedych ★☆ ()

Я перевел в мини-новости - в сущности, это регулярно выходящая минорщина.

tailgunner ★★★★★ ()

Ну что, осталось ядро перепелить и тогда заживем!

FilosofeM ★★ ()

FIX: target_env у платформ переименовали, но сами названия не тронули.

shaiZaigh ()

Есть кто-нибудь, кто знает этот язык. Ищущие Пишущие есть? Какие у вас впечатления?

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

В 8 джаве по сравнению с седьмой было меньше апдейтов, чем в минорном релизе раста. Успех:)

cdshines ★★★★ ()

неплохо. пусть живёт.

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

Проблемно реализовать гуй из-за borrowck: для событий используем либо tagged union очередь, либо коллбеки. Из-за легкой расширяемости второй способ лучше, но проблема заключается в том, что компилятор считает, что коллбек при заимствовании окружения может запускаться одновременно. По сути, компилятор прав, но я точно знаю, что эти коллбеки будут выполнять один за другим последовательно, но доказать это не могу. В итоге приходится использовать костыль в сигнатуре функции: везде либо &self, либо self, но всё равно borrowck замучает пользователя, пытающегося работать с изменяющимися переменными. Крайний способ решения: RefCell, но этот грязный хак будет везде.

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

Ну вот.)

Вообще это хорошо. Потому что есть шанс, что язык не сдохнет через пять лет под весом костылей.

kirk_johnson ★☆ ()

Для сравнения: «hello world» cdylib занимает 7.2КБ, а dylib - 2.4МБ.

Хэллоуворлд на 2.4 метра это успех

upcFrost ★★★★★ ()

Минорщина ненужности наглагне.

anonymous ()

го также яростно пилят как рыжего?

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

Он не рыжий, даже конопушек нет и главная цель дедушку именно любить.

//Stage 700W

anonymous ()

Зачем оно нужно если есть Go ?

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

Rust это как-бы для системного программирования и без сборщика мусора. На деле helloworld с бинарником на несколько мегабайт и непонятные глюки Servo на простых местах.

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

Go пришел убивать node.js, a Rust - C++. Разные они сильно. Сравнивай лучше с D.

anonymous ()

Где все адепты? Где калобок?

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

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

А что, если колобка сьели? Накинулись на него с ржавыми предметами..

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

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

dylib != бинарник

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

С++ это боль и страдания, но раст это...

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

Man borrow checker. Попробуй - еще захочешь.

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

Похоже, восклицательный знак используется очень часто. Руки бы оторвать тому, кто так придумал.

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

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

quantum-troll ★★★★★ ()

Добавлена поддержка

платформ i586-unknown-linux- gnu, i686-unknown-linux-musl, и armv7-linux-androideabi

С такой ошеломляющей поддержкой платформ и темпами введения новых, оно точно победит Си.

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

Зачем оно нужно если есть Go ?

Зачем нужен Go если есть Python?

anonymous ()

в этой версии стоит попробовать раз, стабилизировалось ,сильно а движок браузера будет, неплох раз оно такое

anonymous ()

С 2014 года много достигли. Пятилетку в три года!

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

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

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

Пишу для удовольствия, нравится. Приятный синтаксис, удобная и мощная система типов, бесплатные абстракции, адекватное сообщество.

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

если есть C++

C++ для большенства нет. Крайне сложный язык.

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

В 8 джаве по сравнению с седьмой было меньше апдейтов, чем в минорном релизе раста. Успех:)

Поэтому, видимо, джавой пользуются, а этим — нет.

anonymous ()

Надо под него запилить пакетный менеджер по типу npm и назвать Personal Enterprise Development Environment.

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

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

deterok ★★★★★ ()

Без независимой от мозиллы реализации в gcc - нахрен не нужно: как они умеют развивать и сопровождать большие проекты Firefox OS отлично продемонстрировал. Смысл учить ещё один язык, на который нет внятной спеки и который сдохнет как только у мозиллы опять начнутся траблы с баблом?

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

как они умеют развивать и сопровождать большие проекты Firefox OS отлично продемонстрировал

А что не так

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

А вот фиг. Nim может работать на голом железе, бех ГЦ.

Правда ГО тоже когла-то мог, но оказалось, что это нинужно.

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

Крайне сложный язык.
большенства

Оно и видно для кого он «сложный». :-)

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

Откуда же вы беретесь то?

Мда... резонный вопрос. 80% случаях где люди пишут на C/C++ можно использовать Go. Но нужно признать, что Rust не облегчает жизнь С/С++ программистам, а только добавляет гемора, в итоге через пару лет нужно будет пилить убицу раста.

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

А в чем гемор раста? Да и имхо про «пару лет» вы оптимист, к этому времени в лучшем случае только серво в бетку вылезет, а раст только начнет набирать обороты.

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

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

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

Потому, что лисперы переезжают туда же, куда и разработчики на коболе.

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

Почему же, лисп очень полезный язык, на нём можно написать, к примеру, другой лисп.

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