В Firefox 48 начнется интеграция компонентов на языке Rust
Разработчики Mozilla приступили к воплощению на практике озвученного в прошлом году плана по задействование в Firefox кода на языке Rust. В ближайшем выпуске Firefox 48, который ожидается 2 августа, кроме включения многопроцессного режима для ограниченного круга пользователей, в состав настольной редакции браузера впервые будет добавлен компонент на языке Rust. В версии для Android включение компонентов на Rust ожидается позднее.
Первый код на Rust задействован в подсистемах, связанных с обработкой мультимедийной информации. В частности, в состав включен написанный на языке Rust парсер для распаковки медиаконтейнеров в формате mp4. Поддержка компиляции компонентов на языке Rust встроена в систему сборки и сборочный инструментарий Firefox.
Язык Rust был основан в 2006 году Грейдоном Хоаре (Graydon Hoare) как альтернатива языку C++, предоставляющего средства для безопасной работы с памятью, избавляющие разработчика от необходимости манипулирования указателями и защищающие от таких уязвимостей, как обращение к области памяти после ее освобождения, разыменование нулевых указателей, выход за границы буфера и т. п. При этом, несмотря на автоматическое управление памятью, в Rust не применяется сборщик мусора и runtime, что позволяет использовать язык для системного программирования. Другим важным достоинством Rust является изначальная ориентация на организацию высокого параллелизма выполнения заданий.
В 2009 году к разработке Rust подключилась компания Mozilla, благодаря ресурсам которой язык доведен до состояния пригодного для применения в реальных проектах. Интерес Mozilla к Rust вызван в первую очередь желанием повысить безопасность Firefox и уйти об бесконечной череды исправления все новых и новых уязвимостей. Кроме того, при помощи Rust можно решить задачу распараллеливания операций с DOM (Document Object Model) и JavaScript - если для ускорения одновременной обработки разных страниц на многоядерных системах можно использовать многопроцессную модель, то обработка одной страницы остается однопоточной. Rust позволяет разбить код DOM и рендеринга на более мелкие подзадачи, которые могут выполняться параллельно и более эффективно использовать ресурсы многоядерных CPU.