Як і для чого вивчати мову програмування Rust

💡 Усі статті, обговорення, новини для початківців — в одному місці. Приєднуйтесь до Junior спільноти!

Вітаю читачів DOU. Мене звати Марк Цирульник, я VP of Engineering в Blaize — українській full-stack блокчейн-компанії. IT та crypto-індустрії досить швидко розвиваються в останні роки натомість я глибоко впевнений, що ці галузі все ще мають величезний потенціал, не кажучи вже про перспективи «витіснити» традиційні сфери.

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

Навіщо вчити Rust: переваги та використання

Rust — це мова програмування, яка зарекомендувала себе як ефективний інструмент для розробки надійного і безпечного програмного забезпечення. Rust була розроблена Mozilla Research з метою створення мови, яка була б безпечною і мала низький рівень абстракції, тобто могла б надавати прямий контроль над машинним кодом.

Сьогодні Rust це універсальна мова, яку можна використовувати під задачі будь-якої складності, будь-то консольна утиліта, прошивка для вбудованої електроніки чи високонавантажений бекенд, який опрацьовує сотні бізнес-сценаріїв.

Серед основних переваг Rust можна виділити наступне:

  • Rust було створено для потреб надійного вебрушія Servo, але зараз мова «переросла себе» та здебільшого займає нішу розробки вбудованих систем і операційних систем та високонавантажених сервісів.
  • Rust — це наступник C та Go, який здебільшого не має їхніх недоліків і здатний обробляти будь-які задачі на які здатні Go, С чи С++ ефективніше. Швидкість С++ завдяки Zero-cost abstraction та нативному виконанню, надійність OCaml завдяки простоті та compile time перевіркам володіння ресурсами.
  • Ownership, Life time та Borrow checker — вбудована, сучасна модель управління пам’яттю Rust, поділена на три секції, яка дозволяє розробнику уникнути небажаних наслідків, пов’язаних з неправильною роботою з пам’яттю.
  • Потужний інструмент Трейтів та Макросів для метапрограмування.

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

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

Недоліків у мови, звичайно, менше, але вони є. Зокрема:

  • Сьогодні Rust не є найпопулярнішим інструментом серед ІТ-фахівців, тож знайти позицію для спеціаліста саме з цієї мови буде значно складніше, ніж, наприклад, розробнику на добре знайомих JS чи Python:
  1. вакансії на djinni;
  2. на pypl.github.io;
  3. ресурс TIOBE.
  • Я б, швидше, назвав це особливістю, ніж недоліком, але все ж таки. Rust — це, переважно, блокчейн-розробка. Тобто, якщо ви також вбачаєте великий потенціал у Web3.0 та crypto, дана мова безперечно має стати одним з ваших інструментів.
  • Rust має дійсно повільну компіляцію порівняно з багатьма іншими сучасними мовами програмування.
  • Враховуючи, що Rust є «молодою» мовою у порівнянні з тією ж самою С++, вона не має такої розгалуженої екосистеми бібліотек.

Чи дійсно Rust така складна мова

Одним з часто поширених стереотипів про Rust є те, що вона є дуже складною мовою програмування. Однак, насправді Rust не є надто складною мовою для вивчення, особливо, якщо ви вже маєте досвід в програмуванні на інших мовах. Водночас слід враховувати наступні особливості:

  • мова доволі низькорівнева, тож треба розуміти, як власне функціонує комп’ютер. У фахівця, який планує опанувати Rust мають бути ґрунтовні базові знання основ та концепцій програмування.
  • Лаконічний синтаксис Rust не перевантажений великою кількістю різноманітних способів зробити одне й те саме. Низька варіативність іноді може завадити оперативному вирішенню навіть не найважчих проблем.
  • У Rust немає exception, що робить обробку та усунення помилок, м’яко кажучи, не тривіальною задачею.

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

Поради як вивчати Rust максимально продуктивно

Мені важко давати поради новачкам, бо сам я вивчав Rust, маючи великий бекграунд знань з розробки на С++ та розробки в цілому, і почати розробляти на Rust для мене взагалі-то не було проблемним. Однак, для новачків або тих, хто не має досвіду з С++ Rust може здатися трохи не привітливим на перших порах.

Тож моя перша порада будь-кому, хто вивчає Rust — це максимально опанувати особливу модель управління пам’яттю Rust з трьох вершників апокаліпсиса: Ownership, Borrowing checker та Lifetime.

Для максимального розуміння логіки вказаної фічі треба, в першу чергу, розібратися з двома речами:

  • що таке розумний вказівник (він є в багатьох мовах, навіть якщо у вашій є збирач сміття, то ви можете розібратися, як саме він працює, в більшості випадків це буде концептуально той самий smart pointer);
  • в чому полягає проблема одночасного запису та читання даних (здебільшого, вам важливо зрозуміти, що таке read-write mutex).

Коли ви опануєте ці два концепти, ви побачите, що змінні в Rust — це умовно одночасно і розумний вказівник і rw-mutex, які на етапі компіляції перевіряють свої умови що в будь-який час використання змінна має лише одного відповідального за її звільнення і не дозволяє ситуації одночасного читання та запису.

Останній концепт — це lifetime, але він простіший за попередні два й умовно зводиться до того, що будь-яка змінна живе з рядка X до рядка Y і все, чим вона володіє повинно жити не довше неї.

Авжеж, Rust більший за ці концепти, тож, другою (хоча й не новою) для вас буде ще одна порада: пишіть якомога більше коду, тренуйтесь спочатку на невеликих проєктах, щоб натренуватися на тих речах, які вже зрозумілі й зіткнутися та розібратися з новими проблемами.

Гарним інструментом для реалізації моєї поради буде ресурс Exercism, який може стати для вас тим самим першим, невеликим проєктом, на якому ви й зможете попрактикуватися та «набити руку».

До того ж Rust має велику «родину» розробників та спеціалістів на мові, тож ніколи не бійтеся звертатися до досвідченіших колег у відповідних спільнотах з питанням чи проблемою, — впевнений, вам залюбки допоможуть. Це може бути україномовний телеграм-канал або відповідні розділи у Reddit, як, наприклад, цей.

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

Ресурси для вивчення Rust

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

Вашими головними помічниками в Rust будуть три основні джерела:

Для тих, хто вивчає Rust, вже маючи досвід з С++, дуже рекомендую ознайомитися із порівняльним аналізом цих мов з точку зору концептів. Це допоможе вам входити у Rust не from scratch, а вже з певним базисом.

Як я вже зазначав вище, зовсім не зайвим для вас може бути проходження курсів на ресурсах Exercism або JetBrains.

Щодо книг: якщо ви прихильник традиційних методів вивчення та отримання інформації, в контексті Rust можу лише сказати, що всі вони здебільшого є адаптаціями rust-book. Тож, якщо ви бажаєте мати у своїй колекції якусь книгу, можете спробувати Rust for Rustaceans.

Також корисним може бути ресурс Rust Design Patterns, оскільки вказане джерело допоможе вам ознайомитися з ідеологічно вірними підходами до розв’язання стандартних проблем.

Звичайно, ви також можете користуватися стандартними, очевидними варіантами для осягнення Rust, зокрема: відеокурси на YouTube, курси на Udemy тощо.

І що далі

У підсумку, Rust є потужною мовою програмування, яка має багато переваг і може бути використана для розв’язання різноманітних завдань. Розробники, які знають та користуються Rust, можуть насолоджуватися швидкодією, безпекою та ефективністю, що значно підвищує їх конкурентоздатність на ринку.

Хоча Rust має дещо високий поріг входу (певні складнощі та особливості вивчення та використання), вона має потужну спільноту та ресурси, які допоможуть вам опанувати її максимально продуктивно та швидко.

А як ви дійшли до Rust? Якими інструментами користувалися для її вивчення? Ділиться та обговорюйте у коментарях.

👍ПодобаєтьсяСподобалось18
До обраногоВ обраному18
LinkedIn

Найкращі коментарі пропустити

Вже вкотре очікую від статей про Rust приклади рішення конкретних задач.

Rust також подобається, але статті про «Який Rust чудовий без прикладів» набридають.

Дозволені теги: blockquote, a, pre, code, ul, ol, li, b, i, del.
Ctrl + Enter
Дозволені теги: blockquote, a, pre, code, ul, ol, li, b, i, del.
Ctrl + Enter

habrastorage.org/...​8d4890cb1964c896db84c.png Це крім того факту, що в цілому втрачається сенс і переваги компільованої мови. WASI це JVM як вона є, хоча більше схоже на .NET Звісно зрозуміло для чого це Mozila, щоб Firefox OS стала схожа на Android треба зробити свою Java, от вони її і роблять. Тільки як на мене метод хибний, краше було йти по методу iOS просто Rust замість Swift, а в 99% випадків мобільний процессор це ARM.

Тут вроде более менее понятно, если сравнивать сравнения WASI с JVM или .NET то юзабельнее использовать WASI (WebAssembly System Interface) т.к. он использует виртуальную машину WebAssembly для создания простого и унифицированного интерфейса для системных вызовов. Это может облегчить портирование программного обеспечения между разными архитектурами и платформами, поэтому и пушечка(верее не только...)

И чем это отличается от Java, впрочем как и .NET ??? Классика — Write Once Run Everywhere. R.I.P Никлаус Вирт твори книги — Паскаль, Модула 2 и Oberon с нами.

Java изначально был разработан с идеей «Write Once Run Anywhere» (WORA). Это означает, что программы, написанные на Java, могут быть выполнены на любой платформе, где установана виртуальная машина Java (JVM). Код Java компилируется в байт-код, который затем интерпретируется или компилируется в машинный код JVM в зависимости от архитектуры целевой платформы.
.NET также использует концепцию виртуальной машины — Common Language Runtime (CLR), который обеспечивает исполнение кода на различных платформах.
WebAssembly (Wasm) поддерживает другую концепцию «Run Anywhere» на уровне бинарного кода, который может быть выполнен в веб-браузерах и вне их.
WASI (WebAssembly System Interface) расширяет этот принцип, предоставляя стандартный интерфейс для взаимодействия с системой вне браузера, что делает его более универсальным для различных сценариев, включая серверное и встроенное программирование.с течением времени, требования и подходы к разработке
Однако время идет,ПО продолжают эволюционировать, включая новые технологии, такие как WebAssembly, которые как раз и призваны решать современные задачи.

WebAssembly на сегодняшний день это стандартизированный байт-код к виртуальной к машине Spider Monkey, введенный в стандарт и поэтому распространившийся так же и на V8 и Chakra. Задачи преследуемые Mozilla foundation — ровно аналогичные задачам , преследуемым разработчиками Android и а так же Джеймс Гослингом и его командой во время работы в Sun над Java. Стоит отметить что имеено Java была пионером на рынке интерактивного контента на веб страницах, с технологией Applet. Название стало столь модным, что Netscape (ныне Mozilla foundation) по партнерскому соглашению с Sun Microsystems из маркетинговых соображений, выпустили интерактивный интерпретационый язык веб страниц под названием JavaScript, а не Live Script как планировалось изначально, чем устроили большую путаницу во всей индустрии которая действует по сей день.
Зачем Apple, Mozilla, Microsoft, Google и даже IBM делают свои альтернативы Java ? Все очень просто Oracle выкупивший Sun, заниматься судебными исками по факту нарушения авторского права на миллиарды долларов по всему миру, требуя роялти за использование технологии. Особенно скандальные суды с Google за Android. С момента начала судебных тяжб — платформа Java начала стремительно терять популярность.

По суті зараз якихось принципових причин вивчати мову з комерційної точки зору нема. Разом з тим, якщо дивитись на Rust як альтернативний Frontend для AI/ML в противагу Python, то можливо сенс є. Знову таки, сама по собі мова нікому не цікава, цікавий стек технологій для вирішення конкретних задач бізнесу — тобто методу заробляння грошей. Такої ніши в Rust по суті нема, це мова альтернатива C/C++. Хоча мені особисто мова сподобалась.

сьогодні з квори прийшла розсилка
What are the situations that make Rust preferable over C++ (not C)?
I’ve answered this before, and this answer has not changed. Or, rather, the Rust choice has, as the language matures, gotten even more preferable for most cases.

I can take a novice developer of high aptitude, and mold them into an effective and productive Rust developer in less than two months, without it being a full time job.

I wouldn’t trust a novice developer with two months of experience to directly contribute to a production C++ codebase, even with full code review protocols, if they were the most talented novice ever minted, even if I had spent those two months personally tutoring them full time in writing good C++.

If the project does not require specialized (and likely proprietary) C++ libraries, and I don’t have an expert C++ team and more than sufficient manpower for the anticipated work, I will choose Rust over C++ without hesitation. If I have the expert team, but not the library dependency, I’ll still choose Rust, unless the timeline is short and there’s no expectation that we’ll be maintaining the project in the long term. If we do have a library dependency, but not the C++ team, I’ll make an effort to FFI wrap the C++ and still go with Rust, before attempting to go it in C++, because, if I’m being honest, if we’re going it in C++ and I don’t have an expert team, I’m going to end up having to write or rewrite a whole lot of that code myself.

Here’s the reasons to choose C++:
— more supported targets (via g++)
— marginally better performance in a few edge cases (via g++, mostly involving nonstandard extensions)
— better 3rd party and proprietary library support (but beware the incompatible ABIs issue)

Here’s the reasons to choose Rust:
— easier to train engineers
— harder for less skilled engineers to create very bad things™ in.
— much lower typical maintenance effort ratio (lower bug count)
— much better tooling (including CI, lint, ease of open source crate evaluation)
— much shorter compile times (not as short as some, though)
— just an overall clean and well thought out language.

Here’s the awful reason I wish I could choose C++:
— template metaprogramming is fun

Here’s the less awful reason I wish I could choose C++:
— constexpr all the things

Так розкручують будь яку мову програмування, вже багато років. Бізнесу усе обіцяють дешевих розробників якіх можна підготувати за 3 місяці. Не знаю хто досі ще на це ведеться. Мова програмування, це невеликий прошарок з необхідних знань та навичок для створення програмного продукту. Інша справа, що потреби бізнесу робити софт високої якості якомога швидше. Rust як звичайна імперетавна мова програмування, тут ніяк не допоможе, я би швидше дивився скажімо на AI інструменти в цьому сенсі. Те що є зараз, звісно це такий лише початок від того що потрібно. Як на мене вимоги до системи програмування наступного покоління такі, що я описую бізнес процес через щось на зразок BPMN та дизайн — а на виході отримую одразу базовий шаблонний код, який вже можна доробити тільки в тих місцях де треба. Власне щось таке багато де існує і без AI. Rust ніяк не зменшує трудо-витрати на розробку в порівнянні скажімо з: С++, Go lang, TypeScript чи Kotlin. Добра IDE з вбудованими помічниками і лінткрами значено ефективніша штука ніж просто нові мови. Ну в елементарно С та С++ дуже добре опрацьовані мови програмування з міжнародним стандартом, взнані програми підготовки спеціалістів по індустрії та Університетах, знані підводні камені, багато експертів з мови, систем зборки лінтерів та інших інструментів і т.д. Тобто відпрацьована технологія. Rust — відносно новий продукт на ринку, хоча і давно розроблявся в два покоління для обходу відомих проблем C/C++ які власне давно можно обходити лінтерами, санітайзерами та подібними інструментами.

3 міс. курси це JS PHP Python

Як на мене вимоги до системи програмування наступного покоління такі,

так уже є No code

Навряд це просто no code, щось можливо доведеться, це швидше Smart IDE. Коли люди зможуть працювати значно ефективніше. Щоправда, я бачу що автоматизація збору вимог, експертні системи для цього на кшталт Акінатора нададуть в двічі більший результат. Найбільша втрата часу трапляється зовсім не на кодуванні, найбільшу втрату часу генерує сам бізнес, який часто просто не може формалізувати свої бажання чи намагається полагодити бізнес процеси в компанії які не працюють шляхом їх автоматизації, що не має жодного сенсу (наприклад коли ви робите доставку безкоштовно і у вас перекупи везуть в Ірландію оптом тони, автоматизуй не автоматизуй все одно отримаєш ...) , бо елементарно не вміє формалізувати чи там більше однієї людини приймає рішення і т.д. і т.п.

Он и с пайтоном хорошо юзается

Бачив що Rust регулярно займає високі рейтинги, як мова яка подобається. Чи варто починати вчити бекенд саме з мови Rust?

Моє бачення що ні, Rust вимагає перший час багато фокусуватися саме на мові. Тож якщо задача вивчити концепти BE розробки то краще почати з якоїсь умовної Node.js або навіть Python.
Rust варто вивчати якщо є любов до С++ (ненависть теж підійде )))) і плануєте знайти роботу саме на Rust

Не планую шукати роботу на Rust. Цікавить для своїх пісочних проектів, які можливо б переросли в реальні. Чи підійде для таких цілей?

Тут треба почати з головного питання, а що хочеться?

Rust універсальна мова які підійде під проекти будь-якої складності.

Якщо для вас першою стоїть бізнес-ідея проекту або якісь підходи до BE розробки то краще взяти щось що можна вивчити за 21 день (node \ python \ C++ :))).
А от якщо це про вивчення як програмування працює на рівні поза системи, то тут Rust вже буде гарним вчителем.

Швидкість реалізації ідеї не основне. Основне щоб було комфортно програмувати, щоб код надійно працював і було легко шукати баги.

До поки не освоїтесь з основними концептами програмувати не буде прям «комфортно», бо компілятор постійно буде вас кудись посилати :)

А після так, на зараз це майже едина мова яка саме змушує вас писати на надійний код. Ну і по відчуттям баги будуть лише в бізнес логіці, бо всякі data-race, неіціалізовані данні мертві данні, overflow, неявні касти (ой як загадаю старий С++ аж плакати хочеться) ітп майже апріорі неможливі в Rust

Підійде дуже добре, але якщо є досвід з іншими мовами.
Я (з 15 роками досвіду у ноді, шарпі, та плюсах) десь місяця три-чотири перечіплявся на синтаксисі та борроу чекері.

Зацікавився rust, коли наткнувся на статтю про дивовижне його комбінування з React Native — наче ідеально підходить для мого типу апки, але не знаю нікого із досвідом подібного комбінування. Можлиово хтось може поділитися?

Бо цешка на 122 надоїла. Я би сюди додав Rust+WebAssambly

Mark Tsyrulnyk, дякуємо за згадку 🙏

Вивчи Rust і сиди без роботи. А якщо хочеш роботу то це з великою ймовірністю буде крипто гадюшник. Ахерений план! Надійний як швейцарський годинник.

Коментар порушує правила спільноти і видалений модераторами.

Вивчи Rust і сиди без роботи.

Якщо вивчення однієї мови автоматично витісняє всі інші знання з голови, тоді так може вийти — такий собі «одноразовий програміст»
Чи не так?

Час який ви витратили на вивчення Rust можна було б витратити на щось інше. Чи не так? Якщо ви з Rust не працюєте то через рік ви його й забудете. Вивчити Rust корисно тим хто буде на ньому працювати та можливо ще С/С++ програмерам. Для всіх інших концепції Rust нерелевантні.

Чи не так? Якщо ви з Rust не працюєте то через рік ви його й забудете.

Не так. Конкретно Rust я не вивчав, але є мови, які настільки офігенні, що: (1) за рік невикористання Ви мову точно не забудете; (2) знання мови корисне не тільки безпосереднім використанням, а й розширенням світогляду, ті ж самі концепції можна з користю використовувати й у інших мовах (але в тій мові вони втілені елегантніше, тому там їх вивчити легше). Я не можу стверджувати, що Rust належить до цієї категорії (я його не знаю), але саме твердження «вивчати мову X, якщо не будеш її використовувати, ні до чого, за рік забудеш» у загальному випадку, по-моєму, хибне.

Хоча я не сперечаюся з тим, що теоретично той самий час можна інвестувати ще ефективніше. Але це вже вирішує кожен для себе, що для нього ефективніше.

Так а я вам про що?

Концепції Rust яких немає в інших мовах це ownership, borowing може ще якісь. Ці концепції будуть корисні для С/С++ дева. Для frontend/backend дева (яких напевно більшість) вони нерелевантні.

Решта концепцій Rust як мінимум є в інших не mainstream мовах. Тому раст немає переваги перед ідрісами, скалами, хаскелями та іншими брейнфаками, якщо просто вчиш мову для розвитку, а не для програмування за гроші.

Саме так і є з Rust. Після його використання я трохи був у шоці, скільки прихованих багів було у моєму коді на C#, який повʼязаний з багатопоточністю.

Можливо світчернутим буде складно, а ми на 122 і так на цешке майже все пишем...

Що таке 122?

О, виглядає розумно. Дякс

Синтаксис інший просто. А так під мовою програмування в опису вакансії ніколи не мається на увазі саме мова програмування. Йдеться про досвід в конкретному стеку технологій для вирішення певних бізнес задач. Під Rust це часто кріптотрейдінг наприклад. Так само скажімо під React йдеться зовсім не про TypeScript фреймверк, а про вміння створювати web застосунки та web interface користувача. По факту для Rust існують низка бекенд фреймверків, чи вони нададуть результат кращій скажімо за Java/Spring — для напевно чогось так, для чогось ні. Що точно — в два рази довше прийдеться писати сам код, якщо його на генерувати якимось AI звісно.

Любити чи не любити блокчейн то вибір кожного; вакансії в неблокчейн проекти є, і порівняно з С++ зарплатня вище а конкуренція менше

Вивчи Rust і сиди без роботи.

А ви щось нове вивчаєте виключно заради роботи?

Питання до вже знаючих Rust, і пробувавших писати на ньому під мікроконтролери чи інші подібні задачі на Rust-core: це одна і та сама мова, яку можна більш-менш опанувати по написанню десктопних апок, чи між ними прірва рівня ідіоматичного С++20 і С?

прірва

Язык практически один и тот же. В ембедед вам доступна большая часть библиотеки раста (в отличие от C/C++ где в ембедед порой приходится делать свою реализацию max).

ви там атмєгу програмуєте, чи пік з 90х? для сучасних cortex m є newlib, де є все, включаючи stl.

Є і недоліки, наприклад немає підтримки CAN-шини у цешки є. Було вже мабудь кілько спроб написати підтримку CAN у embedded hal, але поки що безуспішно. Нарешті було велике обговорення, чому rust embedded чому ще не можливо використовувати в бойових системах на Cortex-M3 і відсутність CAN — це одна з таких причин.

немає підтримки CAN-шини у цешки є

Можно ссылку на стандарт C, где прописана поддержка CAN?

Було вже мабудь кілько спроб написати підтримку CAN у embedded hal, але поки що безуспішно.

Наймите компетентного Embedded Rust engineer, и будет у вас поддержка CAN

відсутність CAN — це одна з таких причин.

см предыдущий пункт.

У CAN шині немає ні головних, ні відомих. Всі можуть кидати пакети з даними одночасно і звертатися хто до кого хоче. Щоб не було колізій, існує механізм апаратного арбітражу.Це призводить до того, що не втрачається пропускна спроможність шини. Але з іншого боку, вимагає більш кропіткового складання пакету даних. Так, щоб пріоритетніші дані мали більше домінантних біт на початку посилки. Щоб частіше вигравати арбітраж. У цьому можуть виникати деякі складності.Безпосередньо стандарт CAN розробила компанія Bosch. Він визначає передачу у відриві від фізичного рівня та може бути будь-яким. Пристрій CAN, який використовує 11-бітні ідентифікатори, зазвичай називається CAN 2.0A, а пристрій CAN, який використовує 29-бітні ідентифікатори, зазвичай називається CAN 2.0B. Ці стандарти є у вільному доступі від Bosch разом з іншими специфікаціями та документами.Як руст інженер може допогти з проблеми передачі великих обсягів даних одночасно, якщо це проблема самої шини?

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

У будь-якому випадку, додавання підтримки шини CAN до вбудованого RUST не є тривіальною річчю.Також слід мати на увазі, що шина CAN використовується у інших протоколах високого рівня, таких як CANOpen, UAVCAN, CANAerospace та інших, може мати деяки проблеми з відсутність стандартизації кодування даних, що передаються.

Вы уже выше написали, что код на C есть. Портирование его на Rust это тривиальная задача для любого компетентного Rust инженера. Пишите мне, я вас сведу с нужным человеком (прийдется, правда, отлистать за каждый час работы)

Зачем код на С вообще портировать ? Проще взять прив’язку и использовать. Так тили иначе вопрос поставлен верно, зачем всем этим заниматься если можно сразу скомпоновать готовое приложение под свои цели сразу на С или C++ ?

Зачем код на С вообще портировать ?

За тем, что не всем хочется линковать стремный код, который скорее всего полон неопределенного поведения, ибо написан людьми, котоыре «пишут на С уже 30 лет и знают что делают», при этом в жизни не открывали стандарт.

Там не только портировать придется, но еще и рефакторинг потом делать!

Якщо мова дозволяє бахнути сирих вказівників або ассемблерних вставок, на ній можна зробити всі подібні задачі.
Мене більше насторожує, що С/С++ — це вже по факту різні, все менш сумісні мови, опціональність роботи з райтаймом і GC в D провалилась повністю. Чи не вийде так, що і у Rust core-підмножина буде вічною бетою, всі ліби і туторіали будуть писатись не під нього, і девелоперів саме на цій підмножині в природі не виникне?

Так, це мови для різних задач, якщо це структурна або процедурна мова програмування, яка використовувалася для системних додатків і програм низького рівня. Тоді як C++ є об’єктно-орієнтованою мовою програмування, що має деякі додаткові функції, такі як інкапсуляція, приховування даних, абстракція даних, успадкування, поліморфізм тощо.Rust це С++ без богажу обратної сумісностіУскладнення і так складного синтаксису С++ специфічними покажчиками і додавання збирача сміття безсумнівно погано вплинуть проект.Повернення до ручної моделі управління пам’яттю . Саме вона потрібна для простоти та зручності. Робиш прототип використовуй скрипти, заощаджуй час та ресурси. Необхідна гнучкість і продуктивність юзайте С++.А ще бувають алгоритми, які знаходять та звільняють цикли. Працюють вони приблизно так: щоразу, коли лічильник розумного покажчика декрементується, цей покажчик додається в «список покажчиків, які можуть входити в цикли». Періодично з усіх покажчиків у цьому списку запускається пошук у глибину, який знаходить та видаляє цикли. Існує навіть багатопотоковий варіант, який не вимагає зупинки всіх потоків.

Чи не вийде так, що і у Rust core-підмножина буде вічною бетою,

Уточню терминологию и факты

doc.rust-lang.org/stable/core библиотека — это часть стандартной библиотеки, которая может работать без операционной системы и без динамического выделения памяти.

doc.rust-lang.org/stable/alloc — дополнение поверх core, которое добавляет возможность динамического выделения памяти без операционной системы и фичи, котоыре с ней связаны (например, векторы, строки динамического размера, смарт поинтеры)

doc.rust-lang.org/stable/std — включает в себя core, alloc плюс всю остальную часть стандартной библиотеки, которая требует наличия операционной системы (многопоточность, работа с файловой системой.

no_std — это режим компиляции, в котором «отключается» std, но остается возможность использовать core и alloc.

Это все давно стабилизировано и работает в продакшене, это не «бета», которой никто не пользуется.

всі ліби і туторіали будуть писатись не під нього, і девелоперів саме на цій підмножині в природі не виникне?

Куча 3d party поддерживают компиляцию в nostd и могут использоваться в ембеддед. Каждая библиотека в nostd компилироваться не будет, так как:
1) недостаточно широко используется чтоб оправдать усилия на совместимость с nostd
2) в принципе не может там работать, требует наличия ОС.

socketcan rs
яка С підтпимка канбаса? в якому стандарті

головні фішки раста (Ownership, Life time та Borrow checker) вони як раз зашиті в мову та компілятор, тож ви втрачаєте максимум пачку бібліотек які будете писати самі

Умовно як C++ без STL (aле з smart-pointers :))

Відсутність, наприклад, бібліотек для роботи з файловою системою або часом і датою для написання якогось бутлоадера це нормально, питання скоріше у тому, наскільки неідіоматичним стає код при цьому. Особливо боляче, наприклад, коли хтось автогенерує матаноємкий код на С++, з контейнерами і ексепшнами, а потім хоче це прикрутити до пропріетарного тулчейну, який вміє тільки С з класами.

Дуже подобаєься ця мова.Спробуйте швиденько написати щось простеньке і ви усвідомите, що саме в цьому конкретному випадку ви не зможите покладатися на статичний поліморфізм і мономорфізацію, адже компілятор не знає скільки пам’яті потрібно виділяти під конкретну реалізацію. Фактично це означає, що вам потрібно якось вміти зберігати в пам’яті типи, розмір яких невідомий на етапі компіляції. Таку здатність має тип Box, але він вже використовується для цього для динамічного виділення пам’яті з гарбіджу, не путати з RefCell, тому що рефцел це швидше такий собі однопотоковий м’ютекс, який переносить усі гарантії в рантайм.Але можно спробувати написати щось своє щось як DST.Rust-дуже явно показує, скільки всього може приховуватися за простими цешними-конструкціями

Много букаф. Опиши конкретно какую проблему нужно решить, я покажу идиоматический код на расте, который будет работать под nostd

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

nostd

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

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

crates.io/crates/alloca
crates.io/crates/stackalloc

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

Драйверы и библиотеки для кастомного железа — это не часть языка.

Але вони на практиці зазвичай використовуються...

Під десктоп пишеться так само як і на C++ — на GTK чи QT. Там за великим рахунком нема жодної різниці, яка фронтенд мова бібліотеку треба знати і операційні системи. Щодо ембедеду — так можна, разом з тим то напевно геморой так як увесь API до різних STM чи Arduino — на. C/C++.

Rust 🦀🚀
Так а чому Rust?

крутий плейлист по Rust
(знімав на мові краіни 404. переформатувався на Англ)

Stand with Ukraine

Слава Украіні!!!

Крутяк, дякую за статтю.

Зараз маю нове хобі — мікроконтролери. Здається, це непогана нагода спробувати Rust. Ще не робив ніяких практичних кроків у тому напрямку, але планую.

тут дивлячись яка ціль, якщо розібратися з low-level то краще все ж таки C бо він дає краще уявлення про те що відбувається з залізом.
Якщо головна ціль це Rust то це буде дуже гарним додзьо щоб зрозуміти переваги Rust та чому C \ C++ «unsafe»

Та ціль, власне, навчитися чомусь новому, маючи бонусну мотивацію (котру надає той факт, що створюєш щось більш-менш практичне).

якщо розібратися з low-level то краще все ж таки C бо він дає краще уявлення про те що відбувається з залізом.

Це міф, і та і та мова працюють на тому ж рівні. Якщо на те пішло, Rust дає кращий контроль над низькорівневими деталями виконання якраз завдяки ізольованому простору для UB.

Вже вкотре очікую від статей про Rust приклади рішення конкретних задач.

Rust також подобається, але статті про «Який Rust чудовий без прикладів» набридають.

Ось приклад рішення конкретних задач : rust + substrate = blockchain

Які б приклади ви хотіли бачити? щось на кшталт якогось патерну на Rust і порівняння з Go \ C++?

особисто я б хотів побачити порівняння з Go на прикладі патернів або коду по популярних завданнях — типу конкурентності/паралелізації, серіалізація/десеріалізація, алгоритми, бінарні дерева (так, знаю, що це не найпопулярніша річ) і тд

Та звичайні практичні задачі, які вирішуються повсякденно, шаблон мікросервісу на Rust або ж вибір кращого рішення між двома-трьома варіантами за допомогою бенчмарків.

Підписатись на коментарі