Руст (язык программирования)
Парадигмы | |
---|---|
Разработчик | Фонд ржавчины |
Впервые появился | 15 мая 2015 г |
Стабильная версия | 1.78.0 [1]
/ 2 мая 2024 г |
Дисциплина набора текста | |
Язык реализации | Ржавчина |
Платформа | Кросс-платформенный [примечание 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!("Hello, World!");
}
Ключевые слова и поток управления [ править ]
В Rust блоки кода разделяются фигурными скобками , а поток управления реализуется с помощью ключевых слов, включая if
, else
, while
, и for
. [46] Сопоставление с образцом можно выполнить с помощью match
ключевое слово. [47] В примерах ниже пояснения даются в комментариях , которые начинаются с //
. [48]
fn main() {
// Defining a mutable variable with 'let mut'
// Using the macro vec! to create a vector
let mut values = vec![1, 2, 3, 4];
for value in &values {
println!("value = {}", value);
}
if values.len() > 5 {
println!("List is longer than five items");
}
// Pattern matching
match values.len() {
0 => println!("Empty"),
1 => println!("One value"),
// pattern matching can use ranges of integers
2..=10 => println!("Between two and ten values"),
11 => println!("Eleven values"),
// A `_` pattern is called a "wildcard", it matches any value
_ => println!("Many values"),
};
// while loop with predicate and pattern matching using let
while let Some(value) = values.pop() {
println!("value = {value}"); // using curly brackets to format a local variable
}
}
Блоки выражений [ править ]
Rust ориентирован на выражения , причем почти каждая часть тела функции является выражением , включая операторы потока управления. [49] Обычный if
выражение используется вместо C. троичного условного выражения Поскольку возвраты являются неявными, функция не обязательно должна заканчиваться return
выражение; используется значение последнего выражения в функции если точка с запятой опущена, в качестве возвращаемого значения , [50] как видно из следующей рекурсивной реализации функции факториала :
fn factorial(i: u64) -> u64 {
if i == 0 {
1
} else {
i * factorial(i - 1)
}
}
Следующая итеративная реализация использует ..=
оператор для создания включающего диапазона:
fn factorial(i: u64) -> u64 {
(2..=i).product()
}
Замыкания [ править ]
В Rust анонимные функции называются замыканиями. [51] Они определяются с использованием следующего синтаксиса:
|<parameter-name>: <type>| -> <return-type> { <body> };
Например:
let f = |x: i32| -> i32 { x * 2 };
Однако с помощью вывода типа компилятор может определить тип каждого параметра и тип возвращаемого значения, поэтому приведенную выше форму можно записать как:
let f = |x| { x * 2 };
При замыканиях с одним выражением (т. е. телом с одной строкой) и неявным возвращаемым типом фигурные скобки можно опустить:
let f = |x| x * 2;
Замыкания без входного параметра записываются так:
let f = || println!("Hello, world!");
Замыкания могут передаваться в качестве входных параметров функций, которые ожидают указатель на функцию:
// A function which takes a function pointer as an argument and calls it with
// the value `5`.
fn apply(f: fn(i32) -> i32) -> i32 {
// No semicolon, to indicate an implicit return
f(5)
}
fn main() {
// Defining the closure
let f = |x| x * 2;
println!("{}", apply(f)); // 10
println!("{}", f(5)); // 10
}
Однако для описания того, как фиксируются значения в теле замыкания, могут потребоваться сложные правила. Они реализуются с помощью Fn
, FnMut
, и FnOnce
функции: [52]
Fn
: замыкание фиксируется по ссылке (&T
). Они используются для функций, которые все еще можно вызывать, если у них есть только ссылочный доступ (с&
) к окружающей среде.FnMut
: замыкание фиксируется по изменяемой ссылке (&mut T
). Они используются для функций, которые можно вызывать, если у них есть доступ к изменяемым ссылкам (с&mut
) к окружающей среде.FnOnce
: замыкание захватывает по значению (T
). Они используются для функций, которые вызываются только один раз.
Благодаря этим особенностям компилятор будет захватывать переменные наименее ограничительным образом. [52] Они помогают управлять тем, как значения перемещаются между областями действия, что очень важно, поскольку Rust следует конструкции жизненного цикла, чтобы гарантировать, что значения «заимствованы» и перемещены предсказуемым и явным образом. [53]
Ниже показано, как можно передать замыкание в качестве входного параметра, используя метод Fn
черта:
// A function that takes a value of type F (which is defined as
// a generic type that implements the `Fn` trait, e.g. a closure)
// and calls it with the value `5`.
fn apply_by_ref<F>(f: F) -> i32
where F: Fn(i32) -> i32
{
f(5)
}
fn main() {
let f = |x| {
println!("I got the value: {}", x);
x * 2
};
// Applies the function before printing its return value
println!("5 * 2 = {}", apply_by_ref(f));
}
// ~~ Program output ~~
// I got the value: 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] в C++ Аналогично std::unique_ptr . | let boxed: Box<u8> = Box::new(5);
let val: u8 = *boxed;
|
Rc<T>
|
подсчета ссылок Указатель [67] | let five = Rc::new(5);
let also_five = five.clone();
|
Arc<T>
|
Атомный , потокобезопасный указатель подсчета ссылок [68] | let foo = Arc::new(vec![1.0, 2.0]);
let a = foo.clone(); // a can be sent to another thread
|
Cell<T>
|
Изменяемая ячейка памяти [69] | let c = Cell::new(5);
c.set(10);
|
Mutex<T>
|
Блокировка мьютекса для общих данных, содержащихся внутри. [70] | let mutex = Mutex::new(0_u32);
let _guard = mutex.lock();
|
RwLock<T>
|
Блокировка чтения и записи [71] | let lock = RwLock::new(5);
let r1 = lock.read().unwrap();
|
Condvar
|
для Условный монитор общих данных [72] | let (lock, cvar) = (Mutex::new(true), Condvar::new());
// As long as the value inside the `Mutex<bool>` is `true`, we wait.
let _guard = cvar.wait_while(lock.lock().unwrap(), |pending| { *pending }).unwrap();
|
Duration
|
Тип, представляющий промежуток времени [73] | Duration::from_millis(1) // 1ms
|
HashMap<K, V>
|
Хэш-таблица [74] | let mut player_stats = HashMap::new();
player_stats.insert("damage", 1);
player_stats.entry("health").or_insert(100);
|
BTreeMap<K, V>
|
B-дерево [75] | let mut solar_distance = BTreeMap::from([
("Mercury", 0.4),
("Venus", 0.7),
]);
solar_distance.entry("Earth").or_insert(1.0);
|
Option
значения обрабатываются с использованием синтаксического сахара , такого как if let
конструкция для доступа к внутреннему значению (в данном случае к строке): [76]
fn main() {
let name1: Option<&str> = None;
// In this case, nothing will be printed out
if let Some(name) = name1 {
println!("{name}");
}
let name2: Option<&str> = Some("Matthew");
// In this case, the word "Matthew" will be printed out
if let Some(name) = name2 {
println!("{name}");
}
}
Указатели [ править ]
Тип | Описание | Примеры |
---|---|---|
|
Ссылки (неизменяемые и изменяемые) |
|
|
|
|
|
Указатель на значение, выделенное в куче
(или, возможно, нулевой указатель, если он заключен в опцию) [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]
let x = 1000;
println!("1000 as a u16 is: {}", x as u16);
Право собственности и срок службы [ править ]
Система владения Rust состоит из правил, обеспечивающих безопасность памяти без использования сборщика мусора. Во время компиляции каждое значение должно быть прикреплено к переменной, называемой владельцем этого значения, и каждое значение должно иметь ровно одного владельца. [86] Значения перемещаются между разными владельцами путем присвоения или передачи значения в качестве параметра функции. Значения также могут быть заимствованы, то есть они временно передаются в другую функцию перед возвратом владельцу. [87] С помощью этих правил Rust может предотвратить создание и использование висячих указателей : [87] [88]
fn print_string(s: String) {
println!("{}", s);
}
fn main() {
let s = String::from("Hello, World");
print_string(s); // s consumed by print_string
// s has been moved, so cannot be used any more
// another print_string(s); would result in a compile error
}
Из-за этих правил владения типы Rust известны как линейные или аффинные типы, что означает, что каждое значение можно использовать ровно один раз. Это обеспечивает своего рода изоляцию ошибок программного обеспечения , поскольку владелец значения несет полную ответственность за его правильность и освобождение. [89]
Когда значение выходит за пределы области видимости, оно удаляется путем запуска его деструктора . Деструктор может быть определен программно путем реализации Drop
черта . Это помогает управлять такими ресурсами, как дескрипторы файлов, сетевые сокеты и блокировки , поскольку при удалении объектов связанные с ними ресурсы автоматически закрываются или освобождаются. [90]
Время жизни обычно является неявной частью всех ссылочных типов в Rust. Каждое время жизни включает в себя набор мест в коде, для которых действительна переменная. Например, ссылка на локальную переменную имеет время жизни, соответствующее блоку, в котором она определена: [91]
fn main() {
let x = 5; // ------------------+- Lifetime 'a
// |
let r = &x; // -+-- Lifetime 'b |
// | |
println!("r: {}", r); // | |
// | |
// -+ |
} // ------------------+
Средство проверки заимствований в компиляторе Rust использует время жизни, чтобы гарантировать, что значения контрольных точек остаются действительными. [92] [93] В приведенном выше примере сохранение ссылки на переменную x
к r
действителен как переменная x
имеет более длительный срок службы( 'a
), чем переменная r
( 'b
). Однако, когда x
имеет более короткий срок службы, программа проверки заимствований отклонит программу:
fn main() {
let r; // ------------------+- Lifetime 'a
// |
{ // |
let x = 5; // -+-- Lifetime 'b |
r = &x; // | |
} // -| |
// |
println!("r: {}", r); // |
} // ------------------+
Поскольку время жизни ссылочной переменной ( 'b
) короче времени жизни переменной, содержащей ссылку ( 'a
), ошибки проверки заимствований, предотвращающие x
от использования за пределами своей области применения. [94]
Rust определяет взаимосвязь между временем жизни объектов, созданных и используемых функциями, используя параметры времени жизни в качестве сигнатурной функции. [95]
В приведенном ниже примере анализируются некоторые параметры конфигурации из строки и создается структура, содержащая эти параметры. Структура содержит только ссылки на данные; поэтому, чтобы структура оставалась допустимой, данные, на которые ссылается структура, также должны быть действительными. Сигнатура функции для parse_config
явно определяет эту связь. В этом примере явное время жизни не требуется в новых версиях Rust из-за исключения времени жизни — алгоритма, который автоматически назначает время жизни функциям, если они тривиальны. [96]
use std::collections::HashMap;
// This struct has one lifetime parameter, 'src. The name is only used within the struct's definition.
#[derive(Debug)]
struct Config<'src> {
hostname: &'src str,
username: &'src str,
}
// This function also has a lifetime parameter, 'cfg. 'cfg is attached to the "config" parameter, which
// establishes that the data in "config" lives at least as long as the 'cfg lifetime.
// The returned struct also uses 'cfg for its lifetime, so it can live at most as long as 'cfg.
fn parse_config<'cfg>(config: &'cfg str) -> Config<'cfg> {
let key_values: HashMap<_, _> = config
.lines()
.filter(|line| !line.starts_with('#'))
.filter_map(|line| line.split_once('='))
.map(|(key, value)| (key.trim(), value.trim()))
.collect();
Config {
hostname: key_values["hostname"],
username: key_values["username"],
}
}
fn main() {
let config = parse_config(
r#"hostname = foobar
username=barfoo"#,
);
println!("Parsed config: {:#?}", config);
}
Безопасность памяти [ править ]
Rust спроектирован так, чтобы быть безопасным для памяти . Он не допускает нулевых указателей, висячих указателей или гонок за данными . [97] [98] [99] Значения данных могут быть инициализированы только с помощью фиксированного набора форм, каждая из которых требует, чтобы их входные данные были уже инициализированы. [100]
Небезопасный код может обойти некоторые из этих ограничений, используя unsafe
ключевое слово. [79] Небезопасный код также может использоваться для низкоуровневых функций, таких как доступ к энергозависимой памяти , встроенные функции, специфичные для архитектуры, каламбур типов и встроенная сборка. [101]
Управление памятью [ править ]
Rust не использует сбор мусора . Вместо этого память и другие ресурсы управляются по соглашению «получение ресурсов — это инициализация». [102] с дополнительным подсчетом ссылок . Rust обеспечивает детерминированное управление ресурсами с очень низкими накладными расходами . [103] значения выделяются в стеке По умолчанию , и все динамические выделения должны быть явными. [104]
Встроенные ссылочные типы, использующие &
символ не включает подсчет ссылок во время выполнения. Безопасность и достоверность базовых указателей проверяются во время компиляции, что предотвращает висячие указатели и другие формы неопределенного поведения . [105] Система типов Rust разделяет общие неизменяемые ссылки вида &T
из уникальных, изменяемых ссылок вида &mut T
. Изменяемую ссылку можно привести к неизменяемой ссылке, но не наоборот. [106]
Полиморфизм [ править ]
Дженерики [ править ]
Более продвинутые возможности Rust включают использование универсальных функций . Универсальной функции присваиваются универсальные параметры , которые позволяют применять одну и ту же функцию к различным типам переменных. Эта возможность уменьшает дублирование кода. [107] и известен как параметрический полиморфизм .
Следующая программа вычисляет сумму двух вещей, для чего сложение реализуется с помощью универсальной функции:
use std::ops::Add;
// sum is a generic function with one type parameter, T
fn sum<T>(num1: T, num2: T) -> T
where
T: Add<Output = T>, // T must implement the Add trait where addition returns another T
{
num1 + num2 // num1 + num2 is syntactic sugar for num1.add(num2) provided by the Add trait
}
fn main() {
let result1 = sum(10, 20);
println!("Sum is: {}", result1); // Sum is: 30
let result2 = sum(10.23, 20.45);
println!("Sum is: {}", result2); // Sum is: 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
черта:
use std::fmt::Display;
let v: Vec<Box<dyn Display>> = vec![
Box::new(3),
Box::new(5.0),
Box::new("hi"),
];
for x in v {
println!("{x}");
}
Если элемент в списке не реализует Display
черта, это вызовет ошибку времени компиляции. [115]
Итераторы [ править ]
Циклы for в Rust работают в функциональном стиле как операции над типом итератора . Например, в цикле
for x in 0..100 {
f(x);
}
0..100
это значение типа Range
которая реализует Iterator
черта; код применяет функцию f
для каждого элемента, возвращаемого итератором. Итераторы можно комбинировать с функциями над итераторами, например map
, filter
, и sum
. Например, следующая команда суммирует все числа от 1 до 100, кратные 3:
(1..=100).filter(|&x| x % 3 == 0).sum()
Макросы [ править ]
Язык 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, а также возможность форматировать структуру для отладки.
use serde_json::{Serialize, Deserialize};
#[derive(Serialize, Deserialize, Debug)]
struct Point {
x: i32,
y: i32,
}
fn main() {
let point = Point { x: 1, y: 2 };
let serialized = serde_json::to_string(&point).unwrap();
println!("serialized = {}", serialized);
let deserialized: Point = serde_json::from_str(&serialized).unwrap();
println!("deserialized = {:?}", deserialized);
}
Вариативные макросы [ править ]
Rust не поддерживает переменные аргументы в функциях. Вместо этого он использует макросы . [122]
macro_rules! calculate {
// The pattern for a single `eval`
(eval $e:expr) => {{
{
let val: usize = $e; // Force types to be integers
println!("{} = {}", stringify!{$e}, val);
}
}};
// Decompose multiple `eval`s recursively
(eval $e:expr, $(eval $es:expr),+) => {{
calculate! { eval $e }
calculate! { $(eval $es),+ }
}};
}
fn main() {
calculate! { // Look ma! Variadic `calculate!`!
eval 1 + 2,
eval 3 + 4,
eval (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]
Экосистема [ править ]
Экосистема 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]
Должность [ править ]
Rust Cargo — это система сборки и менеджер пакетов . Он загружает, компилирует, распространяет и загружает пакеты, называемые ящиками , которые сохраняются в официальном реестре. Он также выступает в качестве интерфейса для Clippy и других компонентов Rust. [16]
По умолчанию Cargo получает свои зависимости из пользовательского реестра crates.io , но Git в локальной файловой системе, а также другие внешние источники. в качестве зависимостей также можно указать репозитории и ящики [133]
Рустфмт [ править ]
Rustfmt — форматировщик кода для Rust. Он форматирует пробелы и отступы для создания кода в соответствии с общим стилем , если не указано иное. Его можно вызвать как отдельную программу или из проекта Rust через Cargo. [134]
Клиппи [ править ]
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]
Принятие [ править ]
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]
В веб-разработке менеджер пакетов 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]
Сообщество [ править ]
Фонд ржавчины [ править ]
Формирование | 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. 2 марта 2024 г. Проверено 3 марта 2024 г.
- ^ "rust-lang/rustc_codegen_cranelift" . Гитхаб . Язык программирования Rust. 2 марта 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). «Nom, байт-ориентированная, потоковая передача, нулевое копирование, библиотека комбинаторов парсеров в 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. Архивировано из оригинала 02 января 2022 г. Проверено 02 января 2022 г.
- ^ «Firecracker — облегченная виртуализация для бессерверных вычислений» . Веб-сервисы Amazon . 2018-11-26. Архивировано из оригинала 08 декабря 2021 г. Проверено 02 января 2022 г.
- ^ «Анонсируем общедоступность Bottlerocket, дистрибутива Linux с открытым исходным кодом, созданного для запуска контейнеров» . Веб-сервисы Amazon . 2020-08-31. Архивировано из оригинала 02 января 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
- Статически типизированные языки программирования
- Языки системного программирования