Краткая история Rust в Facebook

Краткаяисторияrustвfacebook

Facebook принимает Rust, одного из самых любимых и самые быстрорастущие языки программирования, доступные сегодня. В дополнение к привлечению новых талантов в свою команду Rust, Facebook объявил, что официально присоединяется к некоммерческая организация Rust Foundation . Вместе с другими участниками, включая Mozilla (создателей Rust), AWS, Microsoft и Google, Facebook будет работать над поддержанием и развитием экосистемы с открытым исходным кодом языка.

Для разработчиков Rust предлагает производительность более старых языков, таких как C ++, с большим упором на безопасность кода. Сегодня сотни разработчиков в Facebook пишут миллионы строк кода на Rust. И хотя очевидно, что Facebook все больше инвестирует в будущее языка, важно понимать, как мы выросли к этому моменту.

2016 – 2017: Раннее использование в системе управления версиями

Наша самая старая кодовая база Rust датируется 2017, когда скорость изменения исходного кода в монорепозитории Facebook начала посягать на максимальную скорость фиксации, которую Mercurial инструмент управления исходным кодом может не отставать от. В ответ на это команда управления исходным кодом Facebook запустила проект перезаписи под названием Mononoke с целью увеличения скорости фиксации Mercurial на несколько дополнительных порядков для обслуживания тысяч разработчиков и автоматизированных процессов Facebook.

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

Джереми Фитцхардинг, инженер-программист из отдела безопасности производства в Facebook, описывает этот опыт в лекции на RustConf 2019 .

Mononoke послужил отличным испытательным полигоном, потому что он, естественно, был достаточно изолирован от других систем Facebook. Пока Mononoke может использовать протокол Mercurial для взаимодействия с клиентскими службами и протокол Thrift для связи с некоторыми системами хранения, выбор Rust не повлияет ни на что, кроме работы команды Source Control.

Команда Source Control была готова и могла поддерживать себя с помощью любых инструментов и инфраструктуры, специфичных для Rust. Все прошло хорошо, и с тех пор, как 2019, Mononoke был производственной частью нашего монорепо. , успешно масштабируется с годами.

2017 – 2019: Кривая усыновления

С Мононоке как доказательством того, что он был жизнеспособным и живым в соответствии с его утверждениями, со временем другие проекты также рассмотрели и приняли Rust. Сначала это были, как правило, проекты инструментальных средств разработчика, которым не нужно было интегрироваться с более широкой сервисной инфраструктурой, или небольшие сервисы / демоны, которые могли выполнять свою работу с помощью всего лишь нескольких рукописных оболочек вокруг некоторых клиентских библиотек C ++.

Многие инженеры Facebook, принявшие Rust, пришли из Python и Javascript. Они оценили сочетание высокой производительности Rust с обнаружением ошибок во время компиляции. По мере того, как внутри компании распространялось все больше историй успеха, таких как повышение производительности на два-четыре порядка, интерес к использованию Rust для кода серверных сервисов рос, а также к изучению его использования в мобильных приложениях.

2019 – 2021: Некоторая специальная поддержка Rust

Из 2017 через 2019, группу управления версиями стал неофициальной командой поддержки Rust в Facebook. Но к 2020 количество разработчиков Rust в Facebook выросло в геометрической прогрессии и превысило 388.

Как один из ярких примеров такого роста, Rust является ведущим языком в разработке Diem (ранее Libra) блокчейн, который под надзором независимой ассоциации Diem Association. Facebook через свой цифровой кошелек Novi является членом ассоциации Diem. Блокчейн Diem в основном написан на Rust, охватывающий 100 процент открытого кода кодовая база . Кроме того, Перемещение , новый безопасный язык программирования, который будет использоваться для блокчейна, был разработан с помощью Rust.

Учитывая это роста потребности, неполный рабочий день команды Source Control не хватило для поддержки количества команд, которые могли выиграть.

Мы создали небольшую команду разработчиков Rust, которая уделяет внимание инструментам и задачам интеграции, таким как создание механизм для использования экосистемы реестра пакетов с открытым исходным кодом языка в производственных сборках, не относящихся к Cargo. Команда сформировала центральную точку соприкосновения для разработчиков Rust во всей компании, чтобы разблокировать варианты использования, расставить приоритеты для краткосрочного опыта разработчиков, улучшить основные библиотеки и в целом обеспечить успех молодой кодовой базы Rust, когда она превысила отметку в миллион строк.

Вперед (2021 и далее)

В конце 2021, мы подтвердили свои обязательства, запустив команду Rust в нашей организации языков программирования , та же организация, которая отвечает за работу со стандартами C ++ и набор инструментов Facebook.

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

В краткосрочной перспективе эта новая команда сосредоточена на четырех областях:

  • Поддержка внутренних пользователей с точки зрения языка и набора инструментов: Это включает развертывание инструментальной цепочки, сквозные миграции, проверка / аудит кода, передовые практики и работа в качестве контактного лица по вопросам языка и инструментальной цепочки.
  • Положительный вклад в сообщество за пределами Facebook: Команда выполняет обзоры кода стандартной библиотеки и компилятора и предоставляет ресурсы разработчикам в соответствии с приоритетами сообщества Rust.
  • EA sy и безопасное взаимодействие Rust с C ++: У нас есть огромное количество необходимого кода C ++. для связи с серверными системами, на которых построены сервисы. Нам нужно, чтобы разработчики могли безопасно и легко использовать эти библиотеки, не жертвуя преимуществами, которые предлагает Rust. И наоборот, если мы хотим видеть компоненты Rust, интегрированные с нашими более крупными двоичными файлами C ++, нам нужна интеллектуальная совместимость во время выполнения в асинхронном коде. Серверы Facebook сильно распределены и многопоточны. Задачи Rust должны хорошо работать в пуле потоков C ++ и безопасно совместно использовать примитивы синхронизации и ресурсы ввода-вывода. Мы уже проделали большую работу в области C ++, улучшая асинхронность, поддержав и быстро приняв C ++ 22 сопрограмм. Внедрение Rust в игру будет расширением этого и будет основываться на отличной работе, уже выполняемой в стеке асинхронных библиотек Rust.
  • Активная поддержка и взаимодействие с Ржавчина Фундамент: Facebook является приверженцем сообщества Rust и расширяет его разработка на Rust с 2017. Мы пошли еще дальше, присоединившись к Rust Foundation как Платиновый member , где мы надеемся помочь продолжить продвижение и внедрение активным и действенным способом.

Путь Rust в Facebook еще далек от завершения. Эта команда небольшая, но со временем она будет расти по мере необходимости поддержки. Мы с воодушевлением и оптимизмом смотрим на траекторию Rust в Facebook и во всей отрасли. Наши планы в отношении работы внутри Facebook, участия в проектах с открытым исходным кодом и более ориентированной на сообщества работы будут развиваться в течение .