~~~~~~~~~~~~~~~~~~~~ Arc.Ask3.Ru ~~~~~~~~~~~~~~~~~~~~~ 
Номер скриншота №:
✰ 352D231EDBF78CE19473668F35F50F94__1717066020 ✰
Заголовок документа оригинал.:
✰ Rust (programming language) - Wikipedia ✰
Заголовок документа перевод.:
✰ Rust (язык программирования) — Википедия ✰
Снимок документа находящегося по адресу (URL):
✰ https://en.wikipedia.org/wiki/Rust_(programming_language) ✰
Адрес хранения снимка оригинал (URL):
✰ https://arc.ask3.ru/arc/aa/35/94/352d231edbf78ce19473668f35f50f94.html ✰
Адрес хранения снимка перевод (URL):
✰ https://arc.ask3.ru/arc/aa/35/94/352d231edbf78ce19473668f35f50f94__translat.html ✰
Дата и время сохранения документа:
✰ 11.06.2024 06:14:36 (GMT+3, MSK) ✰
Дата и время изменения документа (по данным источника):
✰ 30 May 2024, at 13:47 (UTC). ✰ 

~~~~~~~~~~~~~~~~~~~~~~ Ask3.Ru ~~~~~~~~~~~~~~~~~~~~~~ 
Сервисы Ask3.ru: 
 Архив документов (Снимки документов, в формате HTML, PDF, PNG - подписанные ЭЦП, доказывающие существование документа в момент подписи. Перевод сохраненных документов на русский язык.)https://arc.ask3.ruОтветы на вопросы (Сервис ответов на вопросы, в основном, научной направленности)https://ask3.ru/answer2questionТоварный сопоставитель (Сервис сравнения и выбора товаров) ✰✰
✰ https://ask3.ru/product2collationПартнерыhttps://comrades.ask3.ru


Совет. Чтобы искать на странице, нажмите Ctrl+F или ⌘-F (для MacOS) и введите запрос в поле поиска.
Arc.Ask3.ru: далее начало оригинального документа

Rust (язык программирования) — Википедия Jump to content

Руст (язык программирования)

Это хорошая статья.  Для получения дополнительной информации нажмите здесь.
Из Википедии, бесплатной энциклопедии

Ржавчина
Логотип ржавчины;  заглавная буква R, установленная на звездочке
Парадигмы
Разработчик Фонд ржавчины
Впервые появился 15 мая 2015 г .; 9 лет назад ( 15 мая 2015 )
Стабильная версия
1.78.0 [1]  Отредактируйте это в Викиданных/ 2 мая 2024 г .; 38 дней назад ( 2 мая 2024 г. )
Дисциплина набора текста
Язык реализации Ржавчина
Платформа Кросс-платформенный [примечание 1]
ТЫ Кросс-платформенный [заметка 2]
Лицензия Массачусетский технологический институт и Apache 2.0 [заметка 3]
Расширения имен файлов .rs, .rlib
Веб-сайт www .отдых .org
Под влиянием
Под влиянием

Rust — это мультипарадигмальный , язык программирования общего назначения в котором упор делается на производительность , безопасность типов и параллелизм . Он обеспечивает безопасность памяти (то есть все ссылки указывают на действительную память) без сборщика мусора . Чтобы одновременно обеспечить безопасность памяти и предотвратить гонки данных , его «проверка заимствования» отслеживает время жизни объектов всех ссылок в программе во время компиляции .

На Rust повлияли идеи функционального программирования , включая неизменяемость , функции высшего порядка и алгебраические типы данных . Он популярен в системном программировании . [13] [14] [15]

Разработчик программного обеспечения Грейдон Хоар создал Rust как личный проект во время работы в Mozilla Research в 2006 году. Mozilla официально спонсировала проект в 2009 году. В годы, прошедшие после выхода первого стабильного выпуска в мае 2015 года, Rust был принят такими компаниями, как Amazon , Discord , Dropbox , Google ( Alphabet ), Meta и Microsoft . В декабре 2022 года он стал первым языком, кроме C и ассемблера , который поддерживался при разработке ядра Linux .

Rust известен своим быстрым распространением. [16] и изучался в области теории языков программирования . [17] [18] [19]

История [ править ]

Штаб-квартира Mozilla Foundation в Маунтин-Вью, Калифорния

( ) 2006–2012 Истоки

Rust зародился как личный проект в 2006 году сотрудника Mozilla Research Грейдона Хоара. [20] Mozilla начала спонсировать проект в 2009 году в рамках продолжающейся разработки экспериментального браузерного движка под названием Servo . [21] который был официально анонсирован Mozilla в 2010 году. [22] [23] На систему памяти и владения Rust повлияло управление памятью на основе регионов в таких языках, как Cyclone и ML Kit. [5]

Примерно в то же время работа перешла от первоначального компилятора , написанного на OCaml , к автономному компилятору на основе LLVM , написанному на Rust. Новый компилятор Rust успешно скомпилировался в 2011 году. [21] [ нужен лучший источник ] Осенью 2011 года был разработан логотип Rust на основе велосипедной звезды . [24]

Эволюция (2012–2020 ) гг .

Rust Система типов претерпела значительные изменения между версиями 0.2, 0.3 и 0.4. В версии 0.2, вышедшей в марте 2012 года, классы . впервые были представлены [25] Четыре месяца спустя в версии 0.3 были добавлены деструкторы и полиморфизм за счет использования интерфейсов. [26] В октябре 2012 года вышла версия 0.4, в которой были добавлены черты как средство наследования . Интерфейсы были объединены с особенностями и удалены как отдельная функция; а классы были заменены комбинацией реализаций и структурированных типов . [27]

В начале 2010-х годов управление памятью через систему владения постепенно консолидировалось, чтобы предотвратить ошибки памяти. Rust К 2013 году сборщик мусора был удален, а правила владения остались в силе. [20]

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

Разработка браузерного движка Servo продолжалась параллельно с ростом Rust. В сентябре 2017 года был выпущен Firefox 57 как первая версия, включающая компоненты Servo, в проекте под названием « Firefox Quantum ». [31]

Увольнения в Mozilla и Rust Foundation (2020 – время настоящее )

В августе 2020 года Mozilla уволила 250 из 1000 своих сотрудников по всему миру в рамках корпоративной реструктуризации, вызванной пандемией COVID-19 . [32] [33] Команда Servo была расформирована. Мероприятие вызвало обеспокоенность по поводу будущего Rust, поскольку некоторые члены команды активно участвовали в разработке Rust. [34] На следующей неделе команда Rust Core признала серьезные последствия увольнений и объявила, что планы по созданию фонда Rust находятся в стадии реализации. Первой целью фонда будет стать владельцем всех товарных знаков и доменных имен и взять на себя финансовую ответственность за их расходы. [35]

создании Rust Foundation ) объявили о 8 февраля 2021 года пять компаний-основателей ( AWS , Huawei , Google , Microsoft и Mozilla . [36] [37] В сообщении в блоге , опубликованном 6 апреля 2021 года, Google объявил о поддержке Rust в рамках проекта Android Open Source Project в качестве альтернативы C/C++. [38]

22 ноября 2021 года группа модераторов, отвечавшая за соблюдение стандартов сообщества и Кодекса поведения, объявила о своей отставке «в знак протеста против того, что основная команда считает себя безотчетной ни перед кем, кроме себя». [39] В мае 2022 года команда Rust Core, другие ведущие программисты и некоторые члены правления Rust Foundation реализовали реформы управления в ответ на инцидент. [40]

6 апреля 2023 года Фонд Rust опубликовал проект новой политики в отношении товарных знаков , в котором были пересмотрены правила использования логотипа и названия Rust, что вызвало негативную реакцию со стороны пользователей и участников Rust. [41]

Синтаксис и особенности [ править ]

Rust Синтаксис аналогичен синтаксису C и C++. [42] [43] хотя на многие его функции повлияли языки функционального программирования, такие как OCaml . [44] Хоар описал Rust как ориентированный на «разочарованных разработчиков C++» и подчеркнул такие функции, как безопасность, контроль структуры памяти и параллелизм . [21] Безопасность в Rust включает в себя гарантии безопасности памяти, безопасности типов и отсутствия гонок за данными.

Программа «Привет, мир» [ править ]

Ниже находится надпись «Hello, World!» программа на Rust. fn Ключевое слово обозначает функцию , а println! макрос выводит сообщение на стандартный вывод . [45] Операторы в Rust разделяются точкой с запятой .

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

Ключевые слова и поток управления [ править ]

В Rust блоки кода разделяются фигурными скобками , а поток управления реализуется с помощью ключевых слов, включая if, else, while, и for. [46] Сопоставление с образцом можно выполнить с помощью match ключевое слово. [47] В примерах ниже пояснения даются в комментариях , которые начинаются с //. [48]

fn   main  ()   { 
     // Определение изменяемой переменной с помощью 'let mut' 
     // Использование макроса vec!   чтобы создать вектор, 
     пусть   mut   значения   =   vec!   [  1  ,   2  ,   3  ,   4  ]; 

      для   значения   в   &  значений   { 
         println!   (  "значение = {}"  ,   значение  ); 
      } 

     если   значения  .   len  ()   >   5   { 
         println!   (  «Список длиннее пяти элементов»  ); 
      } 

     шаблону 
     соответствия   // Значения  .   лен  ()   { 
         0   =>   println!   (  «Пусто»  ), 
         1   =>   println!   (  «Одно значение»  ), 
         // при сопоставлении с образцом можно использовать диапазоны целых чисел 
         2  ..=  10   =>   println!   (  «От двух до десяти значений»  ), 
         11   =>   println!   (  "Одиннадцать значений"  ), 
         // Шаблон `_` называется "подстановочным знаком", он соответствует любому значению 
         _   =>   println!   (  «Много значений»  ), 
     }; 

      // цикл while с предикатом и сопоставлением с образцом с использованием let 
     while   let   Some  (  value  )   =   values  .   поп  ()   { 
         println!   (  "значение = {значение}"  );    // использование фигурных скобок для форматирования локальной переменной 
     } 
 } 

Блоки выражений [ править ]

Rust ориентирован на выражения , причем почти каждая часть тела функции является выражением , включая операторы потока управления. [49] Обычный ifвыражение используется вместо C. троичного условного выражения Поскольку возвраты являются неявными, функция не обязательно должна заканчиваться returnвыражение; используется значение последнего выражения в функции если точка с запятой опущена, в качестве возвращаемого значения , [50] как видно из следующей рекурсивной реализации функции факториала :

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

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

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

Замыкания [ править ]

В Rust анонимные функции называются замыканиями. [51] Они определяются с использованием следующего синтаксиса:

|<  параметр  -  имя  >  :  <  тип  >|    ->  <  возврат  -  тип  >   {   <  тело  >   }; 

Например:

пусть   ж   =   |   х  :  i32  |    ->  i32   {   х   *   2   }; 

Однако с помощью вывода типа компилятор может определить тип каждого параметра и тип возвращаемого значения, поэтому приведенную выше форму можно записать как:

пусть   ж   =   |   х  |    {   х   *   2   }; 

При замыканиях с одним выражением (т. е. телом с одной строкой) и неявным возвращаемым типом фигурные скобки можно опустить:

пусть   ж   =   |   х  |    х   *   2  ; 

Замыкания без входного параметра записываются так:

пусть   f   =   ||    распечататьлн!   (  "Привет, мир!"  ); 

Замыкания могут передаваться в качестве входных параметров функций, которые ожидают указатель на функцию:

// Функция, которая принимает указатель функции в качестве аргумента и вызывает ее 
 // со значением `5`. 
  fn   apply  (  f  :  fn  (  i32  )   ->  i32  )   ->  i32   { 
     // Нет точки с запятой, чтобы указать неявный возврат 
     f  (  5  ) 
 } 

 fn   main  ()   { 
     // Определение замыкания 
     let   f   =   |   х  |    х   *   2  ; 

      распечататьлн!   (  "{}"  ,   применить  (  f  ));     // 10 
     println!   (  "{}"  ,   f  (  5  ));         // 10 
 } 

Однако для описания того, как фиксируются значения в теле замыкания, могут потребоваться сложные правила. Они реализуются с помощью Fn, FnMut, и FnOnce черты: [52]

  • Fn: замыкание фиксируется по ссылке ( &T). Они используются для функций, которые все еще можно вызывать, если у них есть только ссылочный доступ (с &) к окружающей среде.
  • FnMut: замыкание фиксируется по изменяемой ссылке ( &mut T). Они используются для функций, которые можно вызывать, если у них есть доступ к изменяемым ссылкам (с &mut) к окружающей среде.
  • FnOnce: замыкание захватывает по значению ( T). Они используются для функций, которые вызываются только один раз.

Благодаря этим особенностям компилятор будет захватывать переменные наименее ограничительным образом. [52] Они помогают управлять тем, как значения перемещаются между областями действия, что очень важно, поскольку Rust следует конструкции жизненного цикла, чтобы гарантировать, что значения «заимствованы» и перемещены предсказуемым и явным образом. [53]

Ниже показано, как можно передать замыкание в качестве входного параметра, используя метод Fn черта:

// Функция, которая принимает значение типа F (который определяется как 
 // универсальный тип, реализующий признак `Fn`, например замыкание) 
 // и вызывает его со значением `5`. 
  fn   apply_by_ref  <  F  >  (  f  :  F  )   ->  i32 
     где   F  :  Fn  (  i32  )   ->  i32 
 { 
     f  (  5  ) 
 } 

 fn   main  ()   { 
     let   f   =   |   х  |    { 
         печать!   (  «Я получил значение: {}»  ,   x  ); 
          х   *   2 
     }; 
    
      // Применяет функцию перед печатью возвращаемого значения 
     println!   (  "5 * 2 = {}"  ,   apply_by_ref  (  f  )); 
  } 

 // ~~ Вывод программы ~~ 
 // Я получил значение: 5 
 // 5 * 2 = 10 

Предыдущее определение функции также можно для удобства сократить следующим образом:

fn   apply_by_ref  (  f  :  impl   Fn  (  i32  )   ->  i32  )   ->  i32   { 
     f  (  5  ) 
 } 

Типы [ править ]

Rust строго типизирован и статически типизирован . Типы всех переменных должны быть известны во время компиляции; присвоение значения определенного типа переменной другого типа приводит к ошибке компиляции . Переменные объявляются с помощью ключевого слова let, а вывод типа используется для определения их типа. [54] Переменные, назначенные несколько раз, должны быть помечены ключевым словом mut (сокращение от изменяемого ). [55]

Целочисленный тип по умолчанию: i32, а тип с плавающей запятой по умолчанию — f64. Если тип буквального числа не указан явно, он либо выводится из контекста, либо используется тип по умолчанию. [56]

Примитивные типы [ править ]

Rust Краткое описание примитивных типов
Тип Описание Примеры
bool Логическое значение
  • true
  • false
u8 Беззнаковое 8-битное целое число ( байт )
  • i8
  • i16
  • i32
  • i64
  • i128
Целые числа со знаком , до 128 бит.
  • u16
  • u32
  • u64
  • u128
Целые числа без знака , до 128 бит.
  • usize
  • isize
Целые числа размером с указатель (размер зависит от платформы )
  • f32
  • f64
Числа с плавающей запятой
char
str Срез строки в кодировке UTF-8 , примитивный тип строки. Обычно его видят в заимствованной форме, &str. Это также тип строковых литералов, &'static str[58]
  • "Hello"
  • "3"
  • "🦀🦀🦀"
[T; N] Массив – совокупность N объектов одного типа T, хранящихся в непрерывной памяти.
  • [2, 4, 6]
  • [0; 100]
  • b"Hello"
[T] Срез — представление непрерывной последовательности динамического размера. [59]
  • [1, 2, 3, 4, 5][..i]
  • "Hello, world!".as_bytes()
  • let v = vec![1, 2, 3]; v.as_slice()
(T, U, ..)
Кортеж - конечная гетерогенная последовательность.
  • () (Пустой кортеж, тип юнита в Rust)
  • (5,) ( (5) анализируется как целое число) [60]
  • ("Age", 10)
  • (1, true, "Name")
! Никогда не вводите (недоступное значение) let x = { return 123 };

Стандартная библиотека [ править ]

Краткое описание типов Rust в стандартной библиотеке
Тип Описание Примеры
String Строки в кодировке UTF-8 (динамические)
  • String::new()
  • String::from("Hello")
  • "🦀🦀🦀".to_string()
  • OsStr
  • OsString
Собственные строки платформы [примечание 7] (заимствованный [61] и динамичный [62] )
  • OsStr::new("Hello")
  • OsString::from("world")
  • Path
  • PathBuf
Пути (заимствованные [63] и динамичный [64] )
  • Path::new("./path/to")
  • PathBuf::from(r"C:.\path\to")
  • CStr
  • CString
C -совместимые строки с нулевым завершением (заимствованные [65] и динамичный [65] )
  • c"Hello"
  • CStr::from_bytes_with_nul(b"Hello\0").unwrap()
  • CString::new("world").unwrap()
Vec<T> Динамические массивы
  • Vec::new()
  • vec![1, 2, 3, 4, 5]
Option<T> Тип опции
  • None
  • Some(3)
  • Some("hello")
Result<T, E> Обработка ошибок с использованием типа результата
  • Ok(3)
  • Err("something went wrong")
Box<T> Указатель на значение, выделенное в куче . [66] Аналогично std::unique_ptr в C++ .
пусть   в штучной упаковке  :  Box  <  u8  >   =   Box  ::  new  (  5  ); 
  пусть   val  :  u8   =   *  в штучной упаковке  ; 
Rc<T> подсчета ссылок Указатель [67]
пусть   пять   =   Rc  ::  new  (  5  ); 
  пусть   также_пять   =   пять  .   клон  (); 
Arc<T> Атомный , потокобезопасный указатель подсчета ссылок [68]
пусть   foo   =   Arc  ::  new  (  vec!  [  1.0  ,   2.0  ]); 
  пусть   а   =   фу  .   клон  ();    // можно отправить в другой поток 
Cell<T> Изменяемая ячейка памяти [69]
пусть   c   =   Cell  ::  new  (  5  ); 
  в  .   набор  (  10  ); 
Mutex<T> Блокировка мьютекса для общих данных, содержащихся внутри. [70]
пусть   мьютекс   =   Мьютекс  ::  new  (  0_  u32  ); 
  пусть   _guard   =   мьютекс  .   замок  (); 
RwLock<T> Блокировка чтения и записи [71]
let   lock   =   RwLock  ::  new  (  5  ); 
  пусть   r1   =   блокировка  .   читать  ().   развернуть  (); 
Condvar Условный монитор для общих данных [72]
 let   (  lock  ,   cvar  )   =   (  Mutex  ::  new  (  true  ),   Condvar  ::  new  ()); 
  // Пока значение внутри Mutex<bool> равно true, мы ждем. 
  пусть   _guard   =   cvar  .   wait_ while  (  lock  .  lock  ().  unwrap  (),   |  в ожидании  |   {   *  в ожидании   }).   развернуть  (); 
Duration Тип, представляющий промежуток времени [73]
Продолжительность  ::  from_millis  (  1  )   // 1 мс 
HashMap<K, V> Хеш-таблица [74]
пусть   mut   player_stats   =   HashMap  ::  new  (); 
  player_stats  .   вставить  (  "повреждение"  ,   1  ); 
  player_stats  .   запись  (  «здоровье»  ).   или_вставить  (  100  ); 
BTreeMap<K, V> B-дерево [75]
let   mut   sun_distance   =   BTreeMap  ::  from  ([ 
     (  "Меркурий"  ,   0.4  ), 
     (  "Венера"  ,   0.7  ), 
 ]); 
  солнечное_дистанция  .   запись  (  «Земля»  ).   или_вставить  (  1.0  ); 

Option значения обрабатываются с использованием синтаксического сахара , такого как if let конструкция для доступа к внутреннему значению (в данном случае к строке): [76]

fn   main  ()   { 
     let   name1  :  Option  <&  str  >   =   None  ; 
      // В этом случае ничего не будет распечатано, 
     если   let   Some  (  name  )   =   name1   { 
         println!   (  "{имя}"  ); 
      } 

     let   name2  :  Option  <&  str  >   =   Some  (  "Мэтью"  ); 
      // В этом случае слово «Мэтью» будет напечатано, 
     если   let   Some  (  name  )   =   name2   { 
         println!   (  "{имя}"  ); 
      } 
 } 

Указатели [ править ]

примитивов Rust указателей и ссылочных Краткое описание типов
Тип Описание Примеры
  • &T
  • &mut T
Ссылки (неизменяемые и изменяемые)
  • let x_ref = &x;
  • let x_ref = &mut x;
  • Option<&T>
  • Option<&mut T>
  • Ссылка на вариант
  • Возможно, нулевая ссылка
  • None
  • let x_ref = Some(&x);
  • let x_ref = Some(&mut x);
  • Box<T>
  • Option<Box<T>>
Указатель на значение, выделенное в куче

(или, возможно, нулевой указатель, если он заключен в опцию) [65]

  • let boxed = Box::new(0);
  • let boxed = Some(Box::new("Hello World"));
  • *const T
  • *mut T
  • Необработанные указатели (неизменяемые и изменяемые)
  • Возможно, ноль ; unsafe разыменовать
  • let x_ptr = &x as *const T;
  • let x_ptr = &mut x as *mut T;

Rust не использует нулевые указатели для обозначения отсутствия данных, так как это может привести к нулевому разыменованию . Соответственно, основные & и &mutссылки гарантированно не будут нулевыми. Вместо этого Rust использует Option для этой цели: Some(T) указывает, что значение присутствует, и None аналогичен нулевому указателю. [77] Option реализует «оптимизацию нулевого указателя», избегая любых пространственных издержек для типов, которые не могут иметь нулевое значение (ссылки или NonZero типы, например). [78]

В отличие от ссылок, типы необработанных указателей *const и *mutможет быть нулевым; однако их невозможно разыменовать, если код явно не объявлен небезопасным с помощью unsafeблокировать. В отличие от разыменования, создание необработанных указателей разрешено внутри безопасного кода Rust. [79]

Пользовательские типы [ править ]

Пользовательские типы создаются с помощью struct или enumключевые слова. struct Ключевое слово используется для обозначения типа записи , который группирует несколько связанных значений. [80] enums может принимать различные варианты во время выполнения, а его возможности аналогичны алгебраическим типам данных, встречающимся в функциональных языках программирования. [81] И структуры, и перечисления могут содержать поля разных типов. [82] Альтернативные имена для одного и того же типа можно определить с помощью type ключевое слово. [83]

The implКлючевое слово может определять методы для определяемого пользователем типа. Данные и функции определяются отдельно. Реализации выполняют роль, аналогичную роли классов в других языках. [84]

Преобразование типов [ править ]

Rust не обеспечивает неявного преобразования типов (принуждения) между примитивными типами. Но явное преобразование типов (приведение типов) можно выполнить с помощью as ключевое слово. [85]

пусть   х   =   1000  ; 
  распечататьлн!   (  "1000 как u16: {}"  ,   x   как   u16  ); 

Право собственности и срок службы [ править ]

Система владения Rust состоит из правил, обеспечивающих безопасность памяти без использования сборщика мусора. Во время компиляции каждое значение должно быть прикреплено к переменной, называемой владельцем этого значения, и каждое значение должно иметь ровно одного владельца. [86] Значения перемещаются между разными владельцами путем присвоения или передачи значения в качестве параметра функции. Значения также могут быть заимствованы, то есть они временно передаются в другую функцию, а затем возвращаются владельцу. [87] С помощью этих правил Rust может предотвратить создание и использование висячих указателей : [87] [88]

fn   print_string  (  s  :  String  )   { 
     println!   (  "{}"  ,   с  ); 
  } 

 fn   main  ()   { 
     let   s   =   String  ::  from  (  «Hello, World»  ); 
      print_string  (  ы  );    // s, использованные print_string 
     // s были перемещены, поэтому их больше нельзя использовать 
     // другой print_string(s);   приведет к ошибке компиляции 
 } 

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

Когда значение выходит за пределы области видимости, оно удаляется путем запуска его деструктора . Деструктор может быть определен программно путем реализации Drop черта . Это помогает управлять такими ресурсами, как дескрипторы файлов, сетевые сокеты и блокировки , поскольку при удалении объектов связанные с ними ресурсы автоматически закрываются или освобождаются. [90]

Время жизни обычно является неявной частью всех ссылочных типов в Rust. Каждое время жизни включает в себя набор мест в коде, для которых действительна переменная. Например, ссылка на локальную переменную имеет время жизни, соответствующее блоку, в котором она определена: [91]

fn   main  ()   { 
     let   x   =   5  ;                                 // ------------------+- Время жизни 'a 
                                             // | 
      пусть   г   =   &  х  ;                                // --+-- Время жизни 'b | 
                                              // |   | 
      распечататьлн!   (  "р: {}"  ,   р  );                      // |   | 
                                              // |   | 
                                              // -+ | 
  }                                             // ------------------+ 

Средство проверки заимствований в компиляторе Rust использует время жизни, чтобы гарантировать, что значения контрольных точек остаются действительными. [92] [93] В приведенном выше примере сохранение ссылки на переменную x к r действителен как переменная x имеет более длительный срок службы( 'a), чем переменная r ( 'b). Однако, когда x имеет более короткий срок службы, программа проверки заимствований отклонит программу:

fn   main  ()   { 
     let   r  ;                                     // ------------------+- Время жизни 'a 
                                             // | 
      {                                         // | 
          пусть   х   =   5  ;                             // --+-- Время жизни 'b | 
          р   =   &  х  ;                                // |   | 
      }                                         // -|   | 
                                              // | 
      распечататьлн!   (  "р: {}"  ,   р  );                      // | 
  }                                             // ------------------+ 

Поскольку время жизни ссылочной переменной ( 'b) короче времени жизни переменной, содержащей ссылку ( 'a), ошибки проверки заимствований, предотвращающие x от использования за пределами своей области применения. [94]

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

В приведенном ниже примере анализируются некоторые параметры конфигурации из строки и создается структура, содержащая эти параметры. Структура содержит только ссылки на данные; поэтому, чтобы структура оставалась допустимой, данные, на которые ссылается структура, также должны быть действительными. Сигнатура функции для parse_configявно определяет эту связь. В этом примере явное время жизни не требуется в новых версиях Rust из-за исключения времени жизни — алгоритма, который автоматически назначает время жизни функциям, если они тривиальны. [96]

используйте   std  ::  collections  ::  HashMap  ; 

  // Эта структура имеет один параметр времени жизни, 'src.   Имя используется только в определении структуры. 
  #[derive(Debug)] 
 struct   Config  <'  src  >   { 
     hostname  :  &  '  src   str  , 
     username  :  &  '  src   str  , 
 } 

 // Эта функция также имеет параметр времени жизни 'cfg.   'cfg прикрепляется к параметру "config", который 
 // устанавливает, что данные в "config" живут, по крайней мере, в течение срока жизни 'cfg. 
  // Возвращенная структура также использует 'cfg на протяжении всего своего существования, поэтому она может существовать не более, чем 'cfg. 
  fn   parse_config  <'  cfg  >  (  config  :  &  '  cfg   str  )   ->  Config  <'  cfg  >   { 
     let   key_values  ​​:  HashMap  <  _  ,   _  >   =   config 
         .   линии  () 
         .   фильтр  (  |  линия  |   !  строка  .  начинается_с  (  '#'  )) 
         .   filter_map  (  |  линия  |   линия  .  Split_once  (  '='  )) 
         .   карта  (  |  (  ключ  ,   значение  )  |   (  ключ  .  обрезка  ( ),   значение  .  обрезка  ())) 
         .   собирать  (); 
      Config   { 
         имя_хоста  :  значения_ключа  [  "имя_хоста]  ], 
         имя пользователя  :  значения_ключей  [  "имя_пользователя"  ], 
     } 
 } 

 fn   main  ()   { 
     let   config   =   parse_config  ( 
         r#"hostname = foobar 
 username=barfoo"#  , 
     ); 
      распечататьлн!   (  "Разобранная конфигурация: {:#?}"  ,   config  ); 
  } 
Презентация по Rust Эмили Данэм из конференция команды Mozilla Rust ( linux.conf.au , Хобарт, 2017 г.)

Безопасность памяти [ править ]

Rust спроектирован так, чтобы быть безопасным для памяти . Он не допускает нулевых указателей, висячих указателей или гонок за данными . [97] [98] [99] Значения данных могут быть инициализированы только с помощью фиксированного набора форм, каждая из которых требует, чтобы их входные данные были уже инициализированы. [100]

Небезопасный код может обойти некоторые из этих ограничений, используя unsafe ключевое слово. [79] Небезопасный код также может использоваться для низкоуровневых функций, таких как доступ к энергозависимой памяти , встроенные функции, специфичные для архитектуры, каламбур типов и встроенная сборка. [101]

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

Rust не использует сбор мусора . Вместо этого память и другие ресурсы управляются по соглашению «получение ресурсов — это инициализация». [102] с дополнительным подсчетом ссылок . Rust обеспечивает детерминированное управление ресурсами с очень низкими накладными расходами . [103] значения выделяются в стеке По умолчанию , и все динамические выделения должны быть явными. [104]

Встроенные ссылочные типы, использующие &символ не включает подсчет ссылок во время выполнения. Безопасность и достоверность базовых указателей проверяются во время компиляции, что предотвращает висячие указатели и другие формы неопределенного поведения . [105] Система типов Rust разделяет общие неизменяемые ссылки вида &T из уникальных, изменяемых ссылок вида &mut T. Изменяемую ссылку можно привести к неизменяемой ссылке, но не наоборот. [106]

Полиморфизм [ править ]

Дженерики [ править ]

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

Следующая программа вычисляет сумму двух вещей, для чего сложение реализуется с помощью универсальной функции:

используйте   std  ::  ops  ::  Add  ; 

  // sum — это универсальная функция с одним параметром типа T 
 fn   sum  <  T  >  (  num1  :  T  ,   num2  :  T  )   ->  T 
 где   
     T  :  Add  <  Output   =   T  >  ,    // T должен реализовать признак Add, где сложение возвращает еще один T 
 { 
     num1   +   num2    // num1 + num2 — это синтаксический сахар для num1.add(num2), предоставляемый свойством Add 
 } 

 fn   main  ()   { 
     let   result1   =   sum  (  10  ,   20  ); 
      распечататьлн!   (  "Сумма: {}"  ,   результат1  );    // Сумма: 30 

     let   result2   =   sum  (  10.23  ,   20.45  ); 
      распечататьлн!   (  "Сумма: {}"  ,   результат2  );    // Сумма: 30,68 
 } 

Во время компиляции полиморфные функции, такие как sumсоздаются экземпляры конкретных типов, требуемых кодом; в данном случае сумма целых чисел и сумма чисел с плавающей запятой.

Обобщенные шаблоны можно использовать в функциях, чтобы обеспечить реализацию поведения для разных типов без повторения одного и того же кода. Универсальные функции могут быть написаны относительно других дженериков, не зная фактического типа. [108]

Черты [ править ]

Система типов Rust поддерживает механизм, называемый типажами, вдохновленный классами типов в языке Haskell . [5] определить общее поведение между различными типами. Например, Addчерта может быть реализована для чисел с плавающей запятой и целых чисел, которые можно добавить; и Display или Debugчерты могут быть реализованы для любого типа, который можно преобразовать в строку. Черты могут использоваться для обеспечения набора общего поведения для разных типов без знания фактического типа. Эта возможность известна как специальный полиморфизм .

Универсальные функции могут ограничивать универсальный тип для реализации определенного признака или признаков; например, add_one функции может потребоваться тип для реализации Add. Это означает, что универсальную функцию можно проверить по типу сразу после ее определения. Реализация дженериков аналогична типичной реализации шаблонов C++: для каждого экземпляра создается отдельная копия кода. Это называется мономорфизацией и контрастирует со схемой стирания типов , обычно используемой в Java и Haskell. Стирание типа также доступно по ключевому слову dyn (сокращение от динамического). [109] Поскольку мономорфизация дублирует код для каждого используемого типа, это может привести к более оптимизированному коду для конкретных случаев использования, но время компиляции и размер выходного двоичного файла также увеличиваются. [110]

Помимо определения методов для определяемого пользователем типа, impl Ключевое слово может использоваться для реализации признака типа. [84] При реализации трейты могут предоставлять дополнительные производные методы. [111] Например, черта Iterator требует, чтобы nextметод должен быть определен для типа. Однажды next метод определен, признак может предоставлять общие функциональные вспомогательные методы для итератора, такие как map или filter. [112]

Объекты черт [ править ]

Черты Rust реализованы с использованием статической диспетчеризации , что означает, что тип всех значений известен во время компиляции; однако Rust также использует функцию, известную как объекты-характеристики, для выполнения динамической отправки (также известной как утиная типизация ). [113] Динамически отправляемые объекты свойств объявляются с использованием синтаксиса dyn Tr где Trэто черта. Объекты признаков имеют динамический размер, поэтому их необходимо поместить за указателем, например Box. [114] В следующем примере создается список объектов, каждый из которых можно распечатать с помощью Display черта:

используйте   std  ::  fmt  ::  Display  ; 

  let   v  :  Vec  <  Box  <  dyn   Display  >>   =   vec!   [ 
     Коробка  ::  новый  (  3  ), 
     Коробка  ::  новый  (  5.0  ), 
     Коробка  ::  новый  (  «привет»  ), 
 ]; 

  для   x   в   v   { 
     println!   (  "{Икс}"  ); 
  } 

Если элемент в списке не реализует Display черта, это вызовет ошибку времени компиляции. [115]

Итераторы [ править ]

Циклы for в Rust работают в функциональном стиле как операции над типом итератора . Например, в цикле

для   х   в   0  ..  100   { 
    f  (  x  ); 
  } 

0..100 это значение типа Range которая реализует Iteratorчерта; код применяет функцию fдля каждого элемента, возвращаемого итератором. Итераторы можно комбинировать с функциями над итераторами, например map, filter, и sum. Например, следующая команда суммирует все числа от 1 до 100, кратные 3:

(  1  ..=  100  ).   фильтр  (  |&  x  |   x   %   3   ==   0  ).   сумма  () 

Макросы [ править ]

Язык Rust можно расширить с помощью макросов.

Декларативные макросы [ править ]

Декларативный макрос (также называемый «макросом по примеру») — это макрос, который использует сопоставление с образцом для определения своего расширения. [116] [117]

Процедурные макросы [ править ]

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

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

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

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

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

UML -диаграмма , изображающая структуру Rust с именем Point.
используйте   serde_json  ::  {  Сериализация  ,   Десериализация  }; 

  #[derive(Serialize, Deserialize, Debug)] 
 struct   Point   { 
     x  :  i32  , 
     y  :  i32  , 
 } 

 fn   main  ()   { 
     let   point   =   Point   {   x  :  1  ,   y  :  2   }; 

      let   сериализованный   =   serde_json  ::  to_string  (  &  point  ).   развернуть  (); 
      распечататьлн!   (  "сериализованный = {}"  ,   сериализованный  ); 

      пусть   десериализовано  :  Point   =   serde_json  ::  from_str  (  &  сериализовано  ).   развернуть  (); 
      распечататьлн!   (  "десериализован = {:?}"  ,   десериализовано  ); 
  } 

Вариативные editмакросы

Rust не поддерживает переменные аргументы в функциях. Вместо этого он использует макросы . [122]

макро_правила!    вычислить   { 
     // Шаблон для одного `eval` 
     (  eval   $e  :  expr  )   =>   {{ 
         { 
             let   val  :  usize   =   $e  ;    // Заставляем типы быть целыми числами 
             println!   (  "{} = {}"  ,   stringify!  {  $e  },   val  ); 
          } 
     }}; 

      // Рекурсивно разложить несколько `eval` 
     (  eval   $e  :  expr  ,   $(  eval   $es  :  expr  ),  +  )   =>   {{ 
         Calculation  !    {   eval   $e   } 
         вычислить  !    {   $(  оценка   $es  ),  +   } 
     }}; 
  } 

 fn   main  ()   { 
     вычислить  !    {   // Смотри, ма!   Вариатическое `вычислить!`! 
          оценка   1   +   2  , 
         оценка   3   +   4  , 
         оценка   (  2   *   3  )   +   1 
     } 
 } 
Rust может взаимодействовать с вариативной системой C через c_variadicпереключатель функций. Как и другие интерфейсы C, система считается unsafe к Русту. [123]

Интерфейс с C и C++ [ править ]

В Rust есть интерфейс внешних функций (FFI), который можно использовать как для вызова кода, написанного на таких языках, как C , из Rust, так и для вызова кода Rust с этих языков. По состоянию на 2024 год существует внешняя библиотека CXX для вызова C++ или из него. [124] Rust и C различаются тем, как они размещают структуры в памяти, поэтому структурам Rust можно присвоить #[repr(C)] атрибут, обеспечивающий тот же макет, что и эквивалентная структура C. [125]

Экосистема [ править ]

Компиляция программы Rust с помощью Cargo

Экосистема Rust включает в себя компилятор, стандартную библиотеку и дополнительные компоненты для разработки программного обеспечения. Установкой компонентов обычно управляет rustup Rust , установщик набора инструментов , разработанный в рамках проекта Rust. [126]

Компилятор [ править ]

Компилятор Rust назван rustcи переводит код Rust в язык низкого уровня, называемый промежуточным представлением LLVM (LLVM IR). Затем LLVM вызывается как подкомпонент для перевода IR-кода в машинный код . Затем компоновщик . используется для объединения нескольких ящиков в один исполняемый или двоичный файл [127] [128]

Помимо LLVM, компилятор также поддерживает использование альтернативных бэкэндов, таких как GCC и Cranelift, для генерации кода. [129] Целью этих альтернативных бэкэндов является увеличение охвата платформы Rust или сокращение времени компиляции. [130] [131]

Стандартная библиотека [ править ]

Стандартная библиотека Rust определяет и реализует множество широко используемых пользовательских типов данных, включая основные структуры данных, такие как Vec, Option, и HashMap, а также типы интеллектуальных указателей . Rust также предоставляет возможность исключить большую часть стандартной библиотеки с помощью атрибута #![no_std]; это позволяет приложениям, таким как встроенные устройства, удалять код зависимостей или предоставлять свои собственные основные структуры данных. Внутри стандартная библиотека разделена на три части: core, alloc, и std, где std и alloc исключены #![no_std]. [132]

Скриншот crates.io в июне 2022 г.

Должность [ править ]

Rust Cargo — это система сборки и менеджер пакетов . Он загружает, компилирует, распространяет и загружает пакеты, называемые ящиками , которые сохраняются в официальном реестре. Он также действует как интерфейс для Clippy и других компонентов Rust. [16]

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

Рустфмт [ править ]

Rustfmt — форматировщик кода для Rust. Он форматирует пробелы и отступы для создания кода в соответствии с общим стилем , если не указано иное. Его можно вызвать как отдельную программу или из проекта Rust через Cargo. [134]

Пример вывода Clippy в программе hello world на Rust

Клиппи [ править ]

Clippy — это встроенный в Rust инструмент проверки , позволяющий улучшить корректность, производительность и читаемость кода Rust. По состоянию на 2024 год , он имеет более 700 правил. [135] [136]

Система версий [ править ]

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

Каждые два-три года выпускается новое «издание». Выпускаются версии, позволяющие вносить ограниченные критические изменения , например продвигать awaitк ключевому слову для поддержки функций async/await . Крейты, предназначенные для разных выпусков, могут взаимодействовать друг с другом, поэтому крейт может обновиться до новой редакции, даже если его вызывающие программы или его зависимости по-прежнему ориентированы на более старые выпуски. Переход на новую редакцию можно облегчить с помощью автоматизированных инструментов. [138]

Поддержка IDE [ править ]

Самый популярный языковой сервер для Rust — Rust Analyzer , который официально заменил исходный языковой сервер RLS в июле 2022 года. [139] Rust Analyzer предоставляет IDE и текстовым редакторам информацию о проекте Rust; базовые функции, включая автодополнение и отображение ошибок компиляции при редактировании. [140]

Производительность [ править ]

В общем, гарантии безопасности памяти Rust не накладывают накладных расходов во время выполнения. [141] Заметным исключением является индексация массива , которая проверяется во время выполнения, хотя часто это не влияет на производительность. [142] Поскольку Rust не выполняет сборку мусора, он часто работает быстрее, чем другие языки, безопасные для памяти. [143] [144] [145]

Rust предоставляет два «режима»: безопасный и небезопасный. Безопасный режим — это «обычный» режим, в котором написана большая часть Rust. В небезопасном режиме разработчик несет ответственность за безопасность памяти кода, что полезно в случаях, когда компилятор слишком ограничителен. [146]

Многие из функций Rust являются так называемыми абстракциями с нулевой стоимостью , что означает, что они оптимизируются во время компиляции и не несут никаких потерь во время выполнения. [147] Система владения и заимствования допускает реализацию с нулевым копированием для некоторых задач, чувствительных к производительности, таких как синтаксический анализ . [148] Статическая диспетчеризация используется по умолчанию для исключения вызовов методов , за исключением методов, вызываемых динамическими объектами типажей. [149] Компилятор также использует встроенное расширение для устранения вызовов функций и вызовов статически отправляемых методов. [150]

Поскольку Rust использует LLVM , любые улучшения производительности в LLVM также переносятся и на Rust. [151] В отличие от C и C++, Rust позволяет переупорядочивать элементы структуры и перечисления. [152] для уменьшения размеров структур в памяти, для лучшего выравнивания памяти и повышения эффективности доступа к кэшу . [153]

Принятие [ править ]

Ранняя домашняя страница браузерного движка Mozilla Servo

Rust использовался в программном обеспечении в разных областях. Первоначально Rust финансировался Mozilla в рамках разработки Servo, экспериментального параллельного браузерного движка, в сотрудничестве с Samsung . [154] Компоненты движка Servo позже были включены в движок браузера Gecko , лежащий в основе Firefox. [155] В январе 2023 года Google ( Alphabet ) объявила о поддержке сторонних библиотек Rust в Chromium и, следовательно, в базе кода ChromeOS . [156]

Rust используется в нескольких проектах серверного программного обеспечения крупных веб-сервисов . OpenDNS , служба разрешения DNS , принадлежащая Cisco , использует Rust внутри себя. [157] [158] Amazon Web Services начала разработку проектов на Rust еще в 2017 году. [159] включая Firecracker , решение для виртуализации; [160] Bottlerocket, Linux решение для распространения и контейнеризации ; [161] и Tokio — асинхронный сетевой стек. [162] Microsoft Azure IoT Edge, платформа, используемая для запуска сервисов Azure на устройствах Интернета вещей , имеет компоненты, реализованные на Rust. [163] Microsoft также использует Rust для запуска контейнерных модулей с помощью WebAssembly и Kubernetes . [164] Cloudflare , компания, предоставляющая сетевые услуги доставки контента, использует Rust для своего механизма сопоставления шаблонов брандмауэра и веб-сервера Pingora . [165] [166]

добавлена ​​поддержка Rust. В операционных системах в Linux [167] [168] и Андроид . [169] [170] Microsoft переписывает части Windows на Rust. [171] Проект r9 направлен на повторную реализацию Plan 9 от Bell Labs в Rust. [172] Rust использовался при разработке новых операционных систем, таких как Redox , «Unix-подобная» операционная система и микроядро . [173] Тесей, экспериментальная операционная система с модульным управлением состояниями, [174] [175] и большая часть фуксии . [176] Rust также используется для инструментов командной строки и компонентов операционной системы, включая stratisd , файловой системы. менеджер [177] [178] и COSMIC, среда рабочего стола от System76 . [179] [180]

Ruffle, веб-эмулятор для Adobe Flash. SWF -файлов

В веб-разработке менеджер пакетов npm начал использовать Rust в 2019 году. [181] [182] [183] Deno , безопасная среда выполнения для JavaScript и TypeScript , создана с использованием V8 , Rust и Tokio. [184] Другие заметные разработки в этой области включают Ruffle с открытым исходным кодом , эмулятор SWF , [185] и Polkadot , платформа блокчейна и криптовалют с открытым исходным кодом . [186]

Discord , социальная платформа для обмена мгновенными сообщениями, использует Rust для некоторых частей своей серверной части, а также для кодирования видео на стороне клиента . [187] В 2021 году Dropbox объявила об использовании Rust для службы захвата экрана, видео и изображений. [188] Facebook ( Meta ) использовал Rust для Mononoke, сервера системы контроля версий Mercurial . [189]

В опросе разработчиков Stack Overflow 2023 года 13% респондентов недавно провели обширную разработку на Rust. [190] Опрос также называл Rust «самым любимым языком программирования» каждый год с 2016 по 2023 год (включительно), исходя из количества разработчиков, заинтересованных в продолжении работы на том же языке. [191] [примечание 8] В 2023 году Rust занял 6-е место среди «самых востребованных технологий», при этом 31% разработчиков, которые в настоящее время не работают в Rust, выразили заинтересованность в этом. [190]

Сообщество [ править ]

Ярко-оранжевый значок краба
Некоторые пользователи Rust называют себя Rustaceans (по аналогии со словом ракообразное ) и сделали оранжевого краба Ферриса своим неофициальным талисманом. [192] [193]

Фонд ржавчины [ править ]

Фонд ржавчины
Формирование 8 февраля 2021 г .; 3 года назад ( 08.02.2021 )
Основатели
Тип Некоммерческая организация
Расположение
Шейн Миллер
Ребекка Рамбул
Веб-сайт фундамент .отдых .org

Rust Foundation — это некоммерческая членская организация, зарегистрированная в США , основной целью которой является поддержка технического проекта в качестве юридического лица и помощь в управлении товарными знаками и инфраструктурными активами. [194] [43]

Он был создан 8 февраля 2021 года пятью корпоративными членами-учредителями (Amazon Web Services, Huawei, Google, Microsoft и Mozilla). [195] Совет фонда возглавляет Шейн Миллер. [196] С конца 2021 года ее исполнительным директором и генеральным директором станет Ребекка Рамбул. [197] До этого временным исполнительным директором была Эшли Уильямс. [198]

Управляющие команды [ править ]

Проект Rust состоит из команд , отвечающих за различные области разработки. Команда компилятора разрабатывает, управляет и оптимизирует внутренние компоненты компилятора; а языковая группа разрабатывает новые функции языка и помогает их реализовать. На сайте проекта Rust перечислены 9 команд высшего уровня по состоянию на январь 2024 года. . [199] Представители команд образуют Лидерский совет, который курирует проект Rust в целом. [200]

См. также [ править ]

Примечания [ править ]

  1. ^ Включая инструменты сборки, инструменты хоста и поддержку стандартных библиотек для x86-64 , ARM , MIPS , RISC-V , WebAssembly , i686 , AArch64 , PowerPC и s390x . [2]
  2. ^ Включая Windows , Linux , macOS , FreeBSD , NetBSD и Illumos . Инструменты сборки хоста для Android , iOS , Haiku , Redox и Fuchsia официально не поставляются; эти операционные системы поддерживаются в качестве целевых. [2]
  3. ^ Сторонние зависимости, например LLVM или MSVC , регулируются собственными лицензиями. [3] [4]
  4. ^ Перейти обратно: а б с д Это ж Этот литерал использует явный суффикс, который не нужен, если тип можно определить из контекста.
  5. ^ Интерпретируется как i32 по умолчанию или выводится из контекста
  6. ^ Тип, выведенный из контекста.
  7. ^ В системах Unix это часто строки UTF-8 без внутреннего 0 байта. В Windows это строки UTF-16 без внутреннего 0 байта. В отличие от этих, str и String всегда действительны в формате UTF-8 и могут содержать внутренние нули.
  8. ^ То есть среди респондентов, которые проделали «обширную работу по разработке [с Rust] за последний год» (13,05%), у Rust был самый большой процент тех, кто также выразил интерес к «работе с [Rust] в следующем году» ( 84,66%). [190]

Ссылки [ править ]

Источники книг [ править ]

  • Гьенгсет, Джон (2021). Ржавчина для рустообразных (1-е изд.). Нет крахмального пресса. ISBN  9781718501850 . OCLC   1277511986 .
  • Клабник, Стив; Николс, Кэрол (12 августа 2019 г.). Язык программирования Rust (охватывает Rust 2018) . Нет крахмального пресса. ISBN  978-1-7185-0044-0 .
  • Блэнди, Джим; Орендорф, Джейсон; Тиндалл, Леонора Ф.С. (2021). Программирование на Rust: быстрая и безопасная разработка систем (2-е изд.). О'Рейли Медиа. ISBN  978-1-4920-5254-8 . OCLC   1289839504 .
  • Макнамара, Тим (2021). Ржавчина в действии . Публикации Мэннинга. ISBN  978-1-6172-9455-6 . OCLC   1153044639 .
  • Клабник, Стив; Николс, Кэрол (2023). Язык программирования Rust (2-е изд.). Нет крахмального пресса. ISBN  978-1-7185-0310-6 . OCLC   1363816350 .

Другие [ править ]

  1. ^ «Анонсируем Rust 1.78.0» . 2 мая 2024 г. Проверено 2 мая 2024 г.
  2. ^ Перейти обратно: а б «Поддержка платформы» . Русская книга . Проверено 27 июня 2022 г.
  3. ^ «Язык программирования Rust» . Язык программирования Rust. 2022-10-19.
  4. ^ Перейти обратно: а б с д Это ж г час я дж к л м н О «Влияния — Справочник по ржавчине» . Справочник по ржавчине . Архивировано из оригинала 26 ноября 2023 г. Проверено 31 декабря 2023 г.
  5. ^ «Типы уникальности» . Ржавый блог . Проверено 8 октября 2016 г. Те из вас, кто знаком со стилем Elm, возможно, поймут, что обновленный Сообщения --explain черпают вдохновение из подхода Elm.
  6. ^ «Типы уникальности» . Документация Идрис 1.3.3 . Проверено 14 июля 2022 г. Они вдохновлены… типами владения и заимствованными указателями из языка программирования Rust.
  7. ^ «Microsoft открывает на GitHub язык программирования Project Verona, вдохновленный Rust» . ЗДНет . Архивировано из оригинала 17 января 2020 г. Проверено 17 января 2020 г.
  8. ^ Джалоян, Жорж-Аксель (19 октября 2017 г.). «Безопасные указатели в СПАРК 2014». arXiv : 1710.07047 [ cs.PL ].
  9. ^ Латтнер, Крис. «Домашняя страница Криса Лэттнера» . Nondot.org . Архивировано из оригинала 25 декабря 2018 г. Проверено 14 мая 2019 г.
  10. ^ «V документация (Введение)» . Гитхаб . Проверено 4 ноября 2023 г.
  11. ^ Егулалп, Сердар (29 августа 2016 г.). «Новый претендент присоединяется к Rust, чтобы свергнуть язык C» . Инфомир . Проверено 19 октября 2022 г.
  12. ^ Эшварла, Прабху (24 декабря 2020 г.). Практическое системное программирование для разработчиков Rust: создавайте быстрое и безопасное программное обеспечение для систем Linux/Unix с помощью практических примеров . Packt Publishing Ltd. ISBN  978-1-80056-201-1 .
  13. ^ Блэнди, Джим; Орендорф, Джейсон (21 ноября 2017 г.). Программирование на Rust: быстрая и безопасная разработка систем . O'Reilly Media, Inc. ISBN  978-1-4919-2725-0 .
  14. ^ Бланко-Куаресма, Сержи; Болмонт, Эмелин (30 мая 2017 г.). «Что язык программирования Rust может сделать для астрофизики?» . Труды Международного астрономического союза . 12 (С325): 341–344. arXiv : 1702.02951 . Бибкод : 2017IAUS..325..341B . дои : 10.1017/S1743921316013168 . ISSN   1743-9213 . S2CID   7857871 .
  15. ^ Перейти обратно: а б Перкель, Джеффри М. (01 декабря 2020 г.). «Почему ученые обращаются к Rust» . Природа . 588 (7836): 185–186. Бибкод : 2020Natur.588..185P . дои : 10.1038/d41586-020-03382-2 . ПМИД   33262490 . S2CID   227251258 . Архивировано из оригинала 06 мая 2022 г. Проверено 15 мая 2022 г.
  16. ^ «Ученый-компьютерщик доказывает заявления о безопасности языка программирования Rust» . ЭврекАлерт! . Архивировано из оригинала 24 февраля 2022 г. Проверено 15 мая 2022 г.
  17. ^ Юнг, Ральф; Журдан, Жак-Анри; Кребберс, Робберт; Дрейер, Дерек (27 декабря 2017 г.). «RustBelt: закрепление основ языка программирования Rust» . Труды ACM по языкам программирования . 2 (ПОПЛ): 66:1–66:34. дои : 10.1145/3158154 . hdl : 21.11116/0000-0003-34C6-3 . S2CID   215791659 .
  18. ^ Юнг, Ральф (2020). Понимание и развитие языка программирования Rust (кандидатская диссертация). Саарский университет . дои : 10.22028/D291-31946 . Архивировано из оригинала 8 марта 2022 г. Проверено 15 мая 2022 г.
  19. ^ Перейти обратно: а б Томпсон, Клайв (14 февраля 2023 г.). «Как Rust превратился из побочного проекта в самый любимый в мире язык программирования» . Обзор технологий Массачусетского технологического института . Проверено 23 февраля 2023 г.
  20. ^ Перейти обратно: а б с Аврам, Авель (3 августа 2012 г.). «Интервью о Rust, языке системного программирования, разработанном Mozilla» . ИнфоВ. Архивировано из оригинала 24 июля 2013 г. Проверено 17 августа 2013 г.
  21. ^ Асай, Мэтт (12 апреля 2021 г.). «Rust, а не Firefox, является величайшим вкладом Mozilla в индустрию» . Техреспублика . Проверено 7 июля 2022 г.
  22. ^ Хоар, Грейдон (7 июля 2010 г.). Проект Серво (PDF) . Ежегодный саммит Mozilla 2010. Уистлер, Канада. Архивировано (PDF) из оригинала 11 июля 2017 г. Проверено 22 февраля 2017 г.
  23. ^ «Ржавый логотип» . bugzilla.mozilla.org . Проверено 2 февраля 2024 г.
  24. ^ Хоар, Грейдон (29 марта 2012 г.). «[rust-dev] Выпущена версия Rust 0.2» . mail.mozilla.org . Архивировано из оригинала 06.11.2022 . Проверено 4 апреля 2024 г.
  25. ^ Хоар, Грейдон (12 июля 2012 г.). «[rust-dev] Выпущена версия Rust 0.3» . mail.mozilla.org . Архивировано из оригинала 24 августа 2022 г. Проверено 12 июня 2022 г.
  26. ^ Хоар, Грейдон (15 октября 2012 г.). «[rust-dev] Выпущена версия Rust 0.4» . mail.mozilla.org . Архивировано из оригинала 31 октября 2021 г. Проверено 31 октября 2021 г.
  27. ^ Бинсток, Эндрю (07 января 2014 г.). «Взлет и падение языков в 2013 году» . Журнал доктора Добба . Архивировано из оригинала 7 августа 2016 г. Проверено 20 ноября 2022 г.
  28. ^ «История версий» . Гитхаб . Архивировано из оригинала 15 мая 2015 г. Проверено 1 января 2017 г.
  29. ^ Команда Rust Core (15 мая 2015 г.). «Анонсируем Rust 1.0» . Ржавый блог . Архивировано из оригинала 15 мая 2015 г. Проверено 11 декабря 2015 г.
  30. ^ Лардинуа, Фредерик (29 сентября 2017 г.). «Пришло время дать Firefox еще один шанс» . ТехКранч . Проверено 15 августа 2023 г.
  31. ^ Чимпану, Каталин (11 августа 2020 г.). «Mozilla увольняет 250 сотрудников и переориентируется на коммерческие продукты» . ЗДНет . Архивировано из оригинала 18 марта 2022 г. Проверено 2 декабря 2020 г.
  32. ^ Купер, Дэниел (11 августа 2020 г.). «Mozilla увольняет 250 сотрудников из-за пандемии» . Engadget . Архивировано из оригинала 13 декабря 2020 г. Проверено 2 декабря 2020 г.
  33. ^ Тунг, Лиам. «Язык программирования Rust: сокращение рабочих мест в Mozilla сильно ударило по нам, но вот как мы выживем» . ЗДНет. Архивировано из оригинала 21 апреля 2022 г. Проверено 21 апреля 2022 г.
  34. ^ «Закладываем фундамент для будущего Rust» . Ржавый блог . 18.08.2020. Архивировано из оригинала 2 декабря 2020 г. Проверено 2 декабря 2020 г.
  35. ^ "Привет, мир!" . Фонд ржавчины . 08.02.2020. Архивировано из оригинала 19 апреля 2022 г. Проверено 4 июня 2022 г.
  36. ^ «Mozilla приветствует Rust Foundation» . Блог Мозиллы . 09.02.2021. Архивировано из оригинала 08 февраля 2021 г. Проверено 9 февраля 2021 г.
  37. ^ Амадео, Рон (07 апреля 2021 г.). «Google сейчас пишет низкоуровневый код Android на Rust» . Арс Техника . Архивировано из оригинала 8 апреля 2021 г. Проверено 8 апреля 2021 г.
  38. ^ Андерсон, Тим (23 ноября 2021 г.). «Вся команда модераторов Rust уходит в отставку» . Регистр . Проверено 4 августа 2022 г.
  39. ^ «Обновление управления» . Блог изнутри Rust . Проверено 27 октября 2022 г.
  40. ^ Клэберн, Томас (17 апреля 2023 г.). «Rust Foundation приносит извинения за путаницу в политике в отношении товарных знаков» . Регистр . Проверено 7 мая 2023 г.
  41. ^ Доказано, Лиам (27 ноября 2019 г.). «Ребекка Рамбул назначена новым генеральным директором The Rust Foundation» . Регистр . Проверено 14 июля 2022 г. Оба являются языками с фигурными скобками и синтаксисом, подобным C, что делает их непугающими для программистов C.
  42. ^ Перейти обратно: а б Брэндон Вильяроло (10 февраля 2021 г.). «Язык программирования Rust теперь имеет свою независимую основу» . Техреспублика . Проверено 14 июля 2022 г.
  43. ^ Клабник и Николс 2019 , с. 263.
  44. ^ Клабник и Николс 2019 , стр. 5–6.
  45. ^ Клабник и Николс 2019 , стр. 49–57.
  46. ^ Клабник и Николс 2019 , стр. 104–109.
  47. ^ Клабник и Николс 2019 , с. 49.
  48. ^ Клабник и Николс 2019 , стр. 50–53.
  49. ^ Тайсон, Мэтью (3 марта 2022 г.). «Программирование на Rust для Java-разработчиков» . Инфомир . Проверено 14 июля 2022 г.
  50. ^ «Замыкания — пример ржавчины» . doc.rust-lang.org .
  51. ^ Перейти обратно: а б «В качестве входных параметров — пример Rust» . doc.rust-lang.org .
  52. ^ «Время жизни — ржавчина на примере» . doc.rust-lang.org .
  53. ^ Клабник и Николс 2019 , стр. 24.
  54. ^ Клабник и Николс 2019 , стр. 32–33.
  55. ^ Клабник и Николс 2019 , стр. 36–38.
  56. ^ Клабник и Николс 2019 , стр. 39–40.
  57. ^ "ул – Руст" . doc.rust-lang.org . Проверено 23 июня 2023 г.
  58. ^ «срез – Ржавчина» . doc.rust-lang.org . Проверено 23 июня 2023 г.
  59. ^ «Кортежи» . Ржавчина на примере . Проверено 1 октября 2023 г.
  60. ^ «OsStr в std::ffi — Rust» . doc.rust-lang.org . Проверено 2 октября 2023 г.
  61. ^ «OsString в std::ffi — Rust» . doc.rust-lang.org . Проверено 2 октября 2023 г.
  62. ^ «Путь в std::path — Rust» . doc.rust-lang.org . Проверено 2 октября 2023 г.
  63. ^ «PathBuf в std::path — Rust» . doc.rust-lang.org . Проверено 2 октября 2023 г.
  64. ^ Перейти обратно: а б с "std::boxed — Rust" . doc.rust-lang.org . Проверено 23 июня 2023 г.
  65. ^ "std::boxed — Rust" . doc.rust-lang.org . Проверено 24 июня 2023 г.
  66. ^ «Rc в std::rc — Rust» . doc.rust-lang.org . Проверено 24 июня 2023 г.
  67. ^ «Дуга в std::sync — Rust» . doc.rust-lang.org . Проверено 24 июня 2023 г.
  68. ^ «Ячейка в std::cell — Rust» . doc.rust-lang.org . Проверено 24 июня 2023 г.
  69. ^ «Мьютекс в std::sync — Rust» . doc.rust-lang.org . Проверено 24 июня 2023 г.
  70. ^ «RwLock в std::sync — Rust» . doc.rust-lang.org . Проверено 24 июня 2023 г.
  71. ^ «Кондвар в std::sync — Rust» . doc.rust-lang.org . Проверено 24 июня 2023 г.
  72. ^ «Продолжительность в std::time – Rust» . doc.rust-lang.org . Проверено 24 июня 2023 г.
  73. ^ «HashMap в std::collections — Rust» . doc.rust-lang.org . Проверено 24 июня 2023 г.
  74. ^ «BTreeMap в std::collections — Rust» . doc.rust-lang.org . Проверено 24 июня 2023 г.
  75. ^ Макнамара 2021 .
  76. ^ Клабник и Николс 2019 , стр. 101–104.
  77. ^ "std::option - Rust" . doc.rust-lang.org . Проверено 12 ноября 2023 г.
  78. ^ Перейти обратно: а б Клабник и Николс 2019 , стр. 418–427.
  79. ^ Клабник и Николс 2019 , с. 83.
  80. ^ Клабник и Николс 2019 , с. 97.
  81. ^ Клабник и Николс 2019 , стр. 98–101.
  82. ^ Клабник и Николс 2019 , стр. 438–440.
  83. ^ Перейти обратно: а б Клабник и Николс 2019 , стр. 93.
  84. ^ «Литье — ржавчина на примере» . doc.rust-lang.org .
  85. ^ Клабник и Николс 2019 , стр. 59–61.
  86. ^ Перейти обратно: а б Клабник и Николс 2019 , стр. 63–68.
  87. ^ Клабник и Николс 2019 , стр. 74–75.
  88. ^ Баласубраманиан, Абхирам; Барановский, Марек С.; Бурцев Антон; Панда, Ауроджит; Ракамарич, Звонимир; Рыжик, Леонид (07.05.2017). «Системное программирование на Rust» . Материалы 16-го семинара по актуальным темам операционных систем . ХоОС '17. Нью-Йорк, штат Нью-Йорк, США: Ассоциация вычислительной техники. стр. 156–161. дои : 10.1145/3102980.3103006 . ISBN  978-1-4503-5068-6 . S2CID   24100599 . Архивировано из оригинала 11 июня 2022 г. Проверено 1 июня 2022 г.
  89. ^ Клабник и Николс 2023 , стр. 327–30.
  90. ^ Клабник и Николс 2019 , с. 194.
  91. ^ Клабник и Николс 2019 , стр. 75, 134.
  92. ^ Шамрелл-Харрингтон, Нелл. «Проверка заемных средств на ржавчину – глубокое погружение» . ИнфоQ . Проверено 25 июня 2022 г.
  93. ^ Клабник и Николс 2019 , стр. 194–195.
  94. ^ Клабник и Николс 2019 , стр. 192–204.
  95. ^ Клабник и Николс 2019 , стр. 201–203.
  96. ^ Розенблатт, Сет (3 апреля 2013 г.). «Samsung присоединяется к Mozilla в поисках Rust» . CNET . Архивировано из оригинала 4 апреля 2013 г. Проверено 5 апреля 2013 г.
  97. ^ Браун, Нил (17 апреля 2013 г.). «Вкус ржавчины» . Архивировано из оригинала 26 апреля 2013 г. Проверено 25 апреля 2013 г.
  98. ^ «Гонки – Рустономикон» . doc.rust-lang.org . Архивировано из оригинала 10 июля 2017 г. Проверено 3 июля 2017 г.
  99. ^ «Часто задаваемые вопросы по языку Rust» . static.rust-lang.org . 2015. Архивировано из оригинала 20 апреля 2015 г. Проверено 24 апреля 2017 г.
  100. ^ Макнамара 2021 , с. 139, 376–379, 395.
  101. ^ «RAII – ржавчина на примере» . doc.rust-lang.org . Архивировано из оригинала 21 апреля 2019 г. Проверено 22 ноября 2020 г.
  102. ^ «Абстракция без накладных расходов: особенности Rust» . Ржавый блог . Архивировано из оригинала 23 сентября 2021 г. Проверено 19 октября 2021 г.
  103. ^ «Коробка, стопка и куча» . Ржавчина на примере . Проверено 13 июня 2022 г.
  104. ^ Клабник и Николс 2019 , стр. 70–75.
  105. ^ Клабник и Николс 2019 , с. 323.
  106. ^ Клабник и Николс 2019 , стр. 171–172.
  107. ^ Клабник и Николс 2019 , стр. 171–172, 205.
  108. ^ Клабник и Николс 2019 , стр. 181, 182.
  109. ^ Генсет 2021 , стр. 25.
  110. ^ Клабник и Николс 2019 , стр. 182–184.
  111. ^ Клабник и Николс 2019 , стр. 281–283.
  112. ^ «Использование объектов-типов, допускающих значения разных типов — язык программирования Rust» . doc.rust-lang.org . Проверено 11 июля 2022 г.
  113. ^ Клабник и Николс 2019 , стр. 441–442.
  114. ^ Клабник и Николс 2019 , стр. 379–380.
  115. ^ «Макросы на примере» . Справочник по ржавчине . Проверено 21 апреля 2023 г.
  116. ^ Клабник и Николс 2019 , стр. 446–448.
  117. ^ «Процедурные макросы» . Справочник по языку программирования Rust . Архивировано из оригинала 07.11.2020 . Проверено 23 марта 2021 г.
  118. ^ Клабник и Николс 2019 , стр. 449–455.
  119. ^ «Серде Дериве» . Документация Serde Derive . Архивировано из оригинала 17 апреля 2021 г. Проверено 23 марта 2021 г.
  120. ^ «extendr_api — Руст» . Документация по API Extendr . Архивировано из оригинала 25 мая 2021 г. Проверено 23 марта 2021 г.
  121. ^ «Вариадики» . Ржавчина на примере .
  122. ^ «2137-вариативный» . Книга Rust RFC .
  123. ^ «Безопасное взаимодействие Rust и C++ с CXX» . ИнфоQ . 06.12.2020. Архивировано из оригинала 22 января 2021 г. Проверено 03 января 2021 г.
  124. ^ «Макет текста – Справочник по Rust» . doc.rust-lang.org . Проверено 15 июля 2022 г.
  125. ^ Бланди, Орендорф и Тиндалл, 2021 , стр. 6–8.
  126. ^ Макнамара 2021 , стр. 411–412.
  127. ^ «Обзор компилятора» . Руководство по разработке компилятора Rust . Проверено 2 июня 2023 г.
  128. ^ «Генерация кода — Руководство по разработке компилятора Rust» . rust-dev-guide.rust-lang.org . Проверено 3 марта 2024 г.
  129. ^ "rust-lang/rustc_codegen_gcc" . Гитхаб . Язык программирования Rust. 02.03.2024 . Проверено 3 марта 2024 г.
  130. ^ "rust-lang/rustc_codegen_cranelift" . Гитхаб . Язык программирования Rust. 02.03.2024 . Проверено 3 марта 2024 г.
  131. ^ Генсет 2021 , стр. 213-215.
  132. ^ Симоне, Серджио Де (18 апреля 2019 г.). «Rust 1.34 представляет альтернативные реестры для закрытых крейтов» . ИнфоQ . Проверено 14 июля 2022 г.
  133. ^ Клабник и Николс 2019 , стр. 511–512.
  134. ^ Clippy , Язык программирования Rust, 30 ноября 2023 г. , получено 30 ноября 2023 г.
  135. ^ «Клиппи Линтс» . Язык программирования Rust . Проверено 30 ноября 2023 г.
  136. ^ Klabnik & Nichols 2019 , Приложение G – Как создается ржавчина и «Ночная ржавчина»
  137. ^ Бланди, Орендорф и Тиндалл, 2021 , стр. 176–177.
  138. ^ Андерсон, Тим (5 июля 2022 г.). «Команда Rust выпускает версию 1.62, устанавливает дату окончания поддержки устаревшего языкового сервера» . ДЕВКЛАСС . Проверено 14 июля 2022 г.
  139. ^ Клабник и Николс 2023 , с. 623.
  140. ^ Макнамара 2021 , с. 11.
  141. ^ Попеску, Натали; Сюй, Цзыян; Апостолакис, Сотирис; Август, Дэвид И.; Леви, Амит (15 октября 2021 г.). «Безопаснее на любой скорости: автоматическое контекстно-зависимое повышение безопасности для Rust» . Труды ACM по языкам программирования . 5 (ООПСЛА). Раздел 2. doi : 10.1145/3485480 . S2CID   238212612 . п. 5: Мы наблюдаем большую разницу в издержках проверенного индексирования: 23,6% тестов сообщают о значительном снижении производительности от проверенного индексирования, но 64,5% сообщают о незначительном влиянии или его отсутствии, и, что удивительно, 11,8% сообщают об улучшении производительности... В конечном итоге , хотя неконтролируемое индексирование может улучшить производительность, в большинстве случаев это не так.
  142. ^ Андерсон, Тим. «Может ли Руст спасти планету? Почему и почему бы и нет» . Регистр . Проверено 11 июля 2022 г.
  143. ^ Баласубраманиан, Абхирам; Барановский, Марек С.; Бурцев Антон; Панда, Ауроджит; Ракамарич, Звонимир; Рыжик, Леонид (07.05.2017). «Системное программирование на Rust» . Материалы 16-го семинара по актуальным темам операционных систем . Уистлер, Британская Колумбия, Канада: ACM. стр. 156–161. дои : 10.1145/3102980.3103006 . ISBN  978-1-4503-5068-6 . S2CID   24100599 .
  144. ^ Егулалп, Сердар (06 октября 2021 г.). «Что такое язык Rust? Безопасная, быстрая и простая разработка программного обеспечения» . Инфомир . Проверено 25 июня 2022 г.
  145. ^ Врубель, Кшиштоф (11 апреля 2022 г.). «Rust-проекты – почему крупные IT-компании используют Rust?» . Архивировано из оригинала 27 декабря 2022 г.
  146. ^ Макнамара 2021 , с. 19, 27.
  147. ^ Купри, Жоффруа (2015). «Ном, байт-ориентированная, потоковая передача, нулевое копирование, библиотека комбинаторов парсеров в Rust» . Семинары IEEE по безопасности и конфиденциальности , 2015 г. стр. 142–148. дои : 10.1109/SPW.2015.31 . ISBN  978-1-4799-9933-0 . S2CID   16608844 .
  148. ^ Макнамара 2021 , с. 20.
  149. ^ «Генерация кода — Справочник по Rust» . doc.rust-lang.org . Проверено 9 октября 2022 г.
  150. ^ «Насколько быстро ржавеет?» . Часто задаваемые вопросы по языку программирования Rust . Архивировано из оригинала 28 октября 2020 г. Проверено 11 апреля 2019 г.
  151. ^ Фаршин, Алиреза; Барбетт, Том; Рузбе, Амир; Магуайр-младший, Джеральд К.; Костич, Деян (2021). «PacketMill: к сети со скоростью 100 ГБ/с на каждое ядро». Материалы 26-й Международной конференции ACM по архитектурной поддержке языков программирования и операционных систем . стр. 1–17. дои : 10.1145/3445814.3446724 . ISBN  9781450383172 . S2CID   231949599 . Проверено 12 июля 2022 г. ... В то время как некоторые компиляторы (например, Rust) поддерживают переупорядочение структур [82], компиляторам C и C++ запрещено переупорядочивать структуры данных (например, структуру или класс) [74] ...
  152. ^ «Тип-макет» . Справочник по ржавчине . Проверено 14 июля 2022 г.
  153. ^ Лардинуа, Фредерик (3 апреля 2015 г.). «Mozilla и Samsung объединяются для разработки Servo, браузерного движка следующего поколения Mozilla для многоядерных процессоров» . ТехКранч . Архивировано из оригинала 10 сентября 2016 г. Проверено 25 июня 2017 г.
  154. ^ Кейзер, Грегг (31 октября 2016 г.). «Mozilla планирует омолодить Firefox в 2017 году» . Компьютерный мир . Проверено 13 мая 2023 г.
  155. ^ «Поддержка использования Rust в проекте Chromium» . Блог Google по онлайн-безопасности . Проверено 12 ноября 2023 г.
  156. ^ Шенкленд, Стивен (12 июля 2016 г.). «Firefox будет переработан, чтобы снова заинтересовать вас» . CNET . Проверено 14 июля 2022 г.
  157. ^ Группа исследования безопасности (04.10.2013). «ZeroMQ: помогает нам блокировать вредоносные домены в режиме реального времени» . Зонт Циско . Архивировано из оригинала 13 мая 2023 г. Проверено 13 мая 2023 г.
  158. ^ «Как наша команда AWS Rust внесет вклад в будущие успехи Rust» . Веб-сервисы Amazon . 03.03.2021. Архивировано из оригинала 2 января 2022 г. Проверено 02 января 2022 г.
  159. ^ «Firecracker — облегченная виртуализация для бессерверных вычислений» . Веб-сервисы Amazon . 2018-11-26. Архивировано из оригинала 08 декабря 2021 г. Проверено 02 января 2022 г.
  160. ^ «Анонсируем общедоступность Bottlerocket, дистрибутива Linux с открытым исходным кодом, созданного для запуска контейнеров» . Веб-сервисы Amazon . 2020-08-31. Архивировано из оригинала 2 января 2022 г. Проверено 02 января 2022 г.
  161. ^ «Почему AWS любит Rust и как мы хотели бы помочь» . Веб-сервисы Amazon . 24.11.2020. Архивировано из оригинала 03 декабря 2020 г. Проверено 21 апреля 2022 г.
  162. ^ Николс, Шон (27 июня 2018 г.). «Следующий трюк Microsoft? Перенос данных из облака в Azure IoT Edge» . Регистр . Архивировано из оригинала 27 сентября 2019 г. Проверено 27 сентября 2019 г.
  163. ^ Тунг, Лиам. «Microsoft: почему мы использовали язык программирования Rust вместо Go для WebAssembly в приложении Kubernetes» . ЗДНет. Архивировано из оригинала 21 апреля 2022 г. Проверено 21 апреля 2022 г.
  164. ^ «Как мы создавали правила брандмауэра» . Блог Cloudflare . 04.03.2019 . Проверено 11 июня 2022 г.
  165. ^ «Наслаждайтесь QUIC и Rust!» . Блог Cloudflare . 22 января 2019 г. Проверено 11 июня 2022 г.
  166. ^ Андерсон, Тим (07 декабря 2021 г.). «Ржавое ядро ​​Linux становится ближе с новым патчем» . Регистр . Проверено 14 июля 2022 г.
  167. ^ «Первый взгляд на Rust в ядре 6.1 [LWN.net]» . lwn.net . Проверено 11 ноября 2023 г.
  168. ^ «Rust на платформе Android» . Блог Google по онлайн-безопасности . Архивировано из оригинала 3 апреля 2022 г. Проверено 21 апреля 2022 г.
  169. ^ Амадео, Рон (07 апреля 2021 г.). «Google сейчас пишет низкоуровневый код Android на Rust» . Арс Техника . Архивировано из оригинала 8 апреля 2021 г. Проверено 21 апреля 2022 г.
  170. ^ Клэберн, Томас (27 апреля 2023 г.). «Microsoft переписывает основные библиотеки Windows на Rust» . Регистр . Проверено 13 мая 2023 г.
  171. ^ Доказано, Лиам. «Маленькая, но мощная «Humanbiologics» компании 9Front создана для по-настоящему любопытных» . Регистр . Проверено 7 марта 2024 г.
  172. ^ Егулалп, Сердар. «Ос Redox от Rust может показать Linux несколько новых трюков» . Инфомир . Архивировано из оригинала 21 марта 2016 г. Проверено 21 марта 2016 г.
  173. ^ Андерсон, Тим (14 января 2021 г.). «Еще одна ОС в стиле Rust: Тесей присоединяется к Redox в поисках более безопасных и отказоустойчивых систем» . Регистр . Проверено 14 июля 2022 г.
  174. ^ Боос, Кевин; Лиянаге, Намита; Иджаз, Рамла; Чжун, Линь (2020). Тезей: эксперимент в структуре операционной системы и управлении состоянием . стр. 1–19. ISBN  978-1-939133-19-9 .
  175. ^ Чжан, ХаньДун (Алекс) (31 января 2023 г.). «Обзор 2022 года | Внедрение Rust в бизнес» . Журнал Ржавчина . Проверено 7 февраля 2023 г.
  176. ^ Сей, Марк (10 октября 2018 г.). «Новые возможности Fedora 29: Start теперь официально в Fedora» . Марксей, Еженедельные таблетки сисадмина . Архивировано из оригинала 13 апреля 2019 г. Проверено 13 мая 2019 г.
  177. ^ Провен, Лиам (12 июля 2022 г.). «Выпущен Oracle Linux 9 с некоторыми интересными дополнениями» . Регистр . Проверено 14 июля 2022 г.
  178. ^ Патель, Пратам (14 января 2022 г.). «Я попробовал новый рабочий стол COSMIC на базе Rust от System76!» . Это Новости FOSS – Новости развития . Это новости ФОСС . Проверено 10 января 2023 г.
  179. ^ «Поп!_OS от System76» . pop.system76.com . Система76, Инк . Проверено 10 января 2023 г.
  180. ^ Симоне, Серджио Де. «NPM внедрила Rust для устранения узких мест в производительности» . ИнфоQ . Проверено 20 ноября 2023 г.
  181. ^ Лю, Шинг (2020), Лю, Шинг (редактор), «Добро пожаловать в мир Rust» , Практические проекты Rust: создание игр, физические вычисления и приложения машинного обучения , Беркли, Калифорния: Apress, стр. 1–8 , doi : 10.1007/978-1-4842-5599-5_1 , ISBN  978-1-4842-5599-5 , получено 29 ноября 2023 г.
  182. ^ Лю, Шинг (2021), Лю, Шинг (ред.), «Rust в мире Интернета» , « Практические веб-проекты Rust: создание облачных и веб-приложений », Беркли, Калифорния: Apress, стр. 1–7, doi : 10.1007/978-1-4842-6589-5_1 , ISBN  978-1-4842-6589-5 , получено 29 ноября 2023 г.
  183. ^ Ху, Вивиан (12 июня 2020 г.). «Deno готов к производству» . ИнфоQ . Проверено 14 июля 2022 г.
  184. ^ Абрамс, Лоуренс (6 февраля 2021 г.). «Этот эмулятор Flash Player позволяет безопасно играть в старые игры» . Мигающий компьютер . Проверено 25 декабря 2021 г.
  185. ^ Хариф, Ольга (17 октября 2020 г.). «Убийца блокчейна Ethereum носит скромное имя Polkadot» . Блумберг ЛП . Проверено 14 июля 2021 г.
  186. ^ Ховарт, Джесси (04 февраля 2020 г.). «Почему Discord переходит с Go на Rust» . Архивировано из оригинала 30 июня 2020 г. Проверено 14 апреля 2020 г.
  187. ^ Команда Dropbox Capture. «Почему мы создали собственную библиотеку Rust для Capture» . Dropbox.Tech . Архивировано из оригинала 6 апреля 2022 г. Проверено 21 апреля 2022 г.
  188. ^ «Краткая история Rust в Facebook» . Инженерное дело в Мете . 29 апреля 2021 г. Архивировано из оригинала 19 января 2022 г. Проверено 21 апреля 2022 г.
  189. ^ Перейти обратно: а б с «Опрос разработчиков Stack Overflow, 2023 г.» . Переполнение стека . Проверено 25 июня 2023 г.
  190. ^ Клэберн, Томас (23 июня 2022 г.). «Линус Торвальдс говорит, что Rust появится в ядре Linux» . Регистр . Проверено 15 июля 2022 г.
  191. ^ Клабник и Николс 2019 , с. 4.
  192. ^ "Начиная" . www.rust-lang.org . Архивировано из оригинала 01.11.2020 . Проверено 11 октября 2020 г.
  193. ^ Тунг, Лиам (08 февраля 2021 г.). «Язык программирования Rust сделал огромный шаг вперед» . ЗДНет . Проверено 14 июля 2022 г.
  194. ^ Крилл, Пол. «Язык Rust переходит на самостоятельную основу» . Инфомир . Архивировано из оригинала 10 апреля 2021 г. Проверено 10 апреля 2021 г.
  195. ^ Воган-Николс, Стивен Дж. (9 апреля 2021 г.). «Шейн Миллер из AWS возглавит недавно созданный Rust Foundation» . ЗДНет . Архивировано из оригинала 10 апреля 2021 г. Проверено 10 апреля 2021 г.
  196. ^ Воан-Николс, Стивен Дж. (17 ноября 2021 г.). «Rust Foundation назначает Ребекку Рамбул исполнительным директором» . ЗДНет . Архивировано из оригинала 18 ноября 2021 г. Проверено 18 ноября 2021 г.
  197. ^ «Язык программирования Rust теперь имеет свою независимую основу» . Техреспублика . 10 февраля 2021 г. Архивировано из оригинала 18 ноября 2021 г. Проверено 18 ноября 2021 г.
  198. ^ «Управление» . Язык программирования Rust . Архивировано из оригинала 10 мая 2022 г. Проверено 7 мая 2022 г.
  199. ^ «Представляем Совет лидеров Rust» . Ржавый блог . Проверено 12 января 2024 г.

Дальнейшее чтение [ править ]

  • Блэнди, Джим; Орендорф, Джейсон; Тиндалл, Леонора Ф.С. (06 июля 2021 г.). Программирование на Rust: быстрая и безопасная разработка систем . О'Рейли Медиа. ISBN  978-1-4920-5259-3 .

Внешние ссылки [ править ]

Arc.Ask3.Ru: конец оригинального документа.
Arc.Ask3.Ru
Номер скриншота №: 352D231EDBF78CE19473668F35F50F94__1717066020
URL1:https://en.wikipedia.org/wiki/Rust_(programming_language)
Заголовок, (Title) документа по адресу, URL1:
Rust (programming language) - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть, любые претензии не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, денежную единицу можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)