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 есть кривая обучения, мы считаем, что преимущества его принятия перевешивают затраты и дают отличную возможность для дальнейшего роста и инноваций.

Последствия

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

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

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

  4. Принятие может привести к повышению производительности, эффективности и безопасности по сравнению с существующими языками.

  5. Наконец, принятие Rust несёт потенциальную выгоду в виде сокращения уязвимостей безопасности в наших приложениях.

Благодарность: эта страница создана ChatGPT, затем отредактирована для ясности и форматирования.