LINUX.ORG.RU

Rust 1.19

 


3

8

Команда Rust рада объявить о последней версии Rust, 1.19.0. Rust это системный язык программирования, сфокусированный на безопасности, скорости и конкурентном выполнении.

Если у вас установлена предыдущая версия Rust, то получите Rust 1.19, выполнив команду:

$ rustup update stable

В противном случае, вы можете получить rustup с соответствующей страницы на нашем вебсайте и проверить детальные примечания к выпуску для 1.19.0 на Github.

Что нового в 1.19.0 stable

Rust 1.19.0 получил некоторые долгожданные возможности, но для начала примечание для наших пользователей Windows. На Windows Rust полагается на link.exe для линковки, который вы можете получить из “Microsoft Visual C++ Build Tools.” С последним выпуском Visual Studio 2017, структура каталогов для этих инструментов изменилась. Таким образом, чтобы использовать Rust, вы должны придерживаться инструментов 2015 или использовать обходной путь (такой как запуск vcvars.bat). В 1.19.0 rustc теперь знает, как найти инструменты 2017, и они работают без использования обходных путей.

А теперь к новым возможностям! Rust 1.19.0 это первый выпуск, который поддерживает объединения (unions):

union MyUnion {
    f1: u32,
    f2: f32,
}

Объединения это вид перечислений (enums), но в отличие от последних они «непомечены» («untagged»). Перечисления имеют «пометку», которая хранит информацию, какой вариант является правильным в рантайме; объединения игнорируют эту пометку.

Так как мы можем интерпретировать данные, хранящиеся в объединении, используя неправильный вариант, и Rust не может проверить это для нас, это означает, что чтение или запись поля объединения является unsafe:

let u = MyUnion { f1: 1 };

unsafe { u.f1 = 5 };

let value = unsafe { u.f1 };

Сопоставление с образцом также работает:

fn f(u: MyUnion) {
    unsafe {
        match u {
            MyUnion { f1: 10 } => { println!("ten"); }
            MyUnion { f2 } => { println!("{}", f2); }
        }
    }
}

Когда полезны объединения? Одним из основных случаев использования является интероперабельность с Си. C API могут использовать объединения, и во многих областях часто это делают, и с появлением объединений в Rust написание оберток для API подобных библиотек становится значительно проще. Дополнительно, из этого же RFC:

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

Эту возможность уже давно ждали, и еще больше улучшений на подходе. Сейчас объединения могут только содержать Copy типы и не могут реализовывать Drop. Мы ожидаем снятия этих ограничений в будущем.

Также циклы loop теперь имеют возможность возвращать значение при выходе с break:

// old code
let x;

loop {
    x = 7;
    break;
}

// new code
let x = loop { break 7; };

Rust традиционно позиционируется как «язык, ориентированный на выражения», в котором большинство вещей являются выражениями, вычисляющимися в значения, а не директивами. Раньше loop странно выделялся, так как был директивой.

Что насчет других форм циклов? Здесь еще не всё ясно. Посмотрите этот RFC для ознакомления с некоторыми дискуссиями вокруг открытых вопросов.

Замыкания, которые не захватывают окружение, теперь могут быть приведены к указателю на функцию:

let f: fn(i32) -> i32 = |x| x + 1;


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

Стабилизация стандартной библиотеки

Наибольшей новой библиотечной возможностью являются макросы eprint! и eprintln!. Они работают так же, как и print! и println!, но пишут в стандартный поток ошибок, а не в стандартный поток вывода.

Другие нововведения:

.

И некоторые недавно стабилизированные API:

Смотрите детальные примечания к выпуску для получения более подробной информации.

Cargo

Cargo в основном получил небольшие, но значимые улучшения в данном выпуске. Так, Cargo больше не проверяет локальный рабочий каталог для индекса crates.io. Это должно обеспечить меньший размер файла для реестра и улучшить время клонирования, особенно на машинах Windows.

Другие улучшения:

Смотрите детальные примечания к выпуску для получения более подробной информации.

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

★★★★★

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

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

Приклад - это сразу Ява, рор, питон, нода и куча всего остального со своими ПМ.

Из Java - только eclipse и оно в репах репозитариев. Остального нет и не будет, ибо «Ибо разработчик не будет пушить свои наработки в 100500 линуксовых реп.»

Раз не будут - идут лесом.

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

Можешь начинать жевать сопли на тему «интернеты были не те»

То есть в нулевых был html5, ccs3 и повсеместный js? Рассказывайте сказки.

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

Как это отразится на производительности

Положительно.

потреблении памяти

Шок! ОС кеширует.

попросту места на SSD

Жалко пару МБ из сотни ГБ?

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

Есть здесь проффесионалы, или только форумные троли?

Профессионалам тоже нужно отдыхать.

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

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

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

Шок! За пределами линя есть жизнь! И там нет ПМ.

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

я предложил разумный вариант

Сам себя не похвалишь - никто не похвалит.

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

Есть здесь проффесионалы, или только форумные троли? Какая разница что на нем написанно и кто его юзает, если инструмент действительно уникальный и крутой.

Для меня как для программиста ништяки раста были очевидны, а школоте и студентоте ясен пень что нинужно

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

не вышли за пределы своей ниши из-за своей системы пакетирования не приняли во внимание.

Аналитики в треде. Сишка значит вышла? Именно поэтому все либы либо под линь пишут, ибо распространять их нереально, либо делают header-only либы.

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

Есть здесь проффесионалы, или только форумные троли? Какая разница что на нем написанно и кто его юзает, если инструмент действительно уникальный и крутой.

Я, например, интересуюсь rust'ом по двум направлениям (server side с плотным взаимодействием с сишным кодом и embedded на bare metal arm). Но не вижу смысла тратить время на местные форумные срачи и попытки переубедить некомпетентных нытиков, которым скобочки и кавычечки приходят ночью во сне и пытают их. Или не понимающих разницы между браузерами начала 0х гг и современными комбайнами в сотни тысяч и миллионы строк. Или у которых в UB виноваты джависты, испортившие идеальный gcc, где никогда не было ub и вот опять.

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

Аналитики в треде. Сишка значит вышла? Именно поэтому все либы либо под линь пишут, ибо распространять их нереально, либо делают header-only либы.

И? К чему это?

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

Ну офигеть теперь. И что же в них небезопасного?

Что вместо скомпилированной на Rust безопасной библиотеки могут подсунуть опасную, скомпилированную на C.

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

Что уникального в перечисленном: «строгая и статическая типизация, функциональное программирование» ?!

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

Блин, да что в нём уникального-то, а? Обычный императивный язык, каких сотни. И чем тогда Си-то хуже? Тем, что, о ужас, там нет дженериков и макаки не смогут написать груду говнокода в отведённые сроки, поскольку будут тупо копипастить все изменения в одной из функций для работы с типом X во все остальные функции, которые для типов Y, Z и пр?

Я понимаю у Julia - есть охрененные научные библиотеки и возможность использовать библиотеки из python и R. А что есть у Rust, кроме груды тёплых ламповых программистских мулечек??

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

Мне картинку нарисовать? (с)

Я так понимаю, четко формулировать мысли вы не умеете.

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

html5, ccs3 и повсеместный js

Так консерва умеет это все? Да или нет? Если да, где продукт? Видишь ли, пока вы там на расте с нуля все перепишите актуальными будут уже html6, ccs4 и uberjs. Придется servo++ заводить, естественно с нуля, ибо в миллионах строк хипстокода на криптоязыке никто не разберется.

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

Я понимаю

Что-то не заметно, что вы что-то понимаете. Вы сравниваете rust с julia, при том, что это совершенно разные языки.

Если вы не в состоянии понять преимуществ rust - значит он вам не нужен. Продолжайте писать на своём любимом ЯП.

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

Какая ещё консерва?

Вы с вангованием осторожно там, а то ещё в дурку заберут.

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

Догадываюсь, что просто всё эти 4 с половиной калеки отмечались в темах про rust и си/плюсы в которые я заглядывал. В толксах, небось, ещё целый зоопарк таких же есть, но мне лень смотреть.

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

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

программирование напрямую в машинных кодах

Вы вообще не понимаете о чем речь. Я писал об абстракциях, которых больше нету нигде, за такую цену. Причем здесь библиотеки? Вам лично что то нужно, чего нету на crates.io?

Julia

Динамически типизирован. Любите искать ошибки в рантайме, которых можно было бы избежать еще на этапе написания кода?

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

судя по многостраничному обсуждению, анонимусу rust нужен и не нужен одновременно до тех пор, пока он не деанонимизирован.

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

судя по многостраничному обсуждению, анонимусу rust нужен и не нужен одновременно до тех пор, пока он не деанонимизирован.

раст нужен, но у него проблемы, поэтому не нужен.

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

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

Одна проблема - постоянная ломка

Опять фантазируем?

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

судя по многостраничному обсуждению, анонимусу rust нужен и не нужен одновременно до тех пор, пока он не деанонимизирован.

Вот он, квантовый анонимус. В суперпозиции.

upd: не ты цитату вставил

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

А что есть у Rust, кроме груды тёплых ламповых программистских мулечек??

  • Rust компилирует быстрые исполняемые файлы, которые по производительности на уровне С++
  • В числовые константы можно вставлять подчеркивания. Удобная штука, 0xffff_ffff_ffff_ffff_ffff_ffff
  • Двоичные константы 0b1111_1111_1001_0000
  • Компактные имена базовых типов - u16, i32, i64
  • В Rust нельзя получить висячие указатели
  • В нём мощное обобщённое программирования.Нет траха присущего плюсовым шаблонам, если где-то внутри этого шаблона произошёл exception
  • В Rust нет исключений
  • В Rust указатель не может быть NULL
  • В Rust есть типажи
  • В Rust я могу полностью управлять временем жизни ресурса
  • В Rust есть система отслеживания владения ресурсом
  • В Rust очень круто сделана работа со структурами
  • В Rust очень круто сделана работа с Enum, можно делать так
    enum Message {
        Quit,
        ChangeColor(i32, i32, i32),
        Move { x: i32, y: i32 },
        Write(String),
    }
    
  • Есть и в Си что-то вроде, но тут можно делать так:
    let x = 5;
    
    let y = if x == 5 {
        10
    } else {
        15
    }; // y: i32
    
  • Если Enum содержит Some, то из Some можем получить x и отдать его в функцию foo
    if let Some(x) = option {
        foo(x);
    }
    
  • if let, но в цикле - это уже while let
  • Передача замыканий в качестве аргументов функции
  • Возврат замыкания в качестве результата из функции
  • Офигенское устройство контейнеров и модулей, можно проецировать на файловую систему, можно разграничить зоны видимости в одном файле. Есть навигация по namespace и для неё есть super и self
  • Крутые макросы, которым не страшно это
    macro_rules! five_times {
        ($x:expr) => (5 * $x);
    }
    
    fn main() {
        assert_eq!(25, five_times!(2 + 3));
    }
    
    Т.к. five_times развернётся в 5 * (2 + 3), а не как в Си++ 5 * 2 + 3
  • Строки в UTF-8
  • Современная стандартная библиотека
  • Есть одно официальное место, через которое распространяют библиотеки в исходных кодах Rust - http://doc.crates.io/, но можно для зависимости указать просто ссылку на github
  • Есть cargo, который сам докачает зависимости и не надо будет трахаться с параметрами компиляции

Вот что есть у Rust и это лежит на поверхности, и я даже специфичные вещи не затрагивал

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

http://duktape.org/api.html#duk_get_pointer

Прокручиваю на верх страници, там вижу

The Duktape API (defined in duktape.h) is a set of constants and API calls which allows C/C++ programs to interface with Ecmascript code and shields them from internal details like value representation.

И где тут указатели в js? Это же C/C++

И да, rust поможет только в твоём коде. От того что происходит внутри Duktape он тебя не спасёт. Если в том коде на Duktape нет особой магии, то и с rust проблем не будет.

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

судя по многостраничному обсуждению, анонимусу rust нужен и не нужен одновременно до тех пор, пока он не деанонимизирован.

Суперпозиция анонимуса!

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

это определяющий недостаток

Только для любителей писать велосипеды, а не использовать готовые либы.

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

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

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

cargo, как уже говорили, в первую очередь система сборки и управления зависимостями.

А на тему как это лучше опакечивать разговоры со стороны дебиановцев видел некоторое время назад, но пока язык молодой и abi не устаканилось говорить об этом просто рано. Не напомните, через сколько десятков лет у плюсов abi стабилизировалось? И сколько месяцев назад его опять ломали?

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

Одна проблема - постоянная ломка, рано или поздно уйдет.

Ушла два года назад

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

Можно указать любую ссылку, например, на github для зависимости.

И вместо того что бы его прооперировать - они им гордятся. :-)

И вместо того, чтобы прочитать доку, вы несёте ахинею :-)

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

Не напомните, через сколько десятков лет у плюсов abi стабилизировалось?

Намекаете на 10-ки лет. Я к тому времени на пенсию пойду. Буду вместо шахмат rust'ом развлекаться.

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

Ушла два года назад

Не ушла. Смотри ченчлоги, раздел о совместимости.

И вместо того, чтобы прочитать доку, вы несёте ахинею :-)

Причем тут дока, если практически все разработчики пишут так, без самопального ПМ не соберешь, так как в дистрибутивах нет.

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

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

но пока язык молодой

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

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

Причем тут дока, если практически все разработчики пишут так, без самопального ПМ не соберешь, так как в дистрибутивах нет.

Не осилишь пм?

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

Вечно молодой, вечно пьяный! Ну серьезно, уже 4 года я слежу за растосрачами, он все у вас молодой, аби ломаем, софта нет.

Сколько лет прошло после стабилизации?

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

А если нужна либа не из дистра? А если в дистре нету такой либы? А если в дистре старая версия либы? А если мы вообще на винде или маке? А если мы собираем под мобилки?

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

Не осилишь пм?

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

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

А если нужна либа не из дистра? А если в дистре нету такой либы? А если в дистре старая версия либы? А если мы вообще на винде или маке? А если мы собираем под мобилки?

Значит начни ее поддерживать или забей на нее. Выбора нет - или она поддерживается кем-то, или ее нельзя использовать.

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

Значит начни ее поддерживать или забей на нее. Выбора нет - или она поддерживается кем-то, или ее нельзя использовать.

либа поддерживается разработчиком либы. пакет с либой поддерживается мейнтейнером дистрибутива.
отсутствие пакета в каком-то дистрибутиве - это вообще не должно быть проблемой разработчика.

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