Rust (язык программирования)


Rust - это многопарадигмальный язык программирования, разработанный для обеспечения производительности и безопасности , особенно безопасного параллелизма . [17] [18] Rust синтаксически похож на C ++ , [19], но может гарантировать безопасность памяти , используя средство проверки заимствований для проверки ссылок . [20] Rust обеспечивает безопасность памяти без сборки мусора , а подсчет ссылок необязателен. [21] [22]

Первоначально Rust был разработан Грейдоном Хоаром из Mozilla Research при участии Дэйва Хермана, Брендана Эйха и других. [23] [24] Разработчики усовершенствовали язык при написании макета сервопривода или движка браузера , [25] и компилятора Rust . Он получил все большее распространение в промышленности, и Microsoft экспериментирует с языком для безопасных и критически важных для безопасности программных компонентов. [26] [27]

Rust был признан «самым любимым языком программирования» в опросе разработчиков Stack Overflow ежегодно с 2016 года. [28]

Пример компиляции программы на Rust

Язык вырос из личного проекта, начатого в 2006 году сотрудником Mozilla Грейдоном Хоаром [18], который заявил, что проект, возможно, был назван в честь семейства грибов ржавчины . [29] Mozilla начал спонсировать проект в 2009 году [18] и объявил его в 2010 году [30] [31] В том же году, работа перешла от первоначального компилятора (написано в OCaml ) в LLVM - самостоятельной хостинг компилятора написан в Rust. [32] Названный rustc , он успешно скомпилировался в 2011 году. [33]

Первый пронумерованный пре-альфа-выпуск компилятора Rust состоялся в январе 2012 года. [34] Rust 1.0, первый стабильный выпуск, был выпущен 15 мая 2015 года. [35] [36] После 1.0 стабильные промежуточные выпуски поставляются каждые шесть недель, в то время как функции разрабатываются в ночном Rust с ежедневными выпусками, а затем тестируются с бета-выпусками, которые длятся шесть недель. [37] [38] Каждые 2–3 года выпускается новое "издание" Rust. Это делается для того, чтобы обеспечить легкую точку отсчета для изменений из-за частого характера графика выпуска Rust's Train, а также предоставить окно для внесения критических изменений. Редакции в значительной степени совместимы. [39]

Помимо обычной статической типизации , до версии 0.4 Rust также поддерживал состояния типов . Система typestate смоделировала утверждения до и после программных операторов с помощью специального checkоператора. Расхождения могут быть обнаружены во время компиляции , а не во время выполнения , как это может быть в случае утверждений в коде C или C ++. Концепция состояния типов не была уникальной для Rust, поскольку она была впервые представлена ​​на языке NIL . [40] Типовые состояния были удалены, потому что на практике они мало использовались, [41] хотя те же функции могут быть достигнуты за счет использования семантики перемещения Rust . [42]

Стиль объектной системы значительно изменился в версиях 0.2, 0.3 и 0.4 Rust. Версия 0.2 впервые представила классы , а версия 0.3 добавила несколько функций, включая деструкторы и полиморфизм за счет использования интерфейсов. В Rust 0.4 черты были добавлены как средство обеспечения наследования ; интерфейсы были объединены с трейтами и удалены как отдельная функция. Классы также были удалены и заменены комбинацией реализаций и структурированных типов . [ необходима цитата ]

Начиная с Rust 0.9 и заканчивая Rust 0.11, в Rust было два встроенных типа указателей : ~и @, упрощая модель основной памяти . Он повторно реализовал эти типы указателей в стандартной библиотеке как Boxи (теперь они удалены) Gc.

В январе 2014 года, перед первым стабильным выпуском Rust 1.0, главный редактор Dr. Dobb's Эндрю Бинсток прокомментировал шансы Rust стать конкурентом C ++ и других перспективных языков D , Go. , и Ним (затем Нимрод). По словам Бинстока, хотя Rust «широко рассматривался как удивительно элегантный язык», его внедрение замедлилось, поскольку он постоянно менялся между версиями. [43]

Rust имеет интерфейс внешних функций (FFI), который может быть вызван, например, из языка C, и может вызывать C. Хотя вызов C ++ исторически был проблематичным (из любого языка), Rust имеет библиотеку CXX, позволяющую вызывать C ++ или из него. , и «CXX имеет нулевые или незначительные накладные расходы». [44]

В августе 2020 года Mozilla уволила 250 из 1000 своих сотрудников по всему миру в рамках корпоративной реструктуризации, вызванной долгосрочным воздействием пандемии COVID-19 . [45] [46] Среди уволенных была большая часть команды Rust, [47] [ нужен лучший источник ], в то время как команда Servo была полностью расформирована. [48] [ нужен лучший источник ] Это событие вызвало обеспокоенность по поводу будущего Rust. [49]

На следующей неделе команда ядра Rust признала серьезные последствия увольнений и объявила, что планы по созданию фонда Rust находятся в стадии реализации. Первой целью фонда было бы стать владельцем всех товарных знаков и доменных имен , а также взять на себя финансовую ответственность за их расходы. [50]

8 февраля 2021 года пять компаний-учредителей ( AWS , Huawei , Google , Microsoft и Mozilla) официально объявили о создании Rust Foundation . [51] [52]

6 апреля 2021 года Google объявил о поддержке Rust в рамках Android Open Source Project в качестве альтернативы C / C ++. [53]

Вот простое "Hello, World!" программа написана на Rust. println! Макрос выводит сообщение на стандартный вывод .

fn  main () {  println! ( «Привет, мир!» );}

Конкретный синтаксис ржавчины похож на C и C ++ , с блоками кода , ограниченным фигурными скобками , и управление потоком ключевыми слов , таким как if, else, while, и for, хотя конкретный синтаксис для определения функций больше похож на Pascal . Однако не все ключевые слова C или C ++ реализованы, и некоторые функции Rust (например, использование ключевого слова matchдля сопоставления с образцом ) будут менее знакомы тем, кто разбирается в этих языках. Несмотря на внешнее сходство с C и C ++, синтаксис Rust в более глубоком смысле ближе к синтаксису семейства языков ML и языку Haskell . Почти каждая часть тела функции является выражением , [54] операторы потока даже управления. Например, обычное ifвыражение также заменяет тернарное условное выражение языка Си , идиому, используемую АЛГОЛОМ 60 . Как и в Лиспе , функция не должна заканчиваться returnвыражением: в этом случае, если точка с запятой опущена, последнее выражение в функции создает возвращаемое значение , как показано в следующей рекурсивной реализации факториальной функции:

fn  факториал ( i : u64 )  -> u64  { match i {   0 => 1 ,   n => n * факториал ( n - 1 )     }}

Следующая итеративная реализация использует ..=оператор для создания включающего диапазона:

fn  факториал ( i : u64 )  -> u64  { ( 2 .. = i ). продукт ()}

"> Воспроизвести медиа
Презентация Rust Эмили Данэм из команды Mozilla Rust ( конференция linux.conf.au , Хобарт, 2017)

Ржавчина предназначена быть языком для очень одновременно и очень безопасных систем , [55] и программирование в целом , то есть создание и поддержание границ , которые сохраняют целостность большой системы. [56] Это привело к набору функций с упором на безопасность, контроль структуры памяти и параллелизм .

Безопасность памяти

Rust разработан для обеспечения безопасности памяти и не допускает нулевых указателей , висячих указателей или гонок данных в безопасном коде. [57] [58] [59] Значения данных могут быть инициализированы только с помощью фиксированного набора форм, каждая из которых требует, чтобы их входные данные были уже инициализированы. [60] Чтобы воспроизвести функцию на других языках указателей, которые либо действительны, либо NULL, например, в связанных списках или структурах данных двоичного дерева , основная библиотека Rust предоставляет тип параметра , который можно использовать для проверки того, имеет ли указатель значение или . [58] Rust также вводит дополнительный синтаксис для управления временем жизни , и компилятор решает это с помощью своей программы проверки заимствований . Небезопасный код, который может нарушить некоторые из этих ограничений, может быть написан с использованием ключевого слова языка . [20]SomeNoneunsafe

Управление памятью

Rust не использует автоматизированную систему сбора мусора . Вместо этого память и другие ресурсы управляются посредством соглашения об инициализации получения ресурсов (RAII) [61] с дополнительным подсчетом ссылок . Rust обеспечивает детерминированное управление ресурсами с очень низкими накладными расходами . [ необходима цитата ] Rust также поддерживает распределение значений в стеке и не выполняет неявную упаковку .

Существует концепция ссылок (с использованием &символа), которая не включает подсчет ссылок во время выполнения. Безопасность использования таких указателей проверяется во время компиляции программой проверки заимствований, предотвращая висячие указатели и другие формы неопределенного поведения . Кроме того, система типов Rust отделяет общие неизменяемые указатели формы &Tот уникальных изменяемых указателей формы &mut T. Однако изменяемый указатель может быть приведен к неизменному указателю, но не наоборот.

Владение

В Rust есть система владения, в которой у всех значений есть уникальный владелец, а объем значения такой же, как и у владельца. [62] [63] Значения могут передаваться по неизменяемой ссылке, с использованием &T, по изменяемой ссылке, с использованием &mut Tили по значению с использованием T. Всегда может быть несколько неизменяемых ссылок или одна изменяемая ссылка (неявная блокировка чтения-записи ). Компилятор Rust применяет эти правила во время компиляции, а также проверяет правильность всех ссылок.

Типы и полиморфизм

Система типов поддерживает механизм, аналогичный классам типов , называемый « чертами », вдохновленный непосредственно языком Haskell . Это средство для специального полиморфизма , достигаемого путем добавления ограничений к объявлениям переменных типа. Другие возможности Haskell, такие как высший полиморфизм , пока не поддерживаются.

В Rust есть функция вывода типа для переменных, объявленных с помощью ключевого слова let . Такие переменные не требуют первоначального присвоения значения для определения их типа. Ошибка времени компиляции возникает, если какая-либо ветвь кода оставляет переменную без присваивания. [64] Переменные, назначенные несколько раз, должны быть помечены ключевым словом mut.

Функции могут иметь общие параметры , которые обычно требуют, чтобы универсальный тип реализовывал определенную черту или свойства. В такой функции универсальное значение можно использовать только через эти свойства. Это означает, что типовая функция может быть проверена, как только она будет определена. Это контрастирует с шаблонами C ++ , которые по сути своей являются типизированными и не могут быть проверены до тех пор, пока не будут созданы конкретные типы. Концепции C ++ решают ту же проблему и являются частью C ++ 20 , хотя они по-прежнему не позволяют компилятору C ++ проверять тип шаблона без конкретного экземпляра.

Однако реализация дженериков Rust аналогична типичной реализации шаблонов C ++: для каждого экземпляра создается отдельная копия кода. Это называется мономорфизацией и контрастирует со схемой стирания типов , обычно используемой в Java и Haskell. Стирание типов также доступно в Rust с помощью ключевого слова dyn. Преимущество мономорфизации - это оптимизация кода для каждого конкретного случая использования; недостатком является увеличенное время компиляции и размер результирующих двоичных файлов.

Объектная система в Rust основана на реализациях, чертах и структурированных типах. Реализации выполняют роль, аналогичную роли классов в других языках, и определяются с помощью ключевого слова impl. Наследование и полиморфизм обеспечиваются признаками; они позволяют определять методы и смешивать их с реализациями. Структурированные типы используются для определения полей. Реализации и трейты не могут определять сами поля, и только трейты могут обеспечивать наследование. Среди других преимуществ, это предотвращает проблемы с бриллиантом из множественного наследования , как и в C ++. Другими словами, Rust поддерживает наследование интерфейсов, но заменяет наследование реализации композицией ; см. композицию над наследованием .

Rust включает в себя большое количество компонентов, которые расширяют набор функций Rust и упрощают разработку на Rust. Установка компонентов обычно управляется rustup, установщиком инструментальной цепочки Rust, разработанным проектом Rust. [65]

Груз

Cargo - это система сборки и менеджер пакетов Rust . Cargo обрабатывает (среди прочего) строительный код, загрузку зависимостей и построение зависимостей.

Зависимости для пакета Rust указаны в файле Cargo. toml вместе с требованиями к версии , сообщая Cargo, какие версии зависимости совместимы с пакетом. По умолчанию Cargo получает свои зависимости из пользовательского реестра crates.io, но репозитории и пакеты Git в локальной файловой системе также могут быть указаны как зависимости. [66]

Cargo также действует как оболочка для clippy и других компонентов Rust, чтобы облегчить вызов этих инструментов. Это требует, чтобы проекты следовали определенной структуре каталогов, «чтобы упростить работу с пакетами Rust». [67]

Rustfmt

Rustfmt - это программа для форматирования кода для Rust. Он принимает исходный код Rust в качестве входных данных и изменяет пробелы и отступы для создания отформатированного кода в соответствии с руководством по стилю Rust . [68] Rustfmt также может проверить, правильно ли отформатирован вход. [69]

Clippy

Clippy - это встроенный в Rust инструмент линтинга для улучшения корректности, производительности и читаемости кода Rust. По состоянию на 2021 год в Clippy действует более 450 правил [70], которые можно просматривать в Интернете и фильтровать по категориям. [71] Некоторые правила по умолчанию отключены.

СБН

RLS - это языковой сервер, который предоставляет интегрированным средам разработки и текстовым редакторам дополнительную информацию о проекте Rust. Он обеспечивает проверку линтинга через Clippy , форматирование через Rustfmt, автоматическое завершение кода через Racer и другие функции. [72] Развитие Racer было замедлено в пользу анализатора ржавчины . [73]

Можно расширить язык Rust с помощью процедурного макро-механизма. [74]

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

Процедурные макросы бывают трех видов:

  • Функциональные макросы custom!(...)
  • Создать макросы #[derive(CustomDerive)]
  • Макросы атрибутов #[CustomAttribute]

println!Макро является примером функции, как макро и serde_derive[75] является широко используемым библиотека для генерации кода для чтения и записи данных в различных форматах , таких как JSON . Атрибут макросов обычно используются для языка привязок , таких как extendrбиблиотеки на наличие ржавчины привязки к R . [76]

Следующий код показывает использование Serialize, Deserializeи Debugполучить процедурные макросы для выполнения чтения и записи в формате JSON, а также возможность форматирования структуры для отладки.

используйте serde :: { Serialize , Deserialize };  # [derive (сериализация, десериализация, отладка)]struct  Point {  х : i32 , у : i32 ,}fn  main () {  пусть точка = Точка { x : 1 , y : 2 };        let serialized = serde_json :: to_string ( & point ). разворачивать ();    println! ( "сериализованный = {}" , сериализованный );  let десериализовано : Point = serde_json :: from_str ( & serialized ). разворачивать ();    println! ( "deserialized = {:?}" , десериализовано ); }

Rust стремится «быть таким же эффективным и переносимым, как идиоматический C ++, без ущерба для безопасности». [77] Поскольку Rust использует LLVM, любые улучшения производительности LLVM также переносятся на Rust. [78]

A bright orange crab icon
Некоторые пользователи Rust называют себя Rustaceans (каламбур от « ракообразных ») и используют Феррис в качестве своего неофициального талисмана. [79]

Rust был третьим по популярности языком программирования в ежегодном опросе Stack Overflow за 2015 год [80] и занял первое место в 2016–2020 годах. [81]

веб-браузер

Веб - браузер и несколько связанных с ним компонентов записываются в Русте. Firefox , [82] , например, состоят из двух проектов , написанных на Русте, включая Servo , с параллельным web - браузер двигателя [83] , разработанный Mozilla в сотрудничестве с Samsung [84] и Quantum , который состоит из нескольких субов проектов, для улучшения в Gecko web - браузер , двигатель , который также разработан Mozilla. [85]

Операционные системы

Операционные системы и компоненты уровня ОС, написанные на Rust, включают:

  • Redox : «полноценная Unix-подобная операционная система», включающая микроядро [86]
  • Stratis : менеджер файловой системы для Fedora [87] и RHEL 8 [88]
  • Google Fuchsia : операционная система, основанная на возможностях

Другой

  • exa , "современная замена ls "
  • Microsoft Azure IoT Edge, платформа, используемая для запуска служб Azure и искусственного интеллекта на устройствах IoT, имеет компоненты, реализованные в Rust [89]
  • OpenDNS использует Rust в двух своих компонентах [90] [91] [92]
  • Tor , анонимная сеть , изначально написанная на C, экспериментирует с переносом на Rust для своих функций безопасности [93] [94]
  • Deno , безопасная среда выполнения для JavaScript и TypeScript , построена на V8 , Rust и Tokio [95]
  • Prisma , ORM для JavaScript , TypeScript и Go , недавно перенесла свой механизм запросов на Rust для своей версии 2. [96]
  • Discord , чат-сервис, ориентированный на геймеров, использует Rust для части своей серверной части, а также для кодирования видео на стороне клиента [97]
  • TerminusDB , база данных графов с открытым исходным кодом, предназначенная для совместного создания и обработки графов знаний [98]
  • Ruffle , SWF- эмулятор с открытым исходным кодом, написанный на Rust [99]

Rust Фонд является некоммерческой организацией , членство включено в Делавэр , США , с основными целями поддержки сохранения и развитий языка, культивировать член команды Rust проекта и сообщество пользователей, управление технической инфраструктуры , лежащую в основе развития Rust , а также управление торговой маркой Rust.

Он был основан 8 февраля 2021 года пятью корпоративными членами-учредителями (Amazon Web Services, Huawei, Google, Microsoft и Mozilla). [100]

Правление фонда возглавляет Шейн Миллер. [101] Временным исполнительным директором является Эшли Уильямс.

Конференции по Rust включают:

  • RustConf: ежегодная конференция в Портленде, штат Орегон . Проводится ежегодно с 2016 г. (кроме 2020 г. из-за пандемии COVID-19 ). [102]
  • Rust Belt Rust: конференция #rustlang в Rust Belt [103]
  • RustFest: конференция @rustlang в Европе [104]
  • РастКон Азия
  • Rust LATAM
  • Oxidize Global [105]

  • Сравнение языков программирования

  1. ^ "Ржавый язык" . Архивировано 6 сентября 2020 года . Проверено 9 сентября 2020 года . Mozilla была первым инвестором Rust и продолжает спонсировать работу над проектом с открытым исходным кодом. Mozilla также использует Rust во многих своих основных инициативах, включая Servo и ключевые части Firefox.
  2. ^ «Представляем Rust 1.53.0» .
  3. ^ «Поддержка платформы Rust» . Ржавая кузница . Архивировано 13 февраля 2018 года . Проверено 19 мая 2019 года .
  4. ^ «Часто задаваемые вопросы» . Ржавчина . Архивировано 6 августа 2020 года . Проверено 14 мая 2019 года .
  5. ^ «Порты OpenBSD» . Архивировано 11 апреля 2019 года . Проверено 3 апреля 2018 года .
  6. ^ «Создание и развертывание библиотеки Rust на iOS» . 6 сентября 2017 года. Архивировано 11 января 2019 года . Проверено 11 января 2019 года .
  7. ^ Б с д е е г ч я J к л м «Ссылка на Rust: Приложение: Влияния» . Архивировано 26 января 2019 года . Проверено 11 ноября 2018 года .
  8. ^ «Исследование заметок: система типов» . 1 февраля 2015 года. Архивировано 17 февраля 2019 года . Проверено 25 марта 2015 года .
  9. ^ «RFC для выражения 'if let'» . Архивировано 4 марта 2016 года . Проверено 4 декабря 2014 года .
  10. ^ "Оптимизация команд?" . 26 июня 2014 года. Архивировано 10 июля 2019 года . Проверено 10 декабря 2014 года .
  11. ^ «Идрис - Типы уникальности» . Архивировано 21 ноября 2018 года . Проверено 20 ноября 2018 года .
  12. ^ Джалоян, Жорж-Аксель (19 октября 2017 г.). «Безопасные указатели в СПАРК 2014». arXiv : 1710.07047 . Bibcode : 2017arXiv171007047J . Цитировать журнал требует |journal=( помощь )
  13. ^ Латтнер, Крис. "Домашняя страница Криса Латтнера" . Nondot.org . Архивировано 25 декабря 2018 года . Проверено 14 мая 2019 года .
  14. ^ «Microsoft открывает на GitHub язык программирования Project Verona, вдохновленный Rust» . Архивировано 17 января 2020 года . Проверено 17 января 2020 года .
  15. ^ «PHP RFC: более короткий синтаксис атрибутов» . 3 июня, 2020. архивации с оригинала на 7 марта 2021 года . Проверено 17 марта 2021 года .
  16. ^ Хоар, Грейдон (28 декабря 2016 г.). «Ржавчина - это в первую очередь безопасность» . Грейдон2 . Dreamwidth Studios. Архивировано 2 мая 2019 года . Проверено 13 мая 2019 года .
  17. ^ а б в «FAQ - Проект Rust» . Rust-lang.org . Архивировано из оригинала 9 июня 2016 года . Проверено 27 июня 2019 года .
  18. ^ «Сравнение Rust и C ++» . Архивировано 20 ноября 2018 года . Проверено 20 ноября 2018 года .
  19. ^ а б «Небезопасная ржавчина» . Архивировано 14 октября 2020 года . Проверено 17 октября, 2020 .
  20. ^ «Бесстрашная безопасность: безопасность памяти» . Архивировано 8 ноября 2020 года . Проверено 4 ноября 2020 года .
  21. ^ «Rc , интеллектуальный указатель с подсчетом ссылок» . Архивировано 11 ноября 2020 года . Проверено 4 ноября 2020 года .
  22. ^ Ноэль (8 июля 2010 г.). «Ржавый язык» . Лямбда Конечная. Архивировано 23 ноября 2012 года . Проверено 30 октября 2010 года .
  23. ^ "Соучастники ржавчины / ржавчины" . GitHub . Архивировано 26 мая 2020 года . Проверено 12 октября 2018 года .
  24. ^ Брайт, Питер (3 апреля 2013 г.). «Samsung объединяется с Mozilla для создания движка браузера для многоядерных машин» . Ars Technica . Архивировано 16 декабря 2016 года . Проверено 4 апреля 2013 года .
  25. ^ «Почему Rust для безопасного системного программирования» . Архивировано 22 июля 2019 года . Проверено 22 июля 2019 года .
  26. ^ «Как Microsoft внедряет Rust» . 6 августа, 2020. архивации с оригинала на 10 августа 2020 года . Проверено 7 августа 2020 года .
  27. ^ «Опрос разработчиков Stack Overflow 2020» . Переполнение стека . Архивировано 29 января 2021 года . Проверено 31 марта 2021 года .
  28. ^ Хоар, Грейдон (7 июня 2014 г.). «Интернет-археология: окончательный и исчерпывающий источник того, почему Rust назван« Rust » » . Reddit.com . Архивировано 14 июля 2016 года . Проверено 3 ноября 2016 года .
  29. ^ «Будущее время» . 29 апреля 2011 года. Архивировано 18 сентября 2012 года . Проверено 6 февраля 2012 года .
  30. ^ Хоар, Грейдон (7 июля 2010 г.). Сервопривод проекта (PDF) . Ежегодный саммит Mozilla 2010. Уистлер, Канада. Архивировано 11 июля 2017 года (PDF) . Проверено 22 февраля 2017 года .
  31. ^ Хоар, Грейдон (2 октября 2010 г.). «Ржавчина Прогресс» . Архивировано из оригинального 15 августа 2014 года . Проверено 30 октября 2010 года .
  32. ^ Хоар, Грейдон (20 апреля 2011 г.). "[rust-dev] stage1 / rustc builds" . Архивировано 20 июля 2011 года . Проверено 20 апреля 2011 года .
  33. ^ катаморфизм (20 января 2012 г.). «Mozilla и сообщество Rust выпускают Rust 0.1 (строго типизированный язык системного программирования с акцентом на безопасность памяти и параллелизм)» . Архивировано 24 января 2012 года . Проверено 6 февраля 2012 года .
  34. ^ «История версий» . Архивировано 15 мая 2015 года . Проверено 1 января 2017 года .
  35. ^ Команда ядра Rust (15 мая 2015 г.). «Анонсируем Rust 1.0» . Архивировано 15 мая 2015 года . Проверено 11 декабря 2015 года .
  36. ^ «Составление расписания поездов» . Архивировано 2 января 2017 года . Проверено 1 января 2017 года .
  37. ^ «G - Как создается Rust и« Nightly Rust »- язык программирования Rust» . doc.rust-lang.org . Проверено 22 мая 2021 года .
  38. ^ «Что такое редакции? - Руководство по редакциям» . doc.rust-lang.org . Проверено 22 мая 2021 года .
  39. ^ Стром, Роберт Э .; Йемини, Шаула (1986). «Typestate: концепция языка программирования для повышения надежности программного обеспечения» (PDF) . IEEE Transactions по разработке программного обеспечения : 157–171. DOI : 10.1109 / TSE.1986.6312929 . ISSN  0098-5589 . S2CID  15575346 . Архивировано 14 июля 2010 года (PDF) . Проверено 14 ноября 2010 года .
  40. ^ Уолтон, Патрик (26 декабря 2012 г.). "Typestate мертв, да здравствует Typestate!" . GitHub . Архивировано 23 февраля 2018 года . Проверено 3 ноября 2016 года .
  41. ^ Биффл, Клифф (5 июня 2019 г.). "Типичный образец состояния в ржавчине" . Архивировано 6 февраля 2021 года . Проверено 1 февраля 2021 года .
  42. ^ Бинсток, Эндрю. «Взлет и падение языков в 2013 году» . Доктора Добба . Архивировано 7 августа 2016 года . Проверено 11 декабря 2015 года .
  43. ^ «Безопасное взаимодействие между Rust и C ++ с CXX» . InfoQ . 6 декабря 2020 . Проверено 3 января 2021 года .
  44. ^ Чимпану, Каталин (11 августа 2020 г.). «Mozilla увольняет 250 сотрудников, в то время как она переориентируется на коммерческие продукты» . ZDNet . Проверено 2 декабря 2020 года .
  45. ^ Купер, Дэниел (11 августа 2020 г.). «Mozilla уволила 250 сотрудников из-за пандемии» . Engadget . Архивировано 13 декабря 2020 года . Проверено 2 декабря 2020 года .
  46. ^ @tschneidereit (12 августа 2020 г.). «Большая часть команды, которой я управлял, была частью увольнения Mozilla во вторник. Эта команда была командой Mozilla Rust и командой Mozilla Wasmtime. Я думал, что знаю, как говорить об этом сейчас, но я не знаю. Это душераздирающее, непонятное и ошеломляющее воздействие » (твит) . Проверено 2 декабря 2020 г. - через Twitter .
  47. ^ @asajeffrey (11 августа 2020 г.). «Mozilla закрывает команду, в которой я работаю, поэтому я один из многих людей, которые сейчас задаются вопросом, каким будет следующий концерт. Это была дикая поездка!» (Твитнуть) . Проверено 2 декабря 2020 г. - через Twitter .
  48. ^ Колаковски, Ник (27 августа 2020 г.). "Проблемы с Rust после массовых увольнений Mozilla?" . Игральные кости . Архивировано 24 ноября 2020 года . Проверено 2 декабря 2020 года .
  49. ^ «Закладывая фундамент для будущего Rust» . Блог Rust . 18 августа, 2020. архивации с оригинала на 2 декабря 2020 года . Проверено 2 декабря 2020 года .
  50. ^ «Ржавчина» . Foundation.rust-lang.org . 8 февраля 2021 года. Архивировано 9 февраля 2021 года . Проверено 9 февраля 2021 года .
  51. ^ «Mozilla приветствует Rust Foundation» . Блог Mozilla . 9 февраля 2021 года. Архивировано 8 февраля 2021 года . Проверено 9 февраля 2021 года .
  52. ^ Амадео, Рон (7 апреля 2021 г.). «Google сейчас пишет низкоуровневый код Android на Rust» . Ars Technica . Архивировано 8 апреля 2021 года . Проверено 8 апреля 2021 года .
  53. ^ "ржавчина / SRC / грамматика / парсер-lalr.y" . 23 мая 2017 года . Проверено 23 мая 2017 года .
  54. ^ Аврам, Авель (3 августа 2012 г.). «Интервью о Rust, языке системного программирования, разработанном Mozilla» . InfoQ. Архивировано 24 июля 2013 года . Проверено 17 августа 2013 года .
  55. ^ «Debian - Подробная информация о пакете rustc в sid» . packages.debian.org . Архивировано 22 февраля 2017 года . Проверено 21 февраля 2017 года .
  56. ^ Розенблатт, Сет (3 апреля 2013 г.). «Samsung присоединяется к поискам Rust Mozilla» . Архивировано 4 апреля 2013 года . Проверено 5 апреля 2013 года .
  57. ^ а б Браун, Нил (17 апреля 2013 г.). «Вкус ржавчины» . Архивировано 26 апреля 2013 года . Проверено 25 апреля 2013 года .
  58. ^ «Расы - Растономикон» . doc.rust-lang.org . Архивировано 10 июля 2017 года . Проверено 3 июля 2017 года .
  59. ^ "Часто задаваемые вопросы о языке Rust" . static.rust-lang.org . 2015. Архивировано из оригинала 20 апреля 2015 года . Проверено 24 апреля 2017 года .
  60. ^ "РАИИ - пример ржавчины" . doc.rust-lang.org . Архивировано 21 апреля 2019 года . Проверено 22 ноября 2020 года .
  61. ^ Клабник, Стив; Николс, Кэрол (июнь 2018). «Глава 4: Понимание собственности». Язык программирования Rust . Сан-Франциско, Калифорния: Пресс без крахмала. п. 44. ISBN 978-1-593-27828-1. Архивировано 3 мая 2019 года . Проверено 14 мая 2019 года .
  62. ^ «Язык программирования Rust: что такое собственность» . Rust-lang.org . Архивировано 19 мая 2019 года . Проверено 14 мая 2019 года .
  63. ^ Уолтон, Патрик (1 октября 2010 г.). «Особенности Rust I: Вывод типов» . Архивировано 8 июля 2011 года . Проверено 21 января 2011 года .
  64. ^ rust-lang / rustup , Язык программирования Rust, 17 мая 2021 г. , получено 17 мая 2021 г.
  65. ^ «Определение зависимостей - Грузовая книга» . doc.rust-lang.org . Проверено 17 мая 2021 года .
  66. ^ «Почему существует груз» . Грузовая книга . Проверено 18 мая 2021 года .
  67. ^ "ржавчина-дев-инструменты / FMT-rfcs" . GitHub . Проверено 19 мая 2021 года .
  68. ^ "rustfmt" . GitHub . Проверено 19 мая 2021 года .
  69. ^ "ржавчина языки / ржавчина-Clippy" . GitHub . Проверено 21 мая 2021 года .
  70. ^ «ВСЕ Clippy Lints» . Проверено 22 мая 2021 года .
  71. ^ "ржавчина-ланг / рлс" . GitHub . Проверено 26 мая 2021 года .
  72. ^ "гонщик-ржавчина / гонщик" . GitHub . Проверено 26 мая 2021 года .
  73. ^ «Процедурные макросы» . Справочник по языку программирования Rust . Архивировано 7 ноября 2020 года . Проверено 23 марта 2021 года .
  74. ^ "Serde Derive" . Документация Serde Derive . Архивировано 17 апреля 2021 года . Проверено 23 марта 2021 года .
  75. ^ "extensionr_api - Rust" . Документация по Extendr Api . Проверено 23 марта 2021 года .
  76. ^ Уолтон, Патрик (5 декабря 2010 г.). «Цели проектирования C ++ в контексте Rust» . Архивировано 9 декабря 2010 года . Проверено 21 января 2011 года .
  77. ^ "Насколько быстро ржавчина?" . Часто задаваемые вопросы по языку программирования Rust . Архивировано 28 октября 2020 года . Проверено 11 апреля 2019 года .
  78. ^ «Начало работы» . rust-lang.org . Архивировано 1 ноября 2020 года . Проверено 11 октября 2020 года .
  79. ^ «Опрос разработчиков Stack Overflow 2015» . Stackoverflow.com . Архивировано 31 декабря 2016 года . Проверено 3 ноября 2016 года .
  80. ^ «Опрос разработчиков Stack Overflow 2019» . Переполнение стека . Архивировано 8 октября 2020 года . Проверено 31 марта 2021 года .
  81. ^ Герман, Дэйв (12 июля 2016 г.). «Доставка Rust в Firefox * Mozilla Hacks: блог веб-разработчиков» . Hacks.mozilla.org . Архивировано 8 ноября 2020 года . Проверено 3 ноября 2016 года .
  82. ^ Егулалп, Сердар (3 апреля 2015 г.). «Браузерный движок Mozilla Servo на основе Rust продвигается вперед» . InfoWorld . Архивировано 16 марта 2016 года . Проверено 15 марта 2016 года .
  83. ^ Лардинуа, Фредерик (3 апреля 2015 г.). «Mozilla и Samsung объединились для разработки Servo, браузера нового поколения Mozilla для многоядерных процессоров» . TechCrunch . Архивировано 10 сентября 2016 года . Проверено 25 июня 2017 года .
  84. ^ Брайант, Дэвид (27 октября 2016 г.). «Квантовый скачок для Интернета» . Средний . Архивировано 9 декабря 2020 года . Проверено 27 октября, 2016 .
  85. ^ Егулалп, Сердар. «Redox OS Rust может показать Linux несколько новых трюков» . информационный мир. Архивировано 21 марта 2016 года . Проверено 21 марта 2016 года .
  86. ^ Сей, Марк (10 октября 2018 г.). «Новые возможности Fedora 29: Startis теперь официально в Fedora» . Marksei, Еженедельные таблетки сисадмина . Архивировано 13 апреля 2019 года . Проверено 13 мая 2019 года .
  87. ^ «RHEL 8: Глава 8. Управление многоуровневым локальным хранилищем с помощью Stratis» . 10 октября, 2018. архивации с оригинала на 13 апреля 2019 года . Проверено 13 апреля 2019 года .
  88. ^ Николс, Шон (27 июня 2018 г.). «Следующая уловка Microsoft - выбросить все из облака в Azure IoT Edge» . Регистр . Архивировано 27 сентября 2019 года . Проверено 27 сентября 2019 года .
  89. ^ Бальберт, Иво (27 мая 2015 г.). Основы Rust . Packt Publishing. п. 6. ISBN 978-1785285769. Проверено 21 марта 2016 года .
  90. ^ Франк, Денис (5 декабря 2013 г.). «Использование HyperLogLog для обнаружения вредоносных программ быстрее, чем когда-либо» . Лаборатории безопасности OpenDNS . Архивировано 14 августа 2017 года . Проверено 19 марта 2016 года .
  91. ^ Денис, Франк (4 октября 2013 г.). «ZeroMQ: Помогает нам блокировать вредоносные домены в реальном времени» . Лаборатории безопасности OpenDNS . Архивировано 14 августа 2017 года . Проверено 19 марта 2016 года .
  92. ^ Хан, Себастьян (31 марта 2017 г.). «[tor-dev] Tor на более безопасном языке: обновление сетевой команды из Амстердама» . Архивировано 12 ноября 2020 года . Проверено 1 апреля 2017 года .
  93. ^ asn (5 июля 2017 г.). "Уилмингтонские часы: хакфест команды Tor Network" . Блог Tor . Архивировано 4 января 2018 года . Проверено 3 января 2018 года .
  94. ^ Гарбут, Джеймс (27 января 2019 г.). «Первые мысли о Deno, среде выполнения JavaScript / TypeScript» . 43081j.com . Архивировано 7 ноября 2020 года . Проверено 27 сентября 2019 года .
  95. ^ «Призма 2 скоро выйдет (обновление)» . Призма . Архивировано 5 декабря 2020 года . Проверено 30 марта 2021 года .
  96. ^ Ховарт, Джесси (4 февраля 2020 г.). «Почему Discord переходит с Go на Rust» . Архивировано 30 июня 2020 года . Проверено 14 апреля 2020 года .
  97. ^ terminusdb / terminusdb-store , TerminusDB, 14 декабря 2020 г., заархивировано из оригинала 15 декабря 2020 г. , получено 14 декабря 2020 г.
  98. ^ «Рюш» . Оборка . Архивировано 26 января 2021 года . Проверено 14 апреля 2021 года .
  99. ^ Криль, Пол. «Язык Rust переходит в самостоятельную основу» . InfoWorld . Архивировано 10 апреля 2021 года . Проверено 10 апреля 2021 года .
  100. ^ Воан-Николс, Стивен Дж. (9 апреля 2021 г.). «Шейн Миллер из AWS возглавит недавно созданный Rust Foundation» . ZDNet . Архивировано 10 апреля 2021 года . Проверено 10 апреля 2021 года .
  101. ^ «РастКонф 2020 - четверг, 20 августа» . rustconf.com . Архивировано 25 августа 2019 года . Проверено 25 августа 2019 года .
  102. ^ Пояс из ржавчины Ржавчина . Дейтон, Огайо. 18 октября 2019 года. Архивировано 14 мая 2019 года . Проверено 14 мая 2019 года .
  103. ^ RustFest . Барселона, Испания: asquera Event UG. 2019. Архивировано 24 апреля 2019 года . Проверено 14 мая 2019 года .
  104. ^ «Оксидайз Глобал» . Окислить Берлинская конференция . Проверено 1 февраля 2021 года .

  • Официальный веб-сайт Edit this at Wikidata
  • Rust-lang на GitHub