Руст (язык программирования)
![]() | |
Парадигмы | |
---|---|
Разработчик | Фонд ржавчины |
Впервые появился | 15 мая 2015 г |
Стабильная версия | 1.78.0 [1] ![]() |
Дисциплина набора текста | |
Язык реализации | Ржавчина |
Платформа | Кросс-платформенный [примечание 1] |
ТЫ | Кросс-платформенный [заметка 2] |
Лицензия | Массачусетский технологический институт и Apache 2.0 [заметка 3] |
Расширения имен файлов | .rs , .rlib |
Веб-сайт | www |
Под влиянием | |
Под влиянием | |
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]
История [ править ]
( ) 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]
Примитивные типы [ править ]
Тип | Описание | Примеры |
---|---|---|
bool
|
Логическое значение |
|
u8
|
Беззнаковое 8-битное целое число ( байт ) |
|
|
Целые числа со знаком , до 128 бит. |
|
|
Целые числа без знака , до 128 бит. |
|
|
Целые числа размером с указатель (размер зависит от платформы ) |
|
|
Числа с плавающей запятой |
|
char
|
|
|
str
|
Срез строки в кодировке UTF-8 , примитивный тип строки. Обычно его видят в заимствованной форме, &str . Это также тип строковых литералов, &'static str [58]
|
|
[T; N]
|
Массив – совокупность N объектов одного типа T, хранящихся в непрерывной памяти. |
|
[T]
|
Срез — представление непрерывной последовательности динамического размера. [59] |
|
(T, U, ..)
|
Кортеж - конечная гетерогенная последовательность. | |
!
|
Никогда не вводите (недоступное значение) | let x = { return 123 };
|
Стандартная библиотека [ править ]
Тип | Описание | Примеры |
---|---|---|
String
|
Строки в кодировке UTF-8 (динамические) |
|
|
Собственные строки платформы [примечание 7] (заимствованный [61] и динамичный [62] ) |
|
|
Пути (заимствованные [63] и динамичный [64] ) |
|
|
C -совместимые строки с нулевым завершением (заимствованные [65] и динамичный [65] ) |
|
Vec<T>
|
Динамические массивы |
|
Option<T>
|
Тип опции |
|
Result<T, E>
|
Обработка ошибок с использованием типа результата |
|
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! ( "{имя}" );
}
}
Указатели [ править ]
Тип | Описание | Примеры |
---|---|---|
|
Ссылки (неизменяемые и изменяемые) |
|
|
|
|
|
Указатель на значение, выделенное в куче
(или, возможно, нулевой указатель, если он заключен в опцию) [65] |
|
|
|
Rust не использует нулевые указатели для обозначения отсутствия данных, так как это может привести к нулевому разыменованию . Соответственно, основные &
и &mut
ссылки гарантированно не будут нулевыми. Вместо этого Rust использует Option
для этой цели: Some(T)
указывает, что значение присутствует, и None
аналогичен нулевому указателю. [77] Option
реализует «оптимизацию нулевого указателя», избегая любых пространственных издержек для типов, которые не могут иметь нулевое значение (ссылки или NonZero
типы, например). [78]
В отличие от ссылок, типы необработанных указателей *const
и *mut
может быть нулевым; однако их невозможно разыменовать, если код явно не объявлен небезопасным с помощью unsafe
блокировать. В отличие от разыменования, создание необработанных указателей разрешено внутри безопасного кода Rust. [79]
Пользовательские типы [ править ]
Пользовательские типы создаются с помощью struct
или enum
ключевые слова. struct
Ключевое слово используется для обозначения типа записи , который группирует несколько связанных значений. [80] enum
s может принимать различные варианты во время выполнения, а его возможности аналогичны алгебраическим типам данных, встречающимся в функциональных языках программирования. [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 спроектирован так, чтобы быть безопасным для памяти . Он не допускает нулевых указателей, висячих указателей или гонок за данными . [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, а также возможность форматировать структуру для отладки.
![](http://upload.wikimedia.org/wikipedia/commons/thumb/b/b0/Rust_serde_UML_diagram.svg/220px-Rust_serde_UML_diagram.svg.png)
используйте 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
}
}
c_variadic
переключатель функций. Как и другие интерфейсы C, система считается unsafe
к Русту. [123] Интерфейс с C и C++ [ править ]
В Rust есть интерфейс внешних функций (FFI), который можно использовать как для вызова кода, написанного на таких языках, как C , из Rust, так и для вызова кода Rust с этих языков. По состоянию на 2024 год [update]существует внешняя библиотека CXX для вызова C++ или из него. [124] Rust и C различаются тем, как они размещают структуры в памяти, поэтому структурам Rust можно присвоить #[repr(C)]
атрибут, обеспечивающий тот же макет, что и эквивалентная структура C. [125]
Экосистема [ править ]
![](http://upload.wikimedia.org/wikipedia/commons/thumb/6/6b/Rustc_building_paru_with_cargo_screenshot.png/220px-Rustc_building_paru_with_cargo_screenshot.png)
Экосистема 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]
![](http://upload.wikimedia.org/wikipedia/commons/thumb/8/88/Crates.io_website.png/220px-Crates.io_website.png)
Должность [ править ]
Rust Cargo — это система сборки и менеджер пакетов . Он загружает, компилирует, распространяет и загружает пакеты, называемые ящиками , которые сохраняются в официальном реестре. Он также действует как интерфейс для Clippy и других компонентов Rust. [16]
По умолчанию Cargo получает свои зависимости из пользовательского реестра crates.io , но в качестве зависимостей также можно указать репозитории и ящики Git в локальной файловой системе, а также другие внешние источники. [133]
Рустфмт [ править ]
Rustfmt — форматировщик кода для Rust. Он форматирует пробелы и отступы для создания кода в соответствии с общим стилем , если не указано иное. Его можно вызвать как отдельную программу или из проекта Rust через Cargo. [134]
![](http://upload.wikimedia.org/wikipedia/commons/thumb/6/6c/Cargo_clippy_hello_world_example.png/220px-Cargo_clippy_hello_world_example.png)
Клиппи [ править ]
Clippy — это встроенный в Rust инструмент проверки , позволяющий улучшить корректность, производительность и читаемость кода Rust. По состоянию на 2024 год [update], он имеет более 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]
Принятие [ править ]
![](http://upload.wikimedia.org/wikipedia/commons/thumb/3/39/Home_page_servo_v0.01.png/220px-Home_page_servo_v0.01.png)
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]
![](http://upload.wikimedia.org/wikipedia/commons/thumb/b/b5/Ruffle.rs_demo_%281%29.png/220px-Ruffle.rs_demo_%281%29.png)
В веб-разработке менеджер пакетов 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]
Сообщество [ править ]
![Ярко-оранжевый значок краба](http://upload.wikimedia.org/wikipedia/commons/thumb/2/20/Rustacean-orig-noshadow.svg/220px-Rustacean-orig-noshadow.svg.png)
Фонд ржавчины [ править ]
![]() | |
Формирование | 8 февраля 2021 г |
---|---|
Основатели | |
Тип | Некоммерческая организация |
Расположение | |
Шейн Миллер | |
Ребекка Рамбул | |
Веб-сайт | фундамент |
Rust Foundation — это некоммерческая членская организация, зарегистрированная в США , основной целью которой является поддержка технического проекта в качестве юридического лица и помощь в управлении товарными знаками и инфраструктурными активами. [194] [43]
Он был создан 8 февраля 2021 года пятью корпоративными членами-учредителями (Amazon Web Services, Huawei, Google, Microsoft и Mozilla). [195] Совет фонда возглавляет Шейн Миллер. [196] С конца 2021 года ее исполнительным директором и генеральным директором станет Ребекка Рамбул. [197] До этого временным исполнительным директором была Эшли Уильямс. [198]
Управляющие команды [ править ]
Проект Rust состоит из команд , отвечающих за различные области разработки. Команда компилятора разрабатывает, управляет и оптимизирует внутренние компоненты компилятора; а языковая группа разрабатывает новые функции языка и помогает их реализовать. На сайте проекта Rust перечислены 9 команд высшего уровня по состоянию на январь 2024 года. [update]. [199] Представители команд образуют Лидерский совет, который курирует проект Rust в целом. [200]
См. также [ править ]
- Сравнение языков программирования
- История языков программирования
- Список языков программирования
- Список языков программирования по типам
Примечания [ править ]
- ^ Включая инструменты сборки, инструменты хоста и поддержку стандартных библиотек для x86-64 , ARM , MIPS , RISC-V , WebAssembly , i686 , AArch64 , PowerPC и s390x . [2]
- ^ Включая Windows , Linux , macOS , FreeBSD , NetBSD и Illumos . Инструменты сборки хоста для Android , iOS , Haiku , Redox и Fuchsia официально не поставляются; эти операционные системы поддерживаются в качестве целевых. [2]
- ^ Сторонние зависимости, например LLVM или MSVC , регулируются собственными лицензиями. [3] [4]
- ^ Перейти обратно: а б с д Это ж Этот литерал использует явный суффикс, который не нужен, если тип можно определить из контекста.
- ^ Интерпретируется как
i32
по умолчанию или выводится из контекста - ^ Тип, выведенный из контекста.
- ^ В системах Unix это часто строки UTF-8 без внутреннего 0 байта. В Windows это строки UTF-16 без внутреннего 0 байта. В отличие от этих,
str
иString
всегда действительны в формате UTF-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 .
Другие [ править ]
- ^ «Анонсируем Rust 1.78.0» . 2 мая 2024 г. Проверено 2 мая 2024 г.
- ^ Перейти обратно: а б «Поддержка платформы» . Русская книга . Проверено 27 июня 2022 г.
- ^ «Язык программирования Rust» . Язык программирования Rust. 2022-10-19.
- ^ «Правовая политика Rust» . Rust-lang.org . Архивировано из оригинала 4 апреля 2018 г. Проверено 03 апреля 2018 г.
- ^ Перейти обратно: а б с д Это ж г час я дж к л м н О «Влияния — Справочник по ржавчине» . Справочник по ржавчине . Архивировано из оригинала 26 ноября 2023 г. Проверено 31 декабря 2023 г.
- ^ «Типы уникальности» . Ржавый блог . Проверено 8 октября 2016 г.
Те из вас, кто знаком со стилем Elm, возможно, поймут, что обновленный Сообщения --explain черпают вдохновение из подхода Elm.
- ^ «Типы уникальности» . Документация Идрис 1.3.3 . Проверено 14 июля 2022 г.
Они вдохновлены… типами владения и заимствованными указателями из языка программирования Rust.
- ^ «Microsoft открывает на GitHub язык программирования Project Verona, вдохновленный Rust» . ЗДНет . Архивировано из оригинала 17 января 2020 г. Проверено 17 января 2020 г.
- ^ Джалоян, Жорж-Аксель (19 октября 2017 г.). «Безопасные указатели в СПАРК 2014». arXiv : 1710.07047 [ cs.PL ].
- ^ Латтнер, Крис. «Домашняя страница Криса Лэттнера» . Nondot.org . Архивировано из оригинала 25 декабря 2018 г. Проверено 14 мая 2019 г.
- ^ «V документация (Введение)» . Гитхаб . Проверено 4 ноября 2023 г.
- ^ Егулалп, Сердар (29 августа 2016 г.). «Новый претендент присоединяется к Rust, чтобы свергнуть язык C» . Инфомир . Проверено 19 октября 2022 г.
- ^ Эшварла, Прабху (24 декабря 2020 г.). Практическое системное программирование для разработчиков Rust: создавайте быстрое и безопасное программное обеспечение для систем Linux/Unix с помощью практических примеров . Packt Publishing Ltd. ISBN 978-1-80056-201-1 .
- ^ Блэнди, Джим; Орендорф, Джейсон (21 ноября 2017 г.). Программирование на Rust: быстрая и безопасная разработка систем . O'Reilly Media, Inc. ISBN 978-1-4919-2725-0 .
- ^ Бланко-Куаресма, Сержи; Болмонт, Эмелин (30 мая 2017 г.). «Что язык программирования Rust может сделать для астрофизики?» . Труды Международного астрономического союза . 12 (С325): 341–344. arXiv : 1702.02951 . Бибкод : 2017IAUS..325..341B . дои : 10.1017/S1743921316013168 . ISSN 1743-9213 . S2CID 7857871 .
- ^ Перейти обратно: а б Перкель, Джеффри М. (01 декабря 2020 г.). «Почему ученые обращаются к Rust» . Природа . 588 (7836): 185–186. Бибкод : 2020Natur.588..185P . дои : 10.1038/d41586-020-03382-2 . ПМИД 33262490 . S2CID 227251258 . Архивировано из оригинала 06 мая 2022 г. Проверено 15 мая 2022 г.
- ^ «Ученый-компьютерщик доказывает заявления о безопасности языка программирования Rust» . ЭврекАлерт! . Архивировано из оригинала 24 февраля 2022 г. Проверено 15 мая 2022 г.
- ^ Юнг, Ральф; Журдан, Жак-Анри; Кребберс, Робберт; Дрейер, Дерек (27 декабря 2017 г.). «RustBelt: закрепление основ языка программирования Rust» . Труды ACM по языкам программирования . 2 (ПОПЛ): 66:1–66:34. дои : 10.1145/3158154 . hdl : 21.11116/0000-0003-34C6-3 . S2CID 215791659 .
- ^ Юнг, Ральф (2020). Понимание и развитие языка программирования Rust (кандидатская диссертация). Саарский университет . дои : 10.22028/D291-31946 . Архивировано из оригинала 8 марта 2022 г. Проверено 15 мая 2022 г.
- ^ Перейти обратно: а б Томпсон, Клайв (14 февраля 2023 г.). «Как Rust превратился из побочного проекта в самый любимый в мире язык программирования» . Обзор технологий Массачусетского технологического института . Проверено 23 февраля 2023 г.
- ^ Перейти обратно: а б с Аврам, Авель (3 августа 2012 г.). «Интервью о Rust, языке системного программирования, разработанном Mozilla» . ИнфоВ. Архивировано из оригинала 24 июля 2013 г. Проверено 17 августа 2013 г.
- ^ Асай, Мэтт (12 апреля 2021 г.). «Rust, а не Firefox, является величайшим вкладом Mozilla в индустрию» . Техреспублика . Проверено 7 июля 2022 г.
- ^ Хоар, Грейдон (7 июля 2010 г.). Проект Серво (PDF) . Ежегодный саммит Mozilla 2010. Уистлер, Канада. Архивировано (PDF) из оригинала 11 июля 2017 г. Проверено 22 февраля 2017 г.
- ^ «Ржавый логотип» . bugzilla.mozilla.org . Проверено 2 февраля 2024 г.
- ^ Хоар, Грейдон (29 марта 2012 г.). «[rust-dev] Выпущена версия Rust 0.2» . mail.mozilla.org . Архивировано из оригинала 06.11.2022 . Проверено 4 апреля 2024 г.
- ^ Хоар, Грейдон (12 июля 2012 г.). «[rust-dev] Выпущена версия Rust 0.3» . mail.mozilla.org . Архивировано из оригинала 24 августа 2022 г. Проверено 12 июня 2022 г.
- ^ Хоар, Грейдон (15 октября 2012 г.). «[rust-dev] Выпущена версия Rust 0.4» . mail.mozilla.org . Архивировано из оригинала 31 октября 2021 г. Проверено 31 октября 2021 г.
- ^ Бинсток, Эндрю (07 января 2014 г.). «Взлет и падение языков в 2013 году» . Журнал доктора Добба . Архивировано из оригинала 7 августа 2016 г. Проверено 20 ноября 2022 г.
- ^ «История версий» . Гитхаб . Архивировано из оригинала 15 мая 2015 г. Проверено 1 января 2017 г.
- ^ Команда Rust Core (15 мая 2015 г.). «Анонсируем Rust 1.0» . Ржавый блог . Архивировано из оригинала 15 мая 2015 г. Проверено 11 декабря 2015 г.
- ^ Лардинуа, Фредерик (29 сентября 2017 г.). «Пришло время дать Firefox еще один шанс» . ТехКранч . Проверено 15 августа 2023 г.
- ^ Чимпану, Каталин (11 августа 2020 г.). «Mozilla увольняет 250 сотрудников и переориентируется на коммерческие продукты» . ЗДНет . Архивировано из оригинала 18 марта 2022 г. Проверено 2 декабря 2020 г.
- ^ Купер, Дэниел (11 августа 2020 г.). «Mozilla увольняет 250 сотрудников из-за пандемии» . Engadget . Архивировано из оригинала 13 декабря 2020 г. Проверено 2 декабря 2020 г.
- ^ Тунг, Лиам. «Язык программирования Rust: сокращение рабочих мест в Mozilla сильно ударило по нам, но вот как мы выживем» . ЗДНет. Архивировано из оригинала 21 апреля 2022 г. Проверено 21 апреля 2022 г.
- ^ «Закладываем фундамент для будущего Rust» . Ржавый блог . 18.08.2020. Архивировано из оригинала 2 декабря 2020 г. Проверено 2 декабря 2020 г.
- ^ "Привет, мир!" . Фонд ржавчины . 08.02.2020. Архивировано из оригинала 19 апреля 2022 г. Проверено 4 июня 2022 г.
- ^ «Mozilla приветствует Rust Foundation» . Блог Мозиллы . 09.02.2021. Архивировано из оригинала 08 февраля 2021 г. Проверено 9 февраля 2021 г.
- ^ Амадео, Рон (07 апреля 2021 г.). «Google сейчас пишет низкоуровневый код Android на Rust» . Арс Техника . Архивировано из оригинала 8 апреля 2021 г. Проверено 8 апреля 2021 г.
- ^ Андерсон, Тим (23 ноября 2021 г.). «Вся команда модераторов Rust уходит в отставку» . Регистр . Проверено 4 августа 2022 г.
- ^ «Обновление управления» . Блог изнутри Rust . Проверено 27 октября 2022 г.
- ^ Клэберн, Томас (17 апреля 2023 г.). «Rust Foundation приносит извинения за путаницу в политике в отношении товарных знаков» . Регистр . Проверено 7 мая 2023 г.
- ^ Доказано, Лиам (27 ноября 2019 г.). «Ребекка Рамбул назначена новым генеральным директором The Rust Foundation» . Регистр . Проверено 14 июля 2022 г.
Оба являются языками с фигурными скобками и синтаксисом, подобным C, что делает их непугающими для программистов C.
- ^ Перейти обратно: а б Брэндон Вильяроло (10 февраля 2021 г.). «Язык программирования Rust теперь имеет свою независимую основу» . Техреспублика . Проверено 14 июля 2022 г.
- ^ Клабник и Николс 2019 , с. 263.
- ^ Клабник и Николс 2019 , стр. 5–6.
- ^ Клабник и Николс 2019 , стр. 49–57.
- ^ Клабник и Николс 2019 , стр. 104–109.
- ^ Клабник и Николс 2019 , с. 49.
- ^ Клабник и Николс 2019 , стр. 50–53.
- ^ Тайсон, Мэтью (3 марта 2022 г.). «Программирование на Rust для Java-разработчиков» . Инфомир . Проверено 14 июля 2022 г.
- ^ «Замыкания — пример ржавчины» . doc.rust-lang.org .
- ^ Перейти обратно: а б «В качестве входных параметров — пример Rust» . doc.rust-lang.org .
- ^ «Время жизни — ржавчина на примере» . doc.rust-lang.org .
- ^ Клабник и Николс 2019 , стр. 24.
- ^ Клабник и Николс 2019 , стр. 32–33.
- ^ Клабник и Николс 2019 , стр. 36–38.
- ^ Клабник и Николс 2019 , стр. 39–40.
- ^ "ул – Руст" . doc.rust-lang.org . Проверено 23 июня 2023 г.
- ^ «срез – Ржавчина» . doc.rust-lang.org . Проверено 23 июня 2023 г.
- ^ «Кортежи» . Ржавчина на примере . Проверено 1 октября 2023 г.
- ^ «OsStr в std::ffi — Rust» . doc.rust-lang.org . Проверено 2 октября 2023 г.
- ^ «OsString в std::ffi — Rust» . doc.rust-lang.org . Проверено 2 октября 2023 г.
- ^ «Путь в std::path — Rust» . doc.rust-lang.org . Проверено 2 октября 2023 г.
- ^ «PathBuf в std::path — Rust» . doc.rust-lang.org . Проверено 2 октября 2023 г.
- ^ Перейти обратно: а б с "std::boxed — Rust" . doc.rust-lang.org . Проверено 23 июня 2023 г.
- ^ "std::boxed — Rust" . doc.rust-lang.org . Проверено 24 июня 2023 г.
- ^ «Rc в std::rc — Rust» . doc.rust-lang.org . Проверено 24 июня 2023 г.
- ^ «Дуга в std::sync — Rust» . doc.rust-lang.org . Проверено 24 июня 2023 г.
- ^ «Ячейка в std::cell — Rust» . doc.rust-lang.org . Проверено 24 июня 2023 г.
- ^ «Мьютекс в std::sync — Rust» . doc.rust-lang.org . Проверено 24 июня 2023 г.
- ^ «RwLock в std::sync — Rust» . doc.rust-lang.org . Проверено 24 июня 2023 г.
- ^ «Кондвар в std::sync — Rust» . doc.rust-lang.org . Проверено 24 июня 2023 г.
- ^ «Продолжительность в std::time – Rust» . doc.rust-lang.org . Проверено 24 июня 2023 г.
- ^ «HashMap в std::collections — Rust» . doc.rust-lang.org . Проверено 24 июня 2023 г.
- ^ «BTreeMap в std::collections — Rust» . doc.rust-lang.org . Проверено 24 июня 2023 г.
- ^ Макнамара 2021 .
- ^ Клабник и Николс 2019 , стр. 101–104.
- ^ "std::option - Rust" . doc.rust-lang.org . Проверено 12 ноября 2023 г.
- ^ Перейти обратно: а б Клабник и Николс 2019 , стр. 418–427.
- ^ Клабник и Николс 2019 , с. 83.
- ^ Клабник и Николс 2019 , с. 97.
- ^ Клабник и Николс 2019 , стр. 98–101.
- ^ Клабник и Николс 2019 , стр. 438–440.
- ^ Перейти обратно: а б Клабник и Николс 2019 , стр. 93.
- ^ «Литье — ржавчина на примере» . doc.rust-lang.org .
- ^ Клабник и Николс 2019 , стр. 59–61.
- ^ Перейти обратно: а б Клабник и Николс 2019 , стр. 63–68.
- ^ Клабник и Николс 2019 , стр. 74–75.
- ^ Баласубраманиан, Абхирам; Барановский, Марек С.; Бурцев Антон; Панда, Ауроджит; Ракамарич, Звонимир; Рыжик, Леонид (07.05.2017). «Системное программирование на Rust» . Материалы 16-го семинара по актуальным темам операционных систем . ХоОС '17. Нью-Йорк, штат Нью-Йорк, США: Ассоциация вычислительной техники. стр. 156–161. дои : 10.1145/3102980.3103006 . ISBN 978-1-4503-5068-6 . S2CID 24100599 . Архивировано из оригинала 11 июня 2022 г. Проверено 1 июня 2022 г.
- ^ Клабник и Николс 2023 , стр. 327–30.
- ^ Клабник и Николс 2019 , с. 194.
- ^ Клабник и Николс 2019 , стр. 75, 134.
- ^ Шамрелл-Харрингтон, Нелл. «Проверка заемных средств на ржавчину – глубокое погружение» . ИнфоQ . Проверено 25 июня 2022 г.
- ^ Клабник и Николс 2019 , стр. 194–195.
- ^ Клабник и Николс 2019 , стр. 192–204.
- ^ Клабник и Николс 2019 , стр. 201–203.
- ^ Розенблатт, Сет (3 апреля 2013 г.). «Samsung присоединяется к Mozilla в поисках Rust» . CNET . Архивировано из оригинала 4 апреля 2013 г. Проверено 5 апреля 2013 г.
- ^ Браун, Нил (17 апреля 2013 г.). «Вкус ржавчины» . Архивировано из оригинала 26 апреля 2013 г. Проверено 25 апреля 2013 г.
- ^ «Гонки – Рустономикон» . doc.rust-lang.org . Архивировано из оригинала 10 июля 2017 г. Проверено 3 июля 2017 г.
- ^ «Часто задаваемые вопросы по языку Rust» . static.rust-lang.org . 2015. Архивировано из оригинала 20 апреля 2015 г. Проверено 24 апреля 2017 г.
- ^ Макнамара 2021 , с. 139, 376–379, 395.
- ^ «RAII – ржавчина на примере» . doc.rust-lang.org . Архивировано из оригинала 21 апреля 2019 г. Проверено 22 ноября 2020 г.
- ^ «Абстракция без накладных расходов: особенности Rust» . Ржавый блог . Архивировано из оригинала 23 сентября 2021 г. Проверено 19 октября 2021 г.
- ^ «Коробка, стопка и куча» . Ржавчина на примере . Проверено 13 июня 2022 г.
- ^ Клабник и Николс 2019 , стр. 70–75.
- ^ Клабник и Николс 2019 , с. 323.
- ^ Клабник и Николс 2019 , стр. 171–172.
- ^ Клабник и Николс 2019 , стр. 171–172, 205.
- ^ Клабник и Николс 2019 , стр. 181, 182.
- ^ Генсет 2021 , стр. 25.
- ^ Клабник и Николс 2019 , стр. 182–184.
- ^ Клабник и Николс 2019 , стр. 281–283.
- ^ «Использование объектов-типов, допускающих значения разных типов — язык программирования Rust» . doc.rust-lang.org . Проверено 11 июля 2022 г.
- ^ Клабник и Николс 2019 , стр. 441–442.
- ^ Клабник и Николс 2019 , стр. 379–380.
- ^ «Макросы на примере» . Справочник по ржавчине . Проверено 21 апреля 2023 г.
- ^ Клабник и Николс 2019 , стр. 446–448.
- ^ «Процедурные макросы» . Справочник по языку программирования Rust . Архивировано из оригинала 07.11.2020 . Проверено 23 марта 2021 г.
- ^ Клабник и Николс 2019 , стр. 449–455.
- ^ «Серде Дериве» . Документация Serde Derive . Архивировано из оригинала 17 апреля 2021 г. Проверено 23 марта 2021 г.
- ^ «extendr_api — Руст» . Документация по API Extendr . Архивировано из оригинала 25 мая 2021 г. Проверено 23 марта 2021 г.
- ^ «Вариадики» . Ржавчина на примере .
- ^ «2137-вариативный» . Книга Rust RFC .
- ^ «Безопасное взаимодействие Rust и C++ с CXX» . ИнфоQ . 06.12.2020. Архивировано из оригинала 22 января 2021 г. Проверено 03 января 2021 г.
- ^ «Макет текста – Справочник по Rust» . doc.rust-lang.org . Проверено 15 июля 2022 г.
- ^ Бланди, Орендорф и Тиндалл, 2021 , стр. 6–8.
- ^ Макнамара 2021 , стр. 411–412.
- ^ «Обзор компилятора» . Руководство по разработке компилятора Rust . Проверено 2 июня 2023 г.
- ^ «Генерация кода — Руководство по разработке компилятора Rust» . rust-dev-guide.rust-lang.org . Проверено 3 марта 2024 г.
- ^ "rust-lang/rustc_codegen_gcc" . Гитхаб . Язык программирования Rust. 02.03.2024 . Проверено 3 марта 2024 г.
- ^ "rust-lang/rustc_codegen_cranelift" . Гитхаб . Язык программирования Rust. 02.03.2024 . Проверено 3 марта 2024 г.
- ^ Генсет 2021 , стр. 213-215.
- ^ Симоне, Серджио Де (18 апреля 2019 г.). «Rust 1.34 представляет альтернативные реестры для закрытых крейтов» . ИнфоQ . Проверено 14 июля 2022 г.
- ^ Клабник и Николс 2019 , стр. 511–512.
- ^ Clippy , Язык программирования Rust, 30 ноября 2023 г. , получено 30 ноября 2023 г.
- ^ «Клиппи Линтс» . Язык программирования Rust . Проверено 30 ноября 2023 г.
- ^ Klabnik & Nichols 2019 , Приложение G – Как создается ржавчина и «Ночная ржавчина»
- ^ Бланди, Орендорф и Тиндалл, 2021 , стр. 176–177.
- ^ Андерсон, Тим (5 июля 2022 г.). «Команда Rust выпускает версию 1.62, устанавливает дату окончания поддержки устаревшего языкового сервера» . ДЕВКЛАСС . Проверено 14 июля 2022 г.
- ^ Клабник и Николс 2023 , с. 623.
- ^ Макнамара 2021 , с. 11.
- ^ Попеску, Натали; Сюй, Цзыян; Апостолакис, Сотирис; Август, Дэвид И.; Леви, Амит (15 октября 2021 г.). «Безопаснее на любой скорости: автоматическое контекстно-зависимое повышение безопасности для Rust» . Труды ACM по языкам программирования . 5 (ООПСЛА). Раздел 2. doi : 10.1145/3485480 . S2CID 238212612 . п. 5:
Мы наблюдаем большую разницу в издержках проверенного индексирования: 23,6% тестов сообщают о значительном снижении производительности от проверенного индексирования, но 64,5% сообщают о незначительном влиянии или его отсутствии, и, что удивительно, 11,8% сообщают об улучшении производительности... В конечном итоге , хотя неконтролируемое индексирование может улучшить производительность, в большинстве случаев это не так.
- ^ Андерсон, Тим. «Может ли Руст спасти планету? Почему и почему бы и нет» . Регистр . Проверено 11 июля 2022 г.
- ^ Баласубраманиан, Абхирам; Барановский, Марек С.; Бурцев Антон; Панда, Ауроджит; Ракамарич, Звонимир; Рыжик, Леонид (07.05.2017). «Системное программирование на Rust» . Материалы 16-го семинара по актуальным темам операционных систем . Уистлер, Британская Колумбия, Канада: ACM. стр. 156–161. дои : 10.1145/3102980.3103006 . ISBN 978-1-4503-5068-6 . S2CID 24100599 .
- ^ Егулалп, Сердар (06 октября 2021 г.). «Что такое язык Rust? Безопасная, быстрая и простая разработка программного обеспечения» . Инфомир . Проверено 25 июня 2022 г.
- ^ Врубель, Кшиштоф (11 апреля 2022 г.). «Rust-проекты – почему крупные IT-компании используют Rust?» . Архивировано из оригинала 27 декабря 2022 г.
- ^ Макнамара 2021 , с. 19, 27.
- ^ Купри, Жоффруа (2015). «Ном, байт-ориентированная, потоковая передача, нулевое копирование, библиотека комбинаторов парсеров в Rust» . Семинары IEEE по безопасности и конфиденциальности , 2015 г. стр. 142–148. дои : 10.1109/SPW.2015.31 . ISBN 978-1-4799-9933-0 . S2CID 16608844 .
- ^ Макнамара 2021 , с. 20.
- ^ «Генерация кода — Справочник по Rust» . doc.rust-lang.org . Проверено 9 октября 2022 г.
- ^ «Насколько быстро ржавеет?» . Часто задаваемые вопросы по языку программирования Rust . Архивировано из оригинала 28 октября 2020 г. Проверено 11 апреля 2019 г.
- ^ Фаршин, Алиреза; Барбетт, Том; Рузбе, Амир; Магуайр-младший, Джеральд К.; Костич, Деян (2021). «PacketMill: к сети со скоростью 100 ГБ/с на каждое ядро». Материалы 26-й Международной конференции ACM по архитектурной поддержке языков программирования и операционных систем . стр. 1–17. дои : 10.1145/3445814.3446724 . ISBN 9781450383172 . S2CID 231949599 . Проверено 12 июля 2022 г.
... В то время как некоторые компиляторы (например, Rust) поддерживают переупорядочение структур [82], компиляторам C и C++ запрещено переупорядочивать структуры данных (например, структуру или класс) [74] ...
- ^ «Тип-макет» . Справочник по ржавчине . Проверено 14 июля 2022 г.
- ^ Лардинуа, Фредерик (3 апреля 2015 г.). «Mozilla и Samsung объединяются для разработки Servo, браузерного движка следующего поколения Mozilla для многоядерных процессоров» . ТехКранч . Архивировано из оригинала 10 сентября 2016 г. Проверено 25 июня 2017 г.
- ^ Кейзер, Грегг (31 октября 2016 г.). «Mozilla планирует омолодить Firefox в 2017 году» . Компьютерный мир . Проверено 13 мая 2023 г.
- ^ «Поддержка использования Rust в проекте Chromium» . Блог Google по онлайн-безопасности . Проверено 12 ноября 2023 г.
- ^ Шенкленд, Стивен (12 июля 2016 г.). «Firefox будет переработан, чтобы снова заинтересовать вас» . CNET . Проверено 14 июля 2022 г.
- ^ Группа исследования безопасности (04.10.2013). «ZeroMQ: помогает нам блокировать вредоносные домены в режиме реального времени» . Зонт Циско . Архивировано из оригинала 13 мая 2023 г. Проверено 13 мая 2023 г.
- ^ «Как наша команда AWS Rust внесет вклад в будущие успехи Rust» . Веб-сервисы Amazon . 03.03.2021. Архивировано из оригинала 2 января 2022 г. Проверено 02 января 2022 г.
- ^ «Firecracker — облегченная виртуализация для бессерверных вычислений» . Веб-сервисы Amazon . 2018-11-26. Архивировано из оригинала 08 декабря 2021 г. Проверено 02 января 2022 г.
- ^ «Анонсируем общедоступность Bottlerocket, дистрибутива Linux с открытым исходным кодом, созданного для запуска контейнеров» . Веб-сервисы Amazon . 2020-08-31. Архивировано из оригинала 2 января 2022 г. Проверено 02 января 2022 г.
- ^ «Почему AWS любит Rust и как мы хотели бы помочь» . Веб-сервисы Amazon . 24.11.2020. Архивировано из оригинала 03 декабря 2020 г. Проверено 21 апреля 2022 г.
- ^ Николс, Шон (27 июня 2018 г.). «Следующий трюк Microsoft? Перенос данных из облака в Azure IoT Edge» . Регистр . Архивировано из оригинала 27 сентября 2019 г. Проверено 27 сентября 2019 г.
- ^ Тунг, Лиам. «Microsoft: почему мы использовали язык программирования Rust вместо Go для WebAssembly в приложении Kubernetes» . ЗДНет. Архивировано из оригинала 21 апреля 2022 г. Проверено 21 апреля 2022 г.
- ^ «Как мы создавали правила брандмауэра» . Блог Cloudflare . 04.03.2019 . Проверено 11 июня 2022 г.
- ^ «Наслаждайтесь QUIC и Rust!» . Блог Cloudflare . 22 января 2019 г. Проверено 11 июня 2022 г.
- ^ Андерсон, Тим (07 декабря 2021 г.). «Ржавое ядро Linux становится ближе с новым патчем» . Регистр . Проверено 14 июля 2022 г.
- ^ «Первый взгляд на Rust в ядре 6.1 [LWN.net]» . lwn.net . Проверено 11 ноября 2023 г.
- ^ «Rust на платформе Android» . Блог Google по онлайн-безопасности . Архивировано из оригинала 3 апреля 2022 г. Проверено 21 апреля 2022 г.
- ^ Амадео, Рон (07 апреля 2021 г.). «Google сейчас пишет низкоуровневый код Android на Rust» . Арс Техника . Архивировано из оригинала 8 апреля 2021 г. Проверено 21 апреля 2022 г.
- ^ Клэберн, Томас (27 апреля 2023 г.). «Microsoft переписывает основные библиотеки Windows на Rust» . Регистр . Проверено 13 мая 2023 г.
- ^ Доказано, Лиам. «Маленькая, но мощная «Humanbiologics» компании 9Front создана для по-настоящему любопытных» . Регистр . Проверено 7 марта 2024 г.
- ^ Егулалп, Сердар. «Ос Redox от Rust может показать Linux несколько новых трюков» . Инфомир . Архивировано из оригинала 21 марта 2016 г. Проверено 21 марта 2016 г.
- ^ Андерсон, Тим (14 января 2021 г.). «Еще одна ОС в стиле Rust: Тесей присоединяется к Redox в поисках более безопасных и отказоустойчивых систем» . Регистр . Проверено 14 июля 2022 г.
- ^ Боос, Кевин; Лиянаге, Намита; Иджаз, Рамла; Чжун, Линь (2020). Тезей: эксперимент в структуре операционной системы и управлении состоянием . стр. 1–19. ISBN 978-1-939133-19-9 .
- ^ Чжан, ХаньДун (Алекс) (31 января 2023 г.). «Обзор 2022 года | Внедрение Rust в бизнес» . Журнал Ржавчина . Проверено 7 февраля 2023 г.
- ^ Сей, Марк (10 октября 2018 г.). «Новые возможности Fedora 29: Start теперь официально в Fedora» . Марксей, Еженедельные таблетки сисадмина . Архивировано из оригинала 13 апреля 2019 г. Проверено 13 мая 2019 г.
- ^ Провен, Лиам (12 июля 2022 г.). «Выпущен Oracle Linux 9 с некоторыми интересными дополнениями» . Регистр . Проверено 14 июля 2022 г.
- ^ Патель, Пратам (14 января 2022 г.). «Я попробовал новый рабочий стол COSMIC на базе Rust от System76!» . Это Новости FOSS – Новости развития . Это новости ФОСС . Проверено 10 января 2023 г.
- ^ «Поп!_OS от System76» . pop.system76.com . Система76, Инк . Проверено 10 января 2023 г.
- ^ Симоне, Серджио Де. «NPM внедрила Rust для устранения узких мест в производительности» . ИнфоQ . Проверено 20 ноября 2023 г.
- ^ Лю, Шинг (2020), Лю, Шинг (редактор), «Добро пожаловать в мир Rust» , Практические проекты Rust: создание игр, физические вычисления и приложения машинного обучения , Беркли, Калифорния: Apress, стр. 1–8 , doi : 10.1007/978-1-4842-5599-5_1 , ISBN 978-1-4842-5599-5 , получено 29 ноября 2023 г.
- ^ Лю, Шинг (2021), Лю, Шинг (ред.), «Rust в мире Интернета» , « Практические веб-проекты Rust: создание облачных и веб-приложений », Беркли, Калифорния: Apress, стр. 1–7, doi : 10.1007/978-1-4842-6589-5_1 , ISBN 978-1-4842-6589-5 , получено 29 ноября 2023 г.
- ^ Ху, Вивиан (12 июня 2020 г.). «Deno готов к производству» . ИнфоQ . Проверено 14 июля 2022 г.
- ^ Абрамс, Лоуренс (6 февраля 2021 г.). «Этот эмулятор Flash Player позволяет безопасно играть в старые игры» . Мигающий компьютер . Проверено 25 декабря 2021 г.
- ^ Хариф, Ольга (17 октября 2020 г.). «Убийца блокчейна Ethereum носит скромное имя Polkadot» . Блумберг ЛП . Проверено 14 июля 2021 г.
- ^ Ховарт, Джесси (04 февраля 2020 г.). «Почему Discord переходит с Go на Rust» . Архивировано из оригинала 30 июня 2020 г. Проверено 14 апреля 2020 г.
- ^ Команда Dropbox Capture. «Почему мы создали собственную библиотеку Rust для Capture» . Dropbox.Tech . Архивировано из оригинала 6 апреля 2022 г. Проверено 21 апреля 2022 г.
- ^ «Краткая история Rust в Facebook» . Инженерное дело в Мете . 29 апреля 2021 г. Архивировано из оригинала 19 января 2022 г. Проверено 21 апреля 2022 г.
- ^ Перейти обратно: а б с «Опрос разработчиков Stack Overflow, 2023 г.» . Переполнение стека . Проверено 25 июня 2023 г.
- ^ Клэберн, Томас (23 июня 2022 г.). «Линус Торвальдс говорит, что Rust появится в ядре Linux» . Регистр . Проверено 15 июля 2022 г.
- ^ Клабник и Николс 2019 , с. 4.
- ^ "Начиная" . www.rust-lang.org . Архивировано из оригинала 01.11.2020 . Проверено 11 октября 2020 г.
- ^ Тунг, Лиам (08 февраля 2021 г.). «Язык программирования Rust сделал огромный шаг вперед» . ЗДНет . Проверено 14 июля 2022 г.
- ^ Крилл, Пол. «Язык Rust переходит на самостоятельную основу» . Инфомир . Архивировано из оригинала 10 апреля 2021 г. Проверено 10 апреля 2021 г.
- ^ Воган-Николс, Стивен Дж. (9 апреля 2021 г.). «Шейн Миллер из AWS возглавит недавно созданный Rust Foundation» . ЗДНет . Архивировано из оригинала 10 апреля 2021 г. Проверено 10 апреля 2021 г.
- ^ Воан-Николс, Стивен Дж. (17 ноября 2021 г.). «Rust Foundation назначает Ребекку Рамбул исполнительным директором» . ЗДНет . Архивировано из оригинала 18 ноября 2021 г. Проверено 18 ноября 2021 г.
- ^ «Язык программирования Rust теперь имеет свою независимую основу» . Техреспублика . 10 февраля 2021 г. Архивировано из оригинала 18 ноября 2021 г. Проверено 18 ноября 2021 г.
- ^ «Управление» . Язык программирования Rust . Архивировано из оригинала 10 мая 2022 г. Проверено 7 мая 2022 г.
- ^ «Представляем Совет лидеров Rust» . Ржавый блог . Проверено 12 января 2024 г.
Дальнейшее чтение [ править ]
- Блэнди, Джим; Орендорф, Джейсон; Тиндалл, Леонора Ф.С. (06 июля 2021 г.). Программирование на Rust: быстрая и безопасная разработка систем . О'Рейли Медиа. ISBN 978-1-4920-5259-3 .
Внешние ссылки [ править ]
- Руст (язык программирования)
- Параллельные языки программирования
- Бесплатные компиляторы и интерпретаторы
- Бесплатные программные проекты
- Функциональные языки
- Языки программирования высокого уровня
- Мозилла
- Мультипарадигмальные языки программирования
- Языки программирования сопоставления шаблонов
- Процедурные языки программирования
- Языки программирования, созданные в 2015 году.
- Программное обеспечение, использующее лицензию Apache
- Программное обеспечение, использующее лицензию MIT
- Статически типизированные языки программирования
- Языки системного программирования