Запись архитектурного решения: язык программирования Rust
Номер решения: AR-001
Название решения: принятие языка программирования Rust
Дата: 1 декабря 2021 г.
Состояние: принято
Постановка проблемы
По мере продолжения разработки программных приложений мы заметили, что всё труднее смягчать потенциальные уязвимости безопасности и предотвращать ошибки времени выполнения. С существующими языками программирования, такими как C и C++, мы продолжаем сталкиваться с проблемами вроде переполнения буфера, утечек памяти и неопределённого поведения, приводящих к сбоям приложений. Нам нужен язык программирования, гарантирующий безопасность памяти и достаточно эффективный для поддержки приложений, критичных к производительности.
Соображения
Несколько языков программирования разработаны для решения существующих проблем. Среди них язык программирования Rust привлёк значительное внимание сообщества разработчиков благодаря своим уникальным особенностям проектирования. Соображения включают:
Безопасность памяти и защищённость
Производительность и эффективность
Поддержка сообщества и принятие
Кривая обучения
Инструменты и экосистема
Совместимость с существующими программными системами.
Ограничения
Принятие нового языка программирования требует переобучения разработчиков, что занимает время и ресурсы. Интеграция языка в существующий рабочий процесс разработки может оказаться трудной. Мы должны обеспечить совместимость с существующими системами и избегать несовместимых изменений для сохранения непрерывности.
Реализация
Наша команда разработки пройдёт обучение, чтобы изучить язык программирования Rust и ознакомиться с ним.
Мы создадим новый проект на Rust в пробном порядке, чтобы оценить его совместимость и пригодность для наших целей разработки.
Мы будем постепенно переносить существующие системы, написанные на C и C++, на Rust.
Мы будем сотрудничать с сообществом Rust, чтобы изучить доступные инструменты и библиотеки, которые могут улучшить наш рабочий процесс разработки.
Мы будем регулярно отслеживать производительность Rust и сравнивать её с производительностью существующих языков программирования.
Мы примем долгосрочный подход, уравновешивающий затраты на обучение, интеграцию и потенциальные выгоды от использования Rust.
Обоснование
Мы приняли Rust из-за его уникальных особенностей, призванных обеспечить гарантии безопасности памяти и защищённости при сохранении производительности и эффективности. Надёжная система типов Rust, проверка заимствований (borrow checker) и концепции безопасности памяти делают его очень подходящим для разработки приложений, критичных к производительности и безопасности. Кроме того, у Rust значительное сообщество разработчиков, что даёт нам доступ к широкому спектру инструментов, библиотек и экосистеме, поддерживающей наш рабочий процесс разработки. Хотя у Rust есть кривая обучения, мы считаем, что преимущества его принятия перевешивают затраты и дают отличную возможность для дальнейшего роста и инноваций.
Последствия
Принятие Rust потребует значительных вложений времени и ресурсов для обучения разработчиков и интеграции языка в существующий рабочий процесс разработки.
Принятие Rust может вызвать некоторые проблемы совместимости с существующими системами, требующие рефакторинга и модификаций.
Принятие Rust может увеличить число разработчиков, способных вносить вклад в наш проект, привлекая разработчиков Rust, которые хотят работать над увлекательными проектами.
Принятие может привести к повышению производительности, эффективности и безопасности по сравнению с существующими языками.
Наконец, принятие Rust несёт потенциальную выгоду в виде сокращения уязвимостей безопасности в наших приложениях.