Українська Rust Спільнота – Telegram
Українська Rust Спільнота
500 subscribers
125 photos
1 video
221 links
Вітаємо на каналі Rust 🦀 ентузіастів!
Тут ви знайдете актуальну інформацію про мову програмування Rust.
Чат: https://news.1rj.ru/str/rustlang_ua
Канал англійською: https://news.1rj.ru/str/learn_rust
Запропонувати новину: @wandalen_me
Download Telegram
Друзі, підбиваємо підсумки Навчальної Rust Групи!
Анкету для участі у групі заповнило 66 учасників, 28 було зараховано і після інтенсивного навчання 9-ом з них вдалось успішно завершити курс та пройти сертифікацію, з чим ми їх і вітаємо 🥳

🔥 Наш Євангеліст Ярослав написав статтю на DOU про "Перший випуск навчальної групи з Rust".

У ній він розповів такі інсайти:
- цілі нашої навчальної групи
- навіщо вона взагалі потрібна розробникам, та які вимоги щоб потрапити у неї
- навчальну програму та формат
- як ми проводимо сертифікацію учасників
- відгуки перших учасників навчальної групи
- які висновки ми зробили та як будемо покращувати процес

Заохочуємо всіх переглянути статтю та підтримати її лайком 👍⭐️

📌 Також нагадуємо, що уже розпочався набір у Rust Bootcamp - Summer 2023, тож не зволікайте із реєстрацією!
🔥22👍4
Реліз Rust 1.70.0

Привіт, Rust ентузіатси! Пару слів про нову версії Rust - 1.70.0!

Цей реліз містить декілька цікавих змін та доповнень, які покращують API та функціональність стандартної бібліотеки.

Кілька ключових оновлень:

- Стабілізації багатьох методів Atomic та NonNull типів, дефолтів для ітераторів, BinaryHeap та BTreeMap, once_cell, фіч компіляції та cargo.
- Покращення інформативності відображення заниження версії залежностей при зміні версії до більш старої ніж була до цього в проекті
- Послаблення правил впорядкування операндів asm!, що забезпечує більшу гнучкість асемблерного коду.
- Розширено -Cdebuginfo новими опціями та іменованими псевдонімами, зокрема зменшено розмір налагоджувальної інформації для випадків, коли потрібна лише інформація про номер рядка.
- Перехід на LLD компонувальник для {arm,thumb}v4t-none-eabi
- Нові таргети для компіляції: loongarch64-unknown-linux-gnu та i586-pc-nto-qnx700, що розширює підтримку платформ.
- Додано перевірку вирівнювання для розіменування вказівників, що дозволяє виявляти невизначену поведінку під час виконання.
- Стабілізовано параметр rustdoc --test-run-directory, що полегшує виконання тестів документації.
- Оновлення до LLVM 16, що забезпечує покращення продуктивності та сумісність з останньою версією LLVM.
- "sparse" протокол Cargo тепер увімкнено за замовчуванням для читання індексу з crates.io.
- Стабілізовано два нових типи для одноразової ініціалізації спільних даних: OnceCell та його потокобезпечний аналог OnceLock.
- Після компіляції функцій #[test] виконуваний файл отримує інтерфейс командного рядка з test crate. Цей інтерфейс має низку опцій, у тому числі деякі з них ще не стабілізовано, і вони потребують вказівки опції -Zunstable-options, як і багато інших команд у наборі інструментів Rust. Однак, хоча це передбачено лише для нічних збірок, це обмеження не було активним у test - до цього часу. Починаючи з версії 1.70.0, стабільні та бета-збірки Rust більше не дозволятимуть нестабільні параметри test.

Повний апдейт ви можете прочитати тут.
Переконайтесь, що новили Rust компілятор до останньої версії, щоб скористатися всіма нововведеннями. Вдалої розробки на Rust!
👍134🫡4🔥3🥰1👌1
🦀 Наш Євангеліст Ярослав випустив чергову статтю на DOU "Чому обирають Rust".

У цій статті розкрито такі питання:
- чому бізнес вибирає Rust
- чому фахівці обирають Rust
- для чого потрібен Rust Bootcamp
- агресивна стратегія для перекваліфікації на Rust та Альтернативи

🔥 Переходьте за посиланням та підтримайте статтю вподобайкою!
🔥164
Привіт, друзі! Раді представити одну із доповідей UA Rust Conference 2023 на тему “Using WebAssembly in the backend” 🔥

У цій доповіді Андрій Сокирко розповідає:

▪️ Що таке WASM
▪️ WASM для плагінів у вашому проекті
▪️ Альтернатива контейнерам
▪️ Bytecodealliance, Components Model
▪️ Чим запустити WASM (runtimes)
▪️ Популярні рантайми написані на Rust

Переходь за посиланням та став вподобайку!
🔥245
Що нового в Rust 1.71.0

Мова

* Виправлення лінтів `{dropping,forgetting}_{references,copy_types}` які тепер видаватимуть попередження при виклику `std::mem::drop` та `std::mem::forget` на копі типах та посиланнях

Компілятор

* Прапірець компілятора який виводить інформацію про таргет деплою для Apple девайсів, їх версію та тип (macos, ios, watchos, tvos)

* Стабілізації ABIs (`extern "C"`) тепер доступні під фічею `c_unwind` які дозволяють розмотку стеку між різними мовами

* Оновлення таргету `*-linux-musl` що дозволяє використовувати time64 на 32-бітних системах

* Фіча `flatten-format-args` для генерації оптимальнішого коду макросом `println!` тепер увімкнена по дефолту.

* Дефолтний CPU для таргету `aarch64-apple-darwin` тепер Apple M1 замість Apple A14
Новий таргет `x86_64h-apple-darwin` для старих Apple девайсів

Бібліотеки

* Перероблена обробка рекурсивних панік (наприклад паніка в дропі після іншої паніки) що врятує від дедлоку при бектрейсі

* Баунд на `From<&[T]> for Box<[T]>` тепер потребує лише `T: Clone замість T: Copy`

* Прибраний баунд T: `Send на SendError<T>`, `TrySendError<T>` та `SendTimeoutError<T>`

* Стабілізації деяких методів` NonZeroI*, CStr::is_empty, BuildHasher::hash_one` та інше

Cargo

* Метадата cargo тепер включає в себе дефолтні пакети воркспейсу

* Тепер cargo буде обирати крейти по найбільш підходящій (встановленій) версії расту якщо вона вказана в інформації про крейт

* При створенні нового проекту через `cargo new`/` cargo init` у воркспейсі будуть успадковані його поля

Документація

* Новий лінт для документації '#![warn(rustdoc::unescaped_backticks)]` який попереджає про незакриті backticks

* Закреслення в документації тепер пишиться одинарними тільдами (`~~old~~` vs. `~new~`)
🎉15
Раді вам представити Software Architecture fwdays'23 — це конференція, присвячена практичним питанням архітектури програмного забезпечення 🙌. Серед тем події: Solution Architecture, System Architecture, Cloud Architecture та DevOps.
На конференції будуть українські та міжнародні експерти у сфері розробки software architecture, дискусії з ТОП-спеціалістами, розбір актуальних кейсів💪

🗓 Дата: 19 вересня та 23 вересня
🗣 Формат: онлайн та офлайн (у Києві)
🎙 Мови доповідей: українська та англійська

Є два типи квитків:
✔️ONLINE TICKET (доступ та записи всіх ефірів, Q&A зі спікерами, приватний чат, сертифікат участі)
✔️FULL TICKET (всі опції з ONLINE TICKET, Offline участь у конференції, живий нетворкінг, смачний обід та кава-брейки)

Використайте промокод 79E0FFCDE7 та отримайте знижку 10%, читайте відгуки та деталі за посиланням 👉https://bit.ly/3pVTWOZ

Також команда Fwdays шукає спікерів та спікерок! 🤓 Маєте класний практичний досвід у розробці Software Architecture та хочете виступити на конференції? Будь ласка, заповніть форму до 7 серпня!


*На правах реклами від інформаційного партнера*
👏7
🎓 Шукаємо Rust викладача в університет!

Привіт, спільното! Одна з наших цілей - інтеграція Rust 🦀 в українські університети. Зараз ми ведемо переговори і маємо попередні домовленості з декількома з кращих ВНЗ-ів України щоб інтегрувати в навчальну програму Rust. Серед них: Києво-Могилянська академія. КНУТД, Київський політехнічний інститут, УКУ та інші.

Нам бракує 🔎 тих, хто мріє про те, щоб викладати в університеті улюблену мову програмування на 1/4, 1/2, 3/4 або навіть на повну ставку. 💼 Натомість ви можете отримати викладацький досвід, внести свій вклад у розвиток освітньої системи України, а працевлаштування на 3/4 ставки дає ще й імунітет від зони бойових дій.

Звертайтесь до @wandalen_me
16🤷‍♂4👍2🫡1
Друзі, раді опублікувати наступну доповідь “Fuzz testing in Rust” із UA Rust Conference 2023 🦀
Тут доповідач Григорій Гонта розповідає:

▪️What is fuzz testing
▪️When you need it
▪️Available tools
▪️Setup initial input
▪️Understand output
▪️Demo time

Переходьте за посиланням та ставте вподобайку!
🔥114
Наступна 🎤 доповідь про “Property-Based Testing”, яка була на UA Rust conference 2023 від Сергія Потапова. У ній доповідач розповідає:

▪️Що таке property-based тести та як вони працюють
▪️У чому різниця між property-based тестами та fuzzing'ом
▪️Існуючі бібліотеки для property-based тестів та їх порівняння
▪️Наглядний приклад використання бібліотек
▪️На що варто звернути увагу

Переходь за посиланням та став вподобайку!
🔥10👌1
Forwarded from Kostyantyn Wandalen
Прекомпільований serde_derive макрос та ризики пов'язані з ним

З версії 1.0.171 serde_derive використовує прекомпільований бінарник макросу. Процедурні макорси виконуються на машині розробника, як звичайна програма та генерують код на основі вхідних аргументів. serde дуже популярний крейт і це означає, що скомпільований автором бінарник буде виконуватися на мільйонах машин, що потенційно є загрозою безпеці, бо такий бінарник має повний доступ до середовища в якому збирається програма і якщо відбудеться підміна файла на сервері то середовище розробника разом із всіма його секретами стане доступним зловмиснику.

Зі слів, dtolnay, це було зроблено з метою пришвидшення компіляції проєктів, які використовують `serde. Проте такий хід dtolnay, веде до порушення декількох умов контракту між розробником FOSS та користувачами, а саме:

- прозорість процесу компіляції - це безпекові ризики
- обіцяна кросплатформеність, - бо бінарник був зібраний лише для x64 систем.
- версіонування змін, зміна лише "патчу" 1.0.170 -> 1.0.171 порушує semver домовленість і потенційно ламає системи в продакшені ( саме так світ і дізнався про зміну сховану під капотом )

Створюється враження, що цією зміною dtolnay намагався змусити мейтнейнрів crates.io зробити зміни, котрі необхідні для оптимізації швидкості збірки. І хоча такі мотиви загальнокорисні, але методи їх досягнення через нав'язування, а також тон спілкування лишають осад, а порушення договору робить появу форка serde ймовірною.

Навіть після відкату цих нововведень мейнтейнер serde стоїть на своєму, що можна зрозуміти зокрема із опису релізу 1.0.184.
👾4🔥2😱1
Що нового в Rust 1.72.0

Мова

* Змінена поведінка #![cfg(FALSE)] - раніше він видаляв всі атрибути з, а
видаляє лише атрибути нижче себе
* Лінти clippy перенесено в Rust: undropped_manually_drops, invalid_utf8_in_unchecked, cast_ref_to_mut, cmp_nan
* Прибрана вимога мати асоційовані типи з Self: Sized баундом на dyn Trait об'єктах

Компілятор

* Імена об'єктів які конфігуруються фічами тепер видно в діагностиці (наприклад використання Deserialize без фічі derive в serde буде краще описуватись)
* Всі нативні бібліотеки тепер примусово лінкуються статично, якщо збирається статична бібліотека
* Виправлення відображення діагностичної інформації про 128-бітних enum'ів

Бібліотеки

* Детальніше розписана документація для thread::{park, unpark}, HashSet::insert, io::Write::write
* Прибрані явні T: Sized баунди на BufReader<T>, BufWriter<T> та LineWriter<T>
* Повернення Ok при спробі вбити процес який вже завершився
* Додана імплементація PartialOrd на Vec для різних алокаторів
* Використання u128 для TypeId хешу замість u64

Документація

* Оновлена гарантія часу виконання select_nth_unstable з O(n) на O(n log n)
* Тепер пробіл можна використовувати як сепаратор шляху, так само як ::
* Тип об'єктів тепер видно в пошуку і текстом, а не просто кольором, як раніше
* Фіча пошуку в документації, як анбоксінг - Vec<i32> можна знайти по i32
* Пошук слайсів та масивів тепер можна робити по []

Cargo

* При запуску тестів документації поточна директорія ставиться на сам крейт в воркспейсах, а не увесь воркспейс
👍53🔥2
Хотіли асинхронність? Зробіть самі!

Відправтесь в глибини асинхронного рантайму та дізнайтесь що таке epoll, як він допомагає нам будувати аплікації що виконують декілька задач одночасно, як за допомогою нього написати свій рантайм, за що треба любити вже готові async/await елементи синтаксису та як боляче було без них!

Подорож починається з простого блокуючого вебсервера та закінчується асинхронним, в якого під капотом абстракція на абстракції та з абстракцією абстрагуються. Пропонуємо кожному ознайомитись з цією статтею, особливо, якщо вам цікаво розібратися як async працює під капотом.

Повна стаття тут
Приємної подорожі!
🔥21🥰4
🔥Наступна доповідь із UA Rust Conference 2023 - “Low latency backend (UDP pub/sub)”!
Максим Воробйов у ній розкриває такі питання:

▪️What is low latency?
▪️What problems are we trying to solve?
▪️Deep dive to microseconds level
▪️Discover CPU cache and system scheduler impact

Переходь за посиланням, став вподобайку та підписуйся на канал 😉
🔥10👍2
RustRover - A Standalone Rust IDE by JetBrains

Компанія JetBrains анонсує випуск RustRover - окремого середовища розробки (IDE) для Rust 🦀.

📌 Функціонал RustRover можна встановити як плагін до IntelliJ IDEA Ultimate та CLion. Компанія не планує додавати фічі їхнього опенсорсного плагіна, вони його залишать відкритим, але усі нові фічі будуть у rr. 

📌 Як і багато інших IDE від JetBrains, середовище буде платним. Проте, RustRover буде безкоштовним під час Public Preview, а модель ліцензування буде остаточно уточнена ближче до дати комерційного релізу.

📌 Окрім цього, компанія JetBrains приєднюється до Rust Foundation та обіцяє підтримувати їхні ініціативи у розвитку.

Такі кроки свідчать лиш про те, що компанія вірить у майбутнє та потенціал екосистеми і спільноти Rust 🔥

Детальніше читайте у статті. А що ви думаєте про це?
🔥192👍1👏1🙉1
Українська Rust Спільнота pinned «RustRover - A Standalone Rust IDE by JetBrains Компанія JetBrains анонсує випуск RustRover - окремого середовища розробки (IDE) для Rust 🦀. 📌 Функціонал RustRover можна встановити як плагін до IntelliJ IDEA Ultimate та CLion. Компанія не планує додавати…»
Вчора відбулася перша лекція та практичні заняття із курсу “Мова програмування Rust” у Києво-Могилянській Академії! 💥

Вдячні факультету Інформатики за можливість запуску вибіркового курсу, на який записалось 33 студенти! Навчальну програму склали наші євангелісти, а викладає наш лідер Костянтин.

Це перший крок до інтеграції Rust 🦀 в систему освіти України та він би не був можливим без праці та сприяння Павла і Андрія, а також інших активних резидентів нашої спільноти. Сподіваємось, студентам припаде Rust до душі та ми побачимо багатьох з них серед нас 🙂
29👍4🔥4👀2
Що нового в Rust 1.73.0

Мова

* Новий лінт clippy що повідомляє, що вказівник на функцію ніколи не може бути null [link]
* Додане попередження про виклики функцій, що не виконують операцій (noop)
[link]
* Додана підтримка передачі блоків для try та async в макросах [link]
* Додане попередження до unconditional_recursion при рекурсивному дропі [link]
* Покращений лінт що виникає при невалідному касту посиланнь (наприклад self as *const Self as *mut Self що є UB) [link]

Компілятор

* Додана підтримка .comment секцій в скомпільованому бінарнику яка містить версію компілятора [link]
* Стабілізація thiscall ABI [link]
* Зроблена перевірка лайфтаймів на impl відносно лайфтаймів трейту, тепер статичні лайфтайми не перекривають лайфтайми зазначені в impl [link]
* Зроблена перевірка типу для слайс паттерну для масивів з фіксованим розміром [link]
* Прибрана дефолтна імплементація auto трейтів, якщо існує явна [link]
* Додані нові таргети компіляції: teeos, csky, riscv64-android, riscv64gc-hermit, unikraft, ohos, та wasm32-wasi-threads з підтримкою  std::thread::spawn [link]

Бібліотеки

* Додані Read, Write, та Seek імплементації для Arc<File> [link]
* Змерджили функціонал io::Sink в io::Empty, тепер io::Empty імплементує io::Read + io::Write [link]
* Додана дефолтна імплементація для ExitStatus [link]
* Змінений дефолтний формат повідомлення про паніку, тепер текст помилки буде на наступному рядку, значно покращує читабельність [link]
* Поліпшені повідомлення про паніку в макросах assert_eq! та assert_ne! [link]

Cargo

* Виправлення енкодінгу параметрів посилання для SourceId в Cargo.lock [link]
* Додана помилка якщо cargo:: використовується в кастомному build.rs скрипту [link]

Сумістність

* Оновлена мінімальна версія LLVM до 15 [link]
* Додана перевірка на визначність типу при повернені impl Trait (прозорий тип невідомий до повернення) [link]

Та деякі внутрішні зміни: оптимізації, оновлення до LLVM 17, новий шаблон для issues.
🔥13🦄1
Українська Rust Спільнота pinned «Що нового в Rust 1.73.0 Мова * Новий лінт clippy що повідомляє, що вказівник на функцію ніколи не може бути null [link] * Додане попередження про виклики функцій, що не виконують операцій (noop) [link] * Додана підтримка передачі блоків для try та async…»
Ferrocene для Rust в промислових середовищах

Чи ви вже чули про альтернативу Rust компілятору сертифіковану для розробки у автомобільному та промисловому середовищах?

Наразі Ferrocene перебуває на завершальних стадіях кваліфікації, яка є більше юридичною ніж технічною вимогою. Ця кваліфікація гарантує відсутність недопустимих ризиків, пов'язаних із некоректною роботою електричних або електронних систем, а також забезпечує безпеку від потенційних ушкоджень або шкоди здоров'ю людей в результаті аварій чи впливу на навколишнє середовище. Додатково, в майбутніх планах проєкту передбачено розширення кваліфікацій для залізничних та аерокосмічних стандартів.

Протягом двох років розробки, компілятор став готовим до використання в комерційних проєктах. Він ліцензований під Apache 2.0 & MIT, так само як і звичайний rustc. Ferrocene буде пропонуватися за ціною €25 на місяць за одне робоче місце. Хоча ліцензія не відмінна від rustc, можна користуватися Ferrocene без підтримки і з публічною документацією. Однак, приватна документація буде доступна лише для клієнтів компанії. Якщо ви плануєте реалізовувати продукт у автомобільній сфері, покупка Ferrocene є обов'язковою, адже до комплекту входять також сертифікати кваліфікації, необхідні для комерційного використання.

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

Репозиторій компілятора можна знайти тут
Та публічну документацію за посиланням
22👍2🔥1