Jump to content

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

Это хорошая статья. Нажмите здесь для получения дополнительной информации.

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

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

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

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

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

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

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

( Истоки 2006–2012 )

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

fn main() {
    println!("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]

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

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

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

Краткое описание типов Rust в стандартной библиотеке
Тип Описание Примеры
String Строки в кодировке UTF-8 (динамические)
  • String::new()
  • String::from("Hello")
  • "🦀🦀🦀".to_string()
  • OsStr
  • OsString
Собственные строки платформы [примечание 7] (заимствованный [61] и динамичный [62] )
  • OsStr::new("Hello")
  • OsString::from("world")
  • Path
  • PathBuf
Пути (заимствованные [63] и динамичный [64] )
  • Path::new("./path/to")
  • PathBuf::from(r"C:.\path\to")
  • CStr
  • CString
C -совместимые строки с нулевым завершением (заимствованные [65] и динамичный [65] )
  • c"Hello"
  • CStr::from_bytes_with_nul(b"Hello\0").unwrap()
  • CString::new("world").unwrap()
Vec<T> Динамические массивы
  • Vec::new()
  • vec![1, 2, 3, 4, 5]
Option<T> Тип опции
  • None
  • Some(3)
  • Some("hello")
Result<T, E> Обработка ошибок с использованием типа результата
  • Ok(3)
  • Err("something went wrong")
Box<T> Указатель на значение, выделенное в куче . [66] в 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}");
    }
}

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

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

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

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

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

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

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

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

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

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

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

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 Эмили Данэм из конференция команды Mozilla Rust ( ) linux.conf.au, Хобарт, 2017 г.

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

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

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

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

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

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

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

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

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

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

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, а также возможность форматировать структуру для отладки.

изображающая UML-диаграмма, структуру Rust с именем Point.
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
    }
}
Rust может взаимодействовать с вариативной системой C через c_variadic переключатель функций. Как и другие интерфейсы C, система считается unsafe к Русту. [123]

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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