Architecture Decision Record

Active theme: Light

← Примери за записи на решения

Запис на архитектурно решение: език за програмиране Rust

Номер на решението: AR-001

Заглавие на решението: Приемане на езика за програмиране Rust

Дата: 1 декември 2021 г.

Състояние: Прието

Постановка на проблема

Докато продължаваме да разработваме софтуерни приложения, наблюдаваме, че става все по-трудно да смекчаваме потенциални уязвимости в сигурността и да предотвратяваме грешки по време на изпълнение. При съществуващите езици за програмиране, като C и C++, продължаваме да се сблъскваме с проблеми като препълване на буфера, изтичане на памет и недефинирано поведение, водещо до сривове на приложенията. Нуждаем се от език за програмиране, който предоставя гаранции за безопасност на паметта и е достатъчно ефективен, за да поддържа приложения, критични за производителността.

Съображения

Няколко езика за програмиране са проектирани да разглеждат съществуващите проблеми. Сред тях езикът за програмиране Rust привлече значително внимание от общността на разработчиците поради своите уникални конструктивни особености. Съображенията включват;

  1. Безопасност на паметта и сигурност

  2. Производителност и ефективност

  3. Поддръжка от общността и възприемане

  4. Крива на учене

  5. Инструменти и екосистема

  6. Съвместимост със съществуващите софтуерни системи.

Ограничения

Приемането на нов език за програмиране изисква преквалификация на разработчиците, което отнема време и ресурси. Интегрирането на езика в съществуващия работен поток на разработка може да е предизвикателство. Трябва да осигурим съвместимост със съществуващите системи и да избегнем скъсващи промени, за да запазим приемствеността.

Реализация

  1. Нашият екип за разработка ще премине обучение, за да научи и да се запознае с езика за програмиране Rust.

  2. Ще създадем нов проект с Rust на пробна основа, за да оценим съвместимостта и пригодността му за нашите цели на разработка.

  3. Постепенно ще мигрираме съществуващи системи, написани на C и C++, към Rust.

  4. Ще си сътрудничим с общността на Rust, за да проучим наличните инструменти и библиотеки, които могат да подобрят нашия работен поток на разработка.

  5. Ще наблюдаваме производителността на Rust и редовно ще я сравняваме с производителността на съществуващите езици за програмиране.

  6. Ще възприемем дългосрочен подход, който балансира разходите за обучение, интеграция и потенциалните ползи от използването на Rust.

Обосновка

Приехме Rust поради неговите уникални функции, проектирани да предоставят гаранции за безопасност на паметта и сигурност, като същевременно запазват производителността и ефективността. Стабилната типова система на Rust, borrow checker и концепциите за безопасност на паметта го правят силно подходящ за разработване на приложения, критични за производителността и безопасността. Освен това Rust има значителна общност от разработчици, което ни позволява достъп до широка гама инструменти, библиотеки и екосистема, които подкрепят нашия работен поток на разработка. Макар Rust да идва с крива на учене, вярваме, че ползите от приемането на Rust надвишават разходите и предоставят отлична възможност за непрекъснат растеж и иновации.

Последици

  1. Приемането на Rust ще изисква значителна инвестиция на време и ресурси за обучение на разработчиците и интегриране на езика в съществуващия работен поток на разработка.

  2. Приемането на Rust може да причини известна степен на проблеми със съвместимостта със съществуващите системи, което ще изисква рефакториране и промени.

  3. Приемането на Rust може да увеличи броя на разработчиците, които могат да допринасят за нашия проект, като привлече разработчици на Rust, които искат да работят по вълнуващи проекти.

  4. Приемането може да доведе до подобрена производителност, ефективност и безопасност в сравнение със съществуващите езици.

  5. Накрая приемането на Rust носи потенциалната полза от намаляване на уязвимостите в сигурността на нашите приложения.

Източник: тази страница е генерирана от ChatGPT, след което е редактирана за яснота и форма.