Галоўная / Артыкулы

Пяць проектаў на мове Rust для навучэння, з важылівамі і захадамі на базе AI

Як выбраць проект на Rust, які змусіць вас выучыць прынцыпы абсалютнай власнасці, асінхроннае програмаванне і канкуранцыю, з пяцьма конкрэтнымі ідеямі, этапамі реалізацыі та правіламі викорыстання ШІ пад час навучэння.

Выдавец: REACTAPP.TOP13 хв чытання2883 слоў

Крыніцы: 5 Rust Projects That Can Teach You More Than a Course

Rust ўсуне на пачатку вялікі часткі концэпцый: прыналежнасць дадзенняў, запозічэнне, трымкі жыцця, атрыбуты, карэнтнае распрацоўванне, асінхроннае програмаванне, а таксама екасыстэму пакетаў, з якімаю трэба разабрацца, прычаму ўсё карыстны можа запрацаваць. Багато учняў прабуюць выйсці з гэтай ситуацыі, збіраючы туюторыялы, але ўсё рава застаюцца без дзейства перед порожнім файлам main.rs. Более надзеяным падходам є выбір проекта, які будзе достатньна складным, каб кожная з гэтых концэпцый стала проблемай, якую трэба рашыць, а не тамой, яку проста прачытаць. У гэтым кялікасе описаны пяць такіх проектаў, што вы навучыцеся на іх адпаведна, як стварыць першую, завершальную версію, а таксама як выкарыстоўваць дапамогу ШІ, каб гэта прышвартавало ваш працэс, але не заменіла сама навучэнне.

Чаму складны проект кращы за іншы курс

Курс практыкуе концэпцыяў у порядку, выбранам іншым чалавекам, пры чым ужо не застаёцца труднасцей. Настоямы проект дзеяў на адварот: вы сталкнуліся з пераканаў, і самыя пераканы падказваюць, якую концэпцыю трэба выйсці далей. Па дарозе вы чытаете рэальную дакументацыю, прымайце архітэктурныя рашэнні, якія пазней шкодаваеце, расшыфрувайце заплутаныя памылкі кампайляра, з’являеце ўвагу да проблемаў з выдатнасцю і вучыцеся, як разныя компаненты работаюць разам. Гэтыя навыкі можна прыменіць у професійнай работе, і ўсваяць іх пасыўна є дужа складна.

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

Проект 1: ваш сасавы агент для кодавання ў тэрмінале

Асистэнты для кодавання на базе AI, які працуюць у рэжыме командной лініі, ўваходзяць у число найболей актыўных элементаў інструментаў для разработчыкаў. Такія інструменты, як Claude Code, Codex і разныя альтэрнатывы з адкрытым кодам, дазваляюць разработчыку задаць мету, а агент пераглядае файлы, запускае інструменты, рэдагуе код і даўае адпаведныя звесткі, у той час калі разработчык не павінен самастаўна вводзіць кожную команду. Спрощаная версія такога цыклу ўтварае чыракоўскі завданне, таму што ён адночасна стосуецца сетевых тэхналогій, процесаў, файловай системы і інтэрфейсу пользователя.

Основны цыкл ўскладнены не ўжо. Пользователь вводзіць тэкст у тэрмінальны інтерфейс, ваша програма перадае ўсю беседу мовнаму модэлю, модель можа адпавесці запитам на викорыстанне інструмента, ваш код на мове Rust запускае гэты інструмент, а рэзультат вяртаецца да моделі для наступнага крока.

You → Terminal UI → LLM → Tool Request → Your Rust Program → Result → LLM

Цікавай частка — это стрэлка з моделі назад у вашу праграму. Модэлі ніколі не падаець прымусова на ваш комп’ютер; яна можа толькі запытаць, а ваш код вяршыць, чы гэта зрабіць і як. Саме ў гэтым межы знаходзіцца большая частка роботы па проектаванні.

Першая версія, яю можна завершыць

Пачніце з калькі інструментоў і нічога больш:

  • атварыць і прачытаць файл
  • створыць або перазапісаць файл
  • шукаць у каталозе
  • экспанаваць команду шэлу
  • адаць інфармацыю пра проект
  • падасіць рэзультат кожнага інструмента назад да моделі

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

Што гэта навучае

  • async Rust і HTTP-кліенты для вярбунку з API модэлю
  • Серыялізацыю і дэсерыялізацыю JSON для запитоў, адпаведзей і вызоваў інструментаў
  • Работу з адпаведзямі, якія прадаюцца стрімам
  • Стварэнне і кераванне дзецінымі процесамі
  • API файловай системы
  • Моделюванне цыклу агента як машыны станоў
  • Распакаванне і адміністрацыя памятак у разе сетевых, парсингавых і процесных абяронаў
  • Дизайн інтэрфейса ў командной лініі і тэрмінале
  • Выкорыстоўванне інструментаў як пратаколу
  • Іншыя перавагі — гэты проект ніколі не заканчываецца. Вы можетэ продаваляваць яго падтрымку месяцями, што робіць яго хорашым давялеглівым тэстовым майданчыкам. Якщо вы хочаце пазнакоміцца з тым, як выглядае той самы цикл з точка зору продукту і безпекі, наша стаття па стварэнню персональнага AI-агента з правамі на доступ болей дакладна розглядае аспекты доверлівасці.

    Адначысці, што вы оптымізаваеце

    Перш чым пачатківаць напісанне коду, будзьте чыстасердныя ў вопысе вашай меты. Вивучэнне Rust, стварэння проекта для портфеля, розробка інструмента, які будзе викорыстоўвацца ўсё дзень, експерименты з AI і падготовка да ролі ў сфере системаў — усё гэта прыводзіць да разных рашэнняў. Проект для портфеля ценіць вышуканасць; інструмент для ўседзённага викорыстоўвання — надзеямасць; навучальны проект — адчуткі борбы.

    Якщо працэўнае навучэнне ёсьць прыорітетам, не дазволяйце асистэнту стварыць весь код. Адключэнне тых частак, якія вызываюць раздражэнне, таксама пазбавляе вас часткі розумэння, якая могла бы выйсці з іх вивучэння. Можна папросіць асистэнта паспяшыць з'ясаванне прычыны памилкі контролера запозычэння чыстаць незрозумелы адзінак дасведчэння. Але делегавацыя задачі з дизайна раней, чым вы разумеете саму систему, — глупа. Проект, які трэба тры дні, каб його зрозумець, зазвычай даёт набагато большых наўканняў, чым той, які ствараецца за тры гадзіны.

    Проект 2: дэсктопная прыкладка з Tauri

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

    Адзінайце звычныя спісы задач і працуйце над чым-то, што вы б дзейсна ачылалі ўсё дні. Адны з конкрэтных варыянтаў — местны асистент для падвыконання задач, який запісвае аудыя, перакладае мовленне ў текст, зберагае нотаткі на вашым дыску і чытае выбраны текст зноў вам. Іншыя хорашы варыянты — персональны арганізатор файлоў, рабочая суперфіса на Markdown, панель керування для разработчыкаў, інструмент для обробкі медыя або местны ІІ-інструмент.

    Сама ідея мае меншое значэнне, чым супрацоўка межаў між веб-інтерфейсам і внутршнім серверам. Кожная кнопка ў інтерфейсе востатком стае запытам через гэту межу, і самэ правильнае проектаванне гэтага інтерфейса ёсць справжняй урок. Розумны першы крок — стварэнне адной команды, якая выдаеся з Rust і запускаецца з фронтэнду, і якая выконвае ўсё тое, чаго браузер не можа зробіць сам, напрыклад, чытанне спісу файлоў у папцы.

    Што гэта навучае

    • структуруванне прыкладнення на Rust з адной чы неякшаю колькасцю слоёў
  • Комунікацыя межа фронтэндам і Rust
  • Пакаванне і распрасцяе настольных прыкладнікаў
  • Локальныя сховышчы
  • Ніткі і задачы на фоне, якія падтрымваюць адказнасць UI
  • Операцыі з файловай системай
  • Выклік званых API і служб
  • Карыстоўванне стану
  • Раскрыцця памылак праз практычныя паведамленні ў UI
  • Аспекты безпекі для натыўнага прыкладніка, яны адрасаваюць веб-контэнт
  • Абщы вывад заключаецца ў тым, што разрабатка програмнага забавы становіцца значна сложнейшай, калі яна працуе з рэальной операцыйным системай. Чытанне файла — гэта адна лінія коду. Але безпечная обработка файлоў, чыстая адчытнасць памылак, адказнасць пад час повольнай роботы і однаковая працэздатнась на разных апаратах — гэта зусім іншыя проблемы, і саме цей разлік є тым дазнаннем, якое вартуе атрымаць.

    Праект 3: гра типу «захоплення веж» у Bevy

    Гра — адзін з некальколькох проектаў, які можу прымусіць вас забыць, што вы вучыцеся. Яна таксама ўжо спрабны вучыцель, калі адночасна павінны працаваць многія системы ў кожным кадре: аб’екты, данні від гэра, фізыка, атрыбуты візуалізацыі, таймінг, переходы между станамі, а таксама ліміт прыдатнасці, який утримвае все разам.

    Bevy ідеальна для тых, хто вучыцца Rust, каліколькі яна пабудавана на системе Entity Component System (ECS). У працы з яю няма вялікіх об’ектаў, які аб’еднваюць усе поваджэння, — энтытам ёст моцна проста ідэнтыфікатор, да якога прыўязаны компоненты, а системы — гэта функцыі, якія працуюць з кожным энтытом, у якога є пэўны набор компонентаў. Прыкладом можа быць снаряд, у якога є пазіцыя, вэласітэт і значэнне шкоды; система руху апдэйтуе пазіцыю і вэласітэты, а система зі столкненням карае за шкоду. Такой перыяход ад об’ектаў да дадзеных і функцый — адна з найцэнныях канцепцый, якія Rust і Bevy можаць запропанаваць.

    Чаму саме жанр захоплення баштоў

    У гэтым жанре колькасць энтытаў быстра зрастае, і самэ гэта робіць яго падходячым для навучання. Адна карта можа мець:

    • сотні ворагоў адразу
    • колькасць баштоў з разнымі функцыямі
  • снаряды падаючыя
  • сістэмы здароў’я і пашкоджэння
  • шуканне шляху
  • хвалі нападчыкаў
  • апдэйты
  • некалькі типаў ворагоў
  • У такім масштабе правильнасць больш не ёстся ейдзовым пытаннем. Пачынаеш спытацца, сколькі роботы виконвае гэя гра ў кожным кадре. Гэта пытанне прыводзіць да аналізу выконання, падзею ваходжэння дадзеных, планавання задач, выкарыстоўвання памяці і выбору алгарытмаў, якія не зламваюцца праз адны рост колькасці дадзеных. Хорашы першы крок — калі адны вораг хадзіць па фіксаваным шляху, а адна вежа ў яго стрэліць; усё інша можа быць дадана пасля таго, як гэты цыкл стане стабільным.

    Што гэта навучае

    • як структуруецца сістэма Entity Component System
    • гэйм-цыкл і таймінг кадраў
    • рэакцыя на здарэння
    • кантроль стану між меню, рэвеламі і падзеяй «гэма завершана»
    • аналіз выконання
    • дызайн, оріентаваны на дадзеныя
    • Управлець рэсурсамі
    • Асалоды працы з візуальным матэрыялам
    • Обробка вхідных дадзеных
    • Оптымізацыя

    Гэтыя гэмы таксама навучаюць таго, чаго рэдкая частка туторыяў можа даць: як взаімадзейнуюць калькольныя незалежныя системы, калі програма становіцца сапраўдна складной, і як маленькія змены ў аднай системе паўтараюцца ў іншых.

    Праект 4: вбудованы прыстрой з машынным навчанням на самай прыстрое

    У меры обмежанага апаратнага забезпечэння Rust становіцца ўсё цякавейшым: малая колькасць памяці, скромны бюджет на энергію і абмежаны час роботы CPU. У змену на ноутбук, ставіце мету мікраконтролер або маленькі прыстрой на перыметры.

    Практычны прыклад — прыстрой, який стежыць за сваім арэамом і реагуе на змены. Ён можа фіксаваць:

    • тэмпературу
    • вологасць
    • рэжымы святла
    • рух
    • звук
    • іншыя показанні датчыкаў

    Крэму да гэтага, вы можете дадаць кампактны модэль машыннага навучэння для адной конкрэтной задачы: выяўлення анамалій, распазнаўанне жестоў чы слуханне спецыяльнага слова. Модэль не трэба робіць занадта сложным; справжнее навучэнне заключаецца у адпрацоўкі всего на абмежанай апаратнай базе.

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

    Чаму Rust для вбудоўаных прыладоў выглядае інакш

    Програма на десктопе распаўляецца цэлым стандартным бібліятэкам, многай памяцю, шырокаспектным CPU і аператывай системай, якая карыцца безлічыю низкоуровневых деталяў. У развіцці вбудоўаных прыладоў большая частка гэтага знікла, і ўсё гэта прыносіць новы набор тэм:

    • no_std у Rust, калі стандартная бібліятэка недоступна
    • работа ў строгіх межах памяці
    • інтэрфейсы з апаратам
  • перарывы
  • раннія рэакцыя на змены
  • драйверы прыстроў
  • комунікацыя з периферыйнымі прыстроямі
  • мультікампіляцыя
  • інструменты та екасистема, прызначаная для конкрэтных мікраконтралераў
  • Это адна з найяснейшых доказаў таго, чаму Rust мае значэнне не толькі для звычных прыемоў. Патрэбна ўсведамленасць пра тое, што на самай практыцы робіць апарат, калі няма нічога, што магло бы гэта сакраць. Робота з вбудованым програмнам таксама спрыяе адносу Rust да роботыкі, автамабільных систем, промышлянага обяжчання і іншых галоў, дзе важліва апаратная частка.

    Праект 5: адаптатыўны балансавальнік навантажэння

    Для разработчыкаў бэкенду іншыя CRUD API рэдка сутлікуе ўмеласці. Аднак стварэнне часткі інфраструктуры такое можа зробіць. Хорашым прыкладам є балансір навантажэння: яны знаходзяцца між кліентамі та групай сервераў бэкенду, і для кожнага прыходзячага запиту вони выбіраюць, який працоўнік должен яго обрабаваць, замест таго каб усе трафік направлялася на адну машыну.

    Базовая структура проста: кліенты падключаюцца да вашага процесу на Rust, і ён перадае кожны запит аднаму з кількох працоўнікаў.

    ┌─────────────┐
                    │   Clients   │
                    └──────┬──────┘
                           │
                           ▼
                  ┌─────────────────┐
                  │  Rust Load      │
                  │    Balancer     │
                  └───────┬─────────┘
                      ┌───┴───┐
                      ▼       ▼
                 ┌────────┐ ┌────────┐
                 │Worker 1│ │Worker 2│
                 └────────┘ └────────┘
    

    Этапы пераходу ад простага да адаптываўнага падходу

    Пачніце з простага роутавання за принцыпам «рунд-робін», калі кожны запит па черзі прыходзіць да наступнага працоўніка. Ёго лёгка разумець, і ён даўае базовую пазычку. Потым поступова дадзіце інтелектуальнасць:

    • звярніце увагу на часы адпаведзення та шчыльнасць памылак кожнага працоўніка
    • выкройце несправныя працоўнікі та перастаньце направляць запиты да ўсіх іх
    • застосавайце ліміты на з’яўленняся запытаў
  • Прабуйце альтернатыўныя стратегіі маршрутацыі і парабяроўваеце іх пад навантажэнням
  • У канцы канцоў балансэр можа налаштаваць сваю дзеяльнасць пад кантэкстам рэальных умоў трафіку, а не следаваць фіксаваным правілам.

    Дзе выйшае складна

    Уявіце, што аднаму з працоўнікаў раптам паспяшае робота. Чы трэба, каб новыя запиты продаваліся туды? Практычна нейколі. Інша складнасць — калі калькі працоўнікаў паспяшаюць роботу адразу, кожны з свайгоў разлога: аднаму недастаткова ресурсоў, у іншага проблемы з канектам да сеті, ў трэцьяго запускаецца процес адчысцення непатрэбных дадзенаў. Сістэма должна стежыць за тым, што вядзеца, і быстра прыміць рашэнні, не становячыся самаю прычыной затрымакаў. Для рашэння такіх задач патрэбны:

    • канкурантнасць
    • основы сетяў
    • TCP і HTTP
    • зворачная проксі-робота
    • перакананні пра стан і таймауты
    • кансалідацыя канектаў да працоўнікаў
    • збір метрык
    • ранаспад навантажэння
    • Зворотный тырс узел, калі всі працоўнікі зайняты
    • Адпаведна роба з абыяканняамі
    • Падход да распрацоўкі дыстрыбуіраваных систем

    Можна эксперыментаваць з політакай маршрутызацыі пад адказ AI, але трэба ставіцца да яе строго як да эксперыменту. Критычная інфраструктура ніколі не должна слепа павяржвацца ў рашэнні моделі, і павінен завжды быць доступны дэтэрміністычны альтернатыўны варыянт. AI сама па сабе нічаго не дадае; мета — выявіць, чы рэальна яна павышае эфектыўнасць системы у порэваненні з простай, добра разумелай стратэгіяй.

    Што спакушае гэтыя проекты

    Спакушаным элементам няў синтаксіс. Цэлая складнасць, якой нельга ўхіліцца.

    Інструкцыя можа паказаць, як працюе Arc<Mutex<T>>; проект дапамагае зрозумець, чаму абсалютна патрэбна сінхронізацыя для спакульнаных дадзенняў, зазвычай пасля таго, як кампіляр не дазволяе ўжываць іх без абяцаў пра безпеку. Асінхронныя функцыі лёгкая адказаць на паперы; рэальны прыклад дапамагае пазнаць, што выходзіць, калі калькі завадбы взаімаюцца межу сабою, калі запит анулюецца на паўпацёку, або калі з’являецца перыяд у супакойненні. Кніга можа паспяшыць разумець панаванне; проект змушае ствараць структуры, у якіх кожны рысурс мае правильнага власніка і ўвольняецца у правильны час. Гэта разліка — межа між тым, каб проста знаць язык, і тым, каб ведаць, як ствараць програмнае забезпечэнне на яму.

    Выберыце проект, які ўскладнюе роботу

    Прыгучыя правілы выбору: выберачыце тое, што знаходзіцца трохі за межамі вашых нынешняяя спроможнасцей. Гэта не павінна быць немагчымаема, і гэта не павінна быць тое, як создаць якое-небудзь вы вже ведаеце. Правы проект змушвае вас парадоксальна думаць, што вы яшчэ не маеце жаданняя, як функціонуе якаясь частка ў яму.

    Гэтае адчутце — гарны знак. Чакайце, што вам даведзяць чытаць многа дакументацыі, ламаць свой код, неправильна адначытаць API, пісаць абстракцыю, якая выходзіць паслабна, і пазней яе заменяць, а таксама не раз спарывацца з кампайляром. Пасля чаго, чераз калькі дней, тое, што здавалася немагчымаемым, стане зрозумелым. Гэтыя адчуткі вельмі складна відтворыць, проста пераглядаючы ўсё больш туторыялів.

    Існаванне ШІ без аутсорсінгу навучэння

    Спосаб, якім вы викорыстоўваеце дапамогу ШІ, можа змяніць тое, насколькі проект дапаможа вам навучыцца, больш чым будзь-які іншы фактар. Сучасныя асистэнты справдзільна корыстны: яны раз’ясняюць паведамленні пра аберанцы, скорачуюць дугі документацыю, пропануеюць падходы і дапамагаюць раскопацца ў багах. Галоўная межа — гэта викорыстоўванне ШІ як інструмента проты ўжывання яго як замены розумэнню.

    Для проекта, які спрямованы на навчанне, эфектывае падход здаецца такім:

    • самі напісайце першую версію
    • перад тым, як прасіць пра дапамогу, прачытайце адпаведную документацыю
    • спробуйце рашыць кожную проблему самі, перш чым прасіце аб рашэнні
    • калі застрялі, прасіце аб поясненні, а не готовага коду
    • самі рэалізуйце парадак, нават якщо тепер ведаеце, які ён мае выглядаць
    • будзьце впэўнены, што можаце поясніць кожную важлівую частку системы без пагляду ў іншыя джерела

    Нічыя з гэтых пунктаў не значыць неабходнасці аэватацыі ад AI. Гэта значыць прабавацца пераканацца, што саме вы прыметэяеце рашэння.

    Спаўненне проекта з вашымі метамі

    Дазвольце той відэк на інжынера, каму хочаце стаць, кансультаваць вас у выборы:

    • AI і інструменты для разработчиков: ствараць агента для кодавання ў тэрмінале
    • Дакастовыя програмы: ствараць прыкладнасць на Tauri
    • Гэмы і выкананне: ствараць гэму на адыграўку з типам Bevy
    • Робатыка, апаратная частка або работа на низкам рэвэлі: ствараць вбудоўаны прыстрой
    • Інфраструктура бэкенду і распадзеленыя системы: адыграўка для рэгулявання навантажэння

    Калі бы вы не выбралі, не старайцеся досягнуць досконаласці. Спачатку запускайце найменшую працюючую версію, а потым ўдосконаляйце яе.

    Ключовыя выводы

    • Выбірайце проекты, якіх складнасць вымагае ад вас прыемкі на сябе адпаведальнасці, роботы паралельна, асінхронной обработкі та карання бягункоў, замест таго, каб проста чытаць аб іх у абстрактных тэкстах.
    • Задайце мінімальную першую веху для кожнага проекта і поступова ўдосконаляйце яе; просты рабочы цікл навучае больш, чым амбіцыйны дизайн, які ніколи не запускаецца.
    • Заздалегідь вярніцеся, чы робіце вы навчанне, ствараеце елемент портфеля чы выпускаеце інструмент, таму што кожная мета вяскравіць разныя способы прышвартавання.
    • Ўжывайце ШІ для адказаў, а не для стварэння коду, калі мета — навчанне, і застаўляйце дэтерміністычныя альтернатывы там, дзе модель прымеўляе рашэнні ў рэальной системе.
    • Цыкл стварэння, зламу, дакладнага аналізу, перадзяляння та оптымізавання — гэта джерела большай часткі разумення Rust, і тыдзень такой роботы можа заменіць многія гадзіны пасыўных туторыяў.