LINUX.ORG.RU

Rust


261

18

Всего сообщений: 144

RustCon Russia — конференция по языку программирования Rust

Группа Конференции и встречи

RustCon — конференция для тех, кто пишет на Rust, и тех, кто им интересуется.

Конференция пройдёт 3 декабря в Москве.

В программе: 8 докладов, мастер-класс «начинаем embedded на Rust», погружение в rust-тусовку, обед и кофе-брейки.

Некоторые из тем:

  • Rust и Python — как в небольшой команде просто, прозрачно и с минимальными трудозатратами переписать узкие места на Rust (и почему не C++);
  • под капотом у процедурных макросов (доклад про «кишки» rustc и низкоуровневые особенности процедурных макросов);
  • неочевидные прелести Rust.

По промокоду linux.org действует скидка 10 % на билет.

>>> Программа и билеты

 

it-people
()

Rust 1.55.0

Rust 1.55.0
Группа Разработка

Команда Rust рада объявить о новой версии языка программирования Rust, 1.55.0!

Основные изменения:

  • Cargo теперь дедуплицирует ошибки компилятора.
  • Ускорен и исправлен парсинг чисел с плавающей точкой по алгоритму Eisel-Lemire.
  • Обновлены варианты для std::io::ErrorKind.
  • Добавлены шаблоны открытого диапазона. (Подробности.)
  • Стабилизированы многочисленные API.

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

 ,

umren
()

Корректирующий выпуск Firefox 91.0.1

Группа Mozilla

Почти сразу после релиза Firefox 91 вышла новая версия браузера, в которой появились важные баг-фиксы и изменения:

  • Исправлена уязвимость (CVE-2021-29991), касающаяся как браузера Firefox так и Thunderbird, с помощью которой было возможно провести атаку по разделению HTTP-заголовков. Проблема вызвана некорректным принятием символа перевода строки в заголовках HTTP/3, что позволяет указать заголовок, который будет принят как два разных заголовка.
  • Исправлен баг, из-за которого менялась высота табов при использовании математических символов.
  • Исправлена проблема, приводящая к отображению вкладок из окон, открытых в приватном режиме, в обычных окнах при просмотре рекомендаций в адресной строке.

Также объявлено о главном изменении в грядущей 92-й версии, которая должна будет выйти 7-го сентября. Разработчики планируют включить опцию WebRender для всех пользователей по умолчанию (касается всех платформ: Linux, MacOS, Windows и Android), а уже в версии 93 отключить WebRender станет невозможно, опции gfx.webrender.force-legacy-layers и MOZ_WEBRENDER=0 будут убраны.

WebRender написан на языке Rust и позволяет добиться существенного увеличения скорости отрисовки и снижения нагрузки на центральный процессор за счёт выноса на сторону видеокарты операций отрисовки содержимого страницы, которые реализованы через выполняемые в GPU шейдеры. Для систем со старыми видеокартами или проблемными графическими драйверами в WebRender будет использован режим программной растеризации gfx.webrender.software=true.

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

 , , , ,

claire
()

Google профинансирует работу над Rust for Linux

Группа Open Source

Компания оплатит год работы Мигеля Охеда (Miguel Ojeda) над его проектом Rust for Linux. Работа будет вестись в рамках проекта Prossimo под эгидой организации ISRG (Internet Security Research Group) — учредителя проекта Let's Encrypt.

По данным Microsoft около 70% всех уязвимостей, описанных в CVE, вызваны небезопасной работой с памятью. Написание на Rust таких компонентов, как драйверы устройств, может снизить риск появления уязвимостей.

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

 , ,

LikeABoss
()

Линус Торвальдс раскритиковал Rust в ядре

Группа Linux General

Линус Торвальдс критикует использование Rust в ядре. Причины: возможность panic(), неделимость библиотеки и соответственно опасные попытки использования 128 bit типов (в ядре запрещено), бесполезность предложенных примеров драйверов.

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

 ,

anonymous
()

grex 1.2.0 — генератор регулярных выражений

grex 1.2.0 — генератор регулярных выражений
Группа Разработка

Вышла новая версия библиотеки и командной утилиты grex 1.2.0, которая позволяет создавать регулярное выражение из предоставленных пользователем тестовых данных. Созданное регулярное выражение имеет синтаксис PCRE.

grex начинался как порт JavaScript-утилиты regexgen и написан на языке программирования Rust.

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

 , , ,

dotcoder
()

Линус высказал своё мнение о Rust в ядре

Группа Ядро Linux

Поживем - увидим

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

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

Торвальдс полагает, что первоначальной областью применения Rust в ядре могут быть драйверы, поскольку их написание представляет собой множество небольших и независимых задач. «Может, это не самое интересное применение, но оно самое очевидное». Он добавил, что поскольку многие устройства предназначены не для всех процессорных архитектур, недостаток их поддержки в Rust – не такая большая проблема.

>>> Источник

 , ,

anonymous
()

В linux-next добавлена возможность писать драйверы на Rust

Группа Ядро Linux

В ветку ядра linux-next включен код для написания драйверов на Rust, сам патч. Пока неясно, оставит Линус это или нет, он высказывается довольно туманно, из его слов не совсем понятно, есть ли четкие критерии включения.

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

 , linux-next, ,

anonymous
()

Почему Discord сменил Go на Rust. Блог разработчика.

Группа Разработка

В статье автор описывает успешный проект Discord, в котором Rust используется для потоковой обработки в Go Live и их Elixir NIFs’ сервере.

Автор пишет
«Хочу отметить, что мы потратили очень мало усилий на оптимизацию реализации на Rust. Но даже только с базовой оптимизацией Rust оказался быстрее супероптимизированной реализации на Go. Это заметный плюс для Rust, показывающий, насколько легко писать эффективные программы, используя Rust, по сравнению с глубоким погружением в Go.»

>>> Why Discord is switching from Go to Rust

 , ,

grim
()

Релиз Datanymizer — анонимайзера чувствительных данных, написанного на Rust

Группа Open Source

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

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

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

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

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

 , production, ,

Alve
()

Dotenv-linter обновился до v3.0.0

Группа Open Source

Dotenv-linter — это open source инструмент для проверки и исправления различных проблем в .env файлах, которые служат для более удобного хранения переменных окружения внутри проекта. Использование переменных окружения рекомендовано манифестом разработки «The Twelve Factor App» — набором лучших практик по разработке приложений для любых платформ. Следование этому манифесту делает ваше приложение готовым к масштабированию, удобному и быстрому развертыванию на современных облачных платформах.

Новая версия dotenv-linter помимо поиска и исправления, ещё может сравнивать .env файлы друг с другом, поддерживает многострочные значения, ‘export’ префикс и многое другое.

Подробное описание изменений с примерами читайте в статье.

>>> Статья

 , , , ,

Alve
()

Microsoft выпустила официальную Rust библиотеку для Windows API

Группа Open Source

Библиотека оформлена в виде Rust crate под MIT License, который можно использовать вот так:

[dependencies]
windows = "0.2.1"

[build-dependencies]
windows = "0.2.1"

После этого в скрипте сборки build.rs можно сгенерировать те модули, которые нужны для вашего приложения:

fn main() {
    windows::build!(
        windows::data::xml::dom::*
        windows::win32::system_services::{CreateEventW, SetEvent, WaitForSingleObject}
        windows::win32::windows_programming::CloseHandle
    );
}

Документация о доступных модулях опубликована на docs.rs.

Пример кода:

mod bindings {
    ::windows::include_bindings!();
}

use bindings::{
    windows::data::xml::dom::*,
    windows::win32::system_services::{CreateEventW, SetEvent, WaitForSingleObject},
    windows::win32::windows_programming::CloseHandle,
};

fn main() -> windows::Result<()> {
    let doc = XmlDocument::new()?;
    doc.load_xml("<html>hello world</html>")?;

    let root = doc.document_element()?;
    assert!(root.node_name()? == "html");
    assert!(root.inner_text()? == "hello world");

    unsafe {
        let event = CreateEventW(
            std::ptr::null_mut(),
            true.into(),
            false.into(),
            std::ptr::null(),
        );

        SetEvent(event).ok()?;
        WaitForSingleObject(event, 0);
        CloseHandle(event).ok()?;
    }

    Ok(())
}

Для некоторых вызовов функций используется unsafe, так как эти функции предоставляются как они есть, не адаптируя их к конвенциями Rust. По такому же принципу устроен crate libc, который служит базовым crate для доступа к libc и используется как основа для пострения библиотек с безопасным интерфейсом.

Проект создан в рамках Win32 Metadata Project, который призван облегчить создание API для разных языков программирования. Вторая библиотека, которая была создана на основе Metadata Project на первое фазе проекта - C#/Win32. Также Microsoft анонсировала начало работы над версией для С++, которая использует современный стиль языка.

>>> Github

 , , , ,

vertexua
()

Компания Open Source Security спонсирует разработку gccrs

Компания Open Source Security спонсирует разработку gccrs
Группа Разработка

12 января компания Open Source Security, известная разработкой grsecurity, объявила о спонсировании разработки фронтенда к компилятору GCC для поддержки языка программирования Rust — gccrs.

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

Open Source Security мотивируют своё участие возможным появлениям кода на Rust в ядре Linux и тем, что ядро собирается чаще всего компилятором gcc. Дополнительно к этому, программы на нескольких языках сразу могут иметь уязвимости, вызванные именно этим фактом (см. Exploiting Mixed Binaries), которых бы не было в программах на чистом C или C++.

На данный момент Open Source Security спонсируют работу одного разработчика, который будет работать над gccrs в течение следующего года, с возможностью выделения средств на увеличение штата. Так же в процессе участвует британская компания Embercosm, специализирующаяся на разработке GCC и LLVM и предоставившая оформление официального трудоустройства разработчиков для данной инициативы.

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

 , gccrs, ,

hateyoufeel
()

Rust 1.49

Группа Разработка

Опубликован релиз 1.49 языка программирования Rust.

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

( читать дальше... )

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

 

fsb4000
()

Buttplug 1.0

Buttplug 1.0
Группа Open Source

Тихо и незаметно, поcле 3,5 лет разработки, состоялся первый мажорный релиз Buttplug – комплексного решения для разработки программного обеспечения в сфере дистанционного управления интимными устройствами с поддержкой различных способов подключения к ним: Bluetooth, USB и последовательные порты с помощью языков программирования Rust, C#, JavaScript и TypeScript.

Начиная с этой версии, имплементации Buttplug на C# и JavaScript отбрасываются в пользу соответствующих им библиотек, которые взаимодействуют с единственной оставшейся имплементацией на Rust посредством FFI, что позволило начать разработку библиотек для Python, C++, языков на платформе JVM и Unreal Engine.

Buttplug поддерживает управление с клавиатур, джойстиков и контроллеров виртуальной реальности, а также синхронизацию с фильмами посредством плагинов к VLC и Kodi.

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

 adult, , , ,

Princesska
()

Redox OS 0.6.0

Группа Open Source

Redox — UNIX-подобная операционная система с открытым исходным кодом, написанная на Rust.

Изменения в 0.6:

  • Переписан менеджер памяти rmm. Это устранило утечки памяти в ядре, которые стали серьёзной проблемой с предыдущим менеджером памяти. Также поддержка многоядерных процессоров стала стабильней.

  • Многие вещи от студентов Redox OS Summer of Code были включены в этот релиз. Включая работы по ptrace, strace, gdb, disk partitioning, logging, io_uring и т.д.

  • Переработана стандартная библиотека С relibc для обеспечения большей совместимости с приложениями.

  • Новый формат пакетов pkgar, который быстрее чем старый формат tar.

  • Обновлена коллекция с примерами пакетов: cookbook

  • Много времени к подготовке к этому выпуску было потрачено на адаптацию кода к ломающим изменениям в Rust Nightlies, где был изменён дизайн макроса asm. Также другие проблемы удерживали разработчиков от выпуска. Они надеются что новые версии теперь будут выходить чаще. (Предыдущий выпуск 0.5 был: 24 марта 2019 г.)

Скриншот из VirtualBox: https://i.imgur.com/QqylHXj.png

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

 ,

fsb4000
()

Veloren 0.8 — открытая многопользовательская RPG игра

Группа Игры

Veloren – многопользовательская ролевая игра с открытым исходным кодом на voxel-движке, написанная на языке Rust и вдохновленная такие играми, как Cube World, Legend of Zelda: Breath of the Wild, Dwarf Fortress и Minecraft. Игра находится на ранней стадии разработки, но в неё уже можно играть онлайн.

Veloren полностью открыта, лицензирована по GPL 3. В ней используется оригинальная графика и музыка, созданные её сообществом. У игры есть маленькое, но растущее сообщество в Discord и Reddit.

Игра доступна в виде flatpak и snap пакетов, а также через Airshipper – собственный кросплатформенный launcher игры.

Руководство по игре

Видео игрового процесса

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

 morpg, , ,

cocucka
()

Dotenv-linter обновился до версии 2.2.1

Группа Open Source

Вышло обновление dotenv-linter — полезного инструмента для проверки и исправления ошибок в .env файлах (файлы переменных среды Docker’а).

Многие программисты стараются при разработке ПО придерживаться манифеста двенадцати факторов. Такой подход позволяет избежать большого количества проблем, связанных с развертыванием приложений и их дальнейшей поддержкой. Один из принципов этого манифеста гласит, что все настройки должны хранится в переменных окружения. Это позволяет менять их под разные окружения (Staging, QA, Production) без изменения кода. Для хранения переменных и их значений широко используются .env-файлы.

dotenv-linter находит и исправляет самые частые проблемы в подобных файлах: дублирование имён, неправильный разделитель, переменные без значения, лишние пробелы и так далее. Для каждого файла при этом создаётся резервная копия, чтобы изменения можно было откатить.

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

Dotenv-linter входит в «Awesome Rust Mentors» и помогает начинающим контрибьюторам пройти первые шаги в разработке открытого ПО.

Репозиторий проекта: https://github.com/dotenv-linter/dotenv-linter

Статья с примерами и описанием работы: https://www.mgrachev.com/2020/04/20/dotenv-linter/

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

 dotenv-linter, , ,

Alve
()

Вышел Cloud Hypervisor 0.11.0

Группа Open Source

Cloud Hypervisor (облачный гипервизор) — это монитор виртуальных машин, который работает поверх KVM и оптимизирован для решения задач, свойственных для облачных систем. Cloud Hypervisor написан на Rust и базируется на rust-vmm crates.

Новое в этой версии:

  • добавлена поддержка гостевой ОС Windows
  • добавлена поддержка по умолчанию io_uring для virtio-block
  • прекращена поддержка vhost-user
  • удалена поддержка использования транспорта virtio-mmio вместо PCI
  • добавлена поддержка снапшотов для ARM64
  • улучшено время загрузки Linux
  • изменён уровень ведения журнала по умолчанию
  • добавлен новый параметр –balloon для настройки virtio-balloon

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

 , ,

MaxPower
()

Выпуск языка программирования Rust 1.47

Группа Разработка

Опубликован релиз 1.47 языка системного программирования Rust, основанного проектом Mozilla. Язык сфокусирован на безопасной работе с памятью, обеспечивает автоматическое управление памятью и предоставляет средства для достижения высокого параллелизма выполнения заданий, при этом обходясь без использования сборщика мусора и runtime (runtime сводится к базовой инициализации и сопровождению стандартной библиотеки).

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

Основные новшества:

  • Реализована поддержка типажей для массивов произвольного размера. Ранее, из-за невозможности определить generic-функции для всех целых значений, стандартная библиотека предоставляла встроенную поддержку типажей только для массивов, размер которых не превышал 32 элемента (типажи для каждого размера были определены статически). Благодаря созданию функциональности константных дженериков («const generics») появилась возможность определения generic-функций для любых размеров массива, но они пока не включены в состав стабильных возможностей языка, хотя реализованы в компиляторе и теперь задействованы в стандартной библиотеке для типажей массивов любого размера. Например, следующая конструкция в Rust 1.47 приведёт к выводу содержимого массива, хотя раньше привела бы к ошибке:
    fn main() {
        let xs = [0; 34];
        println!("{:?}", xs);
    }
  • Обеспечен вывод более коротких трассировок (backtrace), выводимых при внештатных ситуациях. Из трассировки исключены элементы, не представляющие интереса в большинстве ситуаций, но захламляющие вывод и отвлекающие внимание от первичных причин проблемы. Для возвращения полной трассировки можно использовать переменную окружения «RUST_BACKTRACE=full». Например, для кода
    fn main() {
        panic!();
    }

раньше выводилась трассировка в 23 этапа, а теперь она будет сведена к 3 этапам, позволяющим сразу уловить суть:

thread 'main' panicked at 'explicit panic', src/main.rs:2:5
    stack backtrace:
       0: std::panicking::begin_panic
                 at /rustc/d...d75a/library/std/src/panicking.rs:497
       1: playground::main
                 at ./src/main.rs:2
       2: core::ops::function::FnOnce::call_once
                 at /rustc/d...d75a/library/core/src/ops/function.rs:227
  • Компилятор rustc обновлён до сборки с использованием LLVM 11 (Rust использует LLVM в качестве бэкенда для генерации кода). При этом сохранена возможность сборки со старыми LLVM, вплоть до версии 8, но по умолчанию (в rust-lang/llvm-project) теперь используется LLVM 11. Релиз LLVM 11 ожидается в ближайшие дни.
  • На платформе Windows в компиляторе rustc обеспечена поддержка включения проверок целостности потока выполнения (Control Flow Guard), активируемых при помощи флага «-C control-flow-guard». На других платформах данный флаг пока игнорируется.
  • В разряд стабильных переведена новая порция API, в том числе стабилизированы Ident::new_raw, Range::is_empty, RangeInclusive::is_empty, Result::as_deref, Result::as_deref_mut, Vec::leak, pointer::offset_from, f32::TAU и f64::TAU.
  • Признак «const», определяющий возможность использования в любом контексте вместо констант, применён в методах:
    • new для всех целых, отличных от нуля;
    • checked_add, checked_sub, checked_mul,checked_neg, checked_shl, checked_shr, saturating_add, saturating_sub и saturating_mul для всех целых;
    • is_ascii_alphabetic, is_ascii_uppercase, is_ascii_lowercase, is_ascii_alphanumeric, is_ascii_digit, is_ascii_hexdigit, is_ascii_punctuation, is_ascii_graphic, is_ascii_whitespace и is_ascii_control для типов char и u8.
  • Для FreeBSD задействован инструментарий из FreeBSD 11.4 (FreeBSD 10 не поддерживает LLVM 11).

Взято с opennet.ru

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

 ,

MaxPower
()