Jump to content

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

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

Ржавчина
Логотип ржавчины; заглавная буква R, установленная на звездочке
Парадигмы
Разработчик Ржавчина Проект
Впервые появился 15 мая 2015 г .; 9 лет назад ( 15 мая 2015 )
Стабильная версия
1.81.0 [ 1 ]  Отредактируйте это в Викиданных / 5 сентября 2024 г .; 10 дней назад ( 5 сентября 2024 г. )
Дисциплина набора текста
Язык реализации ОКамл (2006–2011 гг.)
Руст (2012 – настоящее время)
Платформа Кросс-платформенный [ примечание 1 ]
ТЫ Кросс-платформенный [ примечание 2 ]
Лицензия Массачусетский технологический институт , Апач 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 известен своим быстрым распространением и изучается в исследованиях теории языков программирования .

Истоки (2006–2012)

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

Rust зародился как личный проект в 2006 году сотрудника Mozilla Research Грейдона Хоара, названный в честь группы грибов , которые «сверхустроены для выживания». Mozilla начала спонсировать проект в 2009 году и наняла дюжину инженеров для постоянной работы над ним в течение следующих десяти лет. [ 16 ]

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

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

[ редактировать ]

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

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

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

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

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

[ редактировать ]

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

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

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

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

Синтаксис и особенности

[ редактировать ]

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

Программа «Здравствуй, мир»

[ редактировать ]

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

fn main() {
    println!("Hello, World!");
}

Переменные

[ редактировать ]

Переменные в Rust определяются через let ключевое слово. [ 38 ] В приведенном ниже примере присваивается значение переменной с именем foo.

fn main() {
    let foo = 10;
    println!("The value of foo is {foo}");
}

По умолчанию переменные являются неизменяемыми , и добавление mut Ключевое слово позволяет изменять переменную. [ 39 ] В следующем примере используется //, который обозначает начало комментария . [ 40 ]

fn main() {
    let mut foo = 10; // This code would not compile without adding "mut".
    println!("The value of foo is {foo}");
    foo = 20;
    println!("The value of foo is {foo}");
}

Несколько let выражения могут определять несколько переменных с одним и тем же именем, что называется затенением переменных . Затенение переменных позволяет преобразовывать переменные без необходимости называть переменные по-другому. [ 41 ] В приведенном ниже примере объявляется новая переменная с тем же именем, которая вдвое превышает исходное значение:

fn main() {
    let foo = 10;
    println!("The value of foo is {foo}");
    let foo = foo * 2;
    println!("The value of foo is {foo}");
}

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

fn main() {
    let spaces = "   ";
    let spaces = spaces.len();
}

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

[ редактировать ]

В Rust блоки кода ограничиваются фигурными скобками . [ 42 ]

Ан if условное выражение выполняет код в зависимости от того, является ли данное значение true. else может использоваться, когда значение оценивается как false, и else if может использоваться для объединения нескольких выражений. [ 43 ]

fn main() {
    let x = 10;
    if x > 5 {
        println!("value is greater than five");
    }

    if x % 7 == 0 {
        println!("value is divisible by 7");
    } else if x % 5 == 0 {
        println!("value is divisible by 5");
    } else {
        println!("value is not divisible by 7 or 5");
    }
}

while петли

[ редактировать ]

while может использоваться для повторения блока кода при выполнении условия. [ 44 ]

fn main() {
    // Iterate over all integers from 4 to 10
    let mut value = 4;
    while value <= 10 {
         println!("value = {value}");
         value += 1
    }
}

for циклы и итераторы

[ редактировать ]

Циклы For в Rust перебирают элементы коллекции. [ 45 ] Выражения работают с любым типом итератора .

fn main(){
    // Using `for` with range syntax for the same functionality as above
    for value in 4..=10 {
        println!("value = {value}");
    }
}

В приведенном выше коде 4..=10 это значение типа Range которая реализует Iterator черта. Код в фигурных скобках применяется к каждому элементу, возвращаемому итератором.

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

(1..=100).filter(|&x| x % 3 == 0).sum()

loop и break заявления

[ редактировать ]

В более общем смысле, loop Ключевое слово позволяет повторять часть кода до тех пор, пока break происходит. break при необходимости может выйти из цикла со значением. Этикетки, обозначенные значком 'label_name может использоваться для разрыва внешнего цикла, когда циклы вложены. [ 46 ]

fn main() {
    let value = 456;
    let mut x = 1;
    let y = loop {
        x *= 10;
        if x > value {
            break x / 10;
        }
    };
    println!("largest power of ten that is smaller than value: {y}");

    let mut up = 1;
    'outer: loop {
        let mut down = 120;
        loop {
            if up > 100 {
                break 'outer;
            }

            if down < 4 {
                break;
            }

            down /= 2;
            up += 1;
            println!("up: {up}, down: {down}");
        }
        up *= 2;
    }
}

Выражения

[ редактировать ]

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

fn factorial(i: u64) -> u64 {
    if i == 0 {
        1
    } else {
        i * factorial(i - 1)
    }
}

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

fn factorial(i: u64) -> u64 {
    (2..=i).product()
}

Сопоставление с образцом

[ редактировать ]

The match и if let выражения можно использовать для сопоставления с образцом . Например, match может использоваться для удвоения необязательного целочисленного значения, если оно присутствует, и возврата нуля в противном случае: [ 49 ]

fn double(x: Option<u64>) -> u64 {
    match x {
        Some(x) => x * 2,
        None => 0,
    }
}

Эквивалентно это можно записать с помощью if let и else:

fn double(x: Option<u64>) -> u64 {
    if let Some(x) = x {
        x * 2
    } else {
        0
    }
}

Rust строго типизирован и статически типизирован . Типы всех переменных должны быть известны во время компиляции; присвоение значения определенного типа переменной другого типа приводит к ошибке компиляции . Вывод типа используется для определения типа переменных, если они не указаны. [ 50 ]

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

Примитивные типы

[ редактировать ]

Целочисленные типы в Rust называются на основе знака и количества бит, которые занимает тип. Например, i32 представляет собой целое число со знаком, занимающее 32 бита памяти, тогда как u8 не имеет знака и занимает всего 8 бит памяти. isize и usize занимают место в зависимости от архитектуры компьютера, на котором выполняется код, например, на компьютерах с 32-битной архитектурой оба типа будут занимать 32 бита пространства.

По умолчанию целочисленные литералы имеют систему счисления с основанием 10, но разные системы счисления , например: с префиксами поддерживаются 0b11 для двоичных чисел , 0o567 для восьмеричных чисел и 0xDB для шестнадцатеричных чисел . По умолчанию целочисленные литералы имеют значение i32 как его тип. Суффиксы, такие как 4u32 может использоваться для явного задания типа литерала. [ 52 ] Байтовые литералы, такие как b'X' доступны для представления значения ASCII u8) конкретного характера. [ 53 ]

тип Логический называется bool который может принимать значение либо true или false. А char занимает 32 бита пространства и представляет собой скалярное значение Юникода: кодовую точку Юникода , которая не является суррогатом . [ 54 ] Числа с плавающей запятой IEEE 754 поддерживаются f32 для поплавков одинарной точности и f64 для чисел с плавающей запятой двойной точности . [ 55 ]

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

[ редактировать ]

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

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

Стандартная библиотека

[ редактировать ]
Краткое описание типов Rust в стандартной библиотеке
Тип Описание Примеры
String Строки в кодировке UTF-8 (динамические)
  • String::new()
  • String::from("Hello")
  • "🦀🦀🦀".to_string()
  • OsStr
  • OsString
Собственные строки платформы [ примечание 4 ] (заимствованный [ 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 ]

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

[ редактировать ]

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

let x = 1000;
println!("1000 as a u16 is: {}", x as u16);

Право собственности и время жизни

[ редактировать ]

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

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 известны как линейные или аффинные типы, что означает, что каждое значение можно использовать ровно один раз. Это обеспечивает своего рода изоляцию ошибок программного обеспечения , поскольку владелец значения несет полную ответственность за его правильность и освобождение. [ 84 ]

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

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

fn main() {
    let x = 5;                              // ------------------+- Lifetime 'a
                                            //                   |
    let r = &x;                             // -+-- Lifetime 'b  |
                                            //  |                |
    println!("r: {}", r);                   //  |                |
                                            //  |                |
                                            // -+                |
}                                           // ------------------+

Средство проверки заимствований в компиляторе Rust использует время жизни, чтобы гарантировать, что значения контрольных точек остаются действительными. [ 87 ] [ 88 ] В приведенном выше примере сохранение ссылки на переменную 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 от использования за пределами своей области применения. [ 89 ]

Параметры времени жизни явно определяют время жизни ссылок, например, указывая источник вывода: [ 90 ]

fn remove_prefix<'a>(mut original: &'a str, prefix: &str) -> &'a str {
    if original.starts_with(prefix) {
        original = original[prefix.len()..];
    }
    original
}

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

Когда определяемые пользователем типы содержат ссылки на данные, им также необходимо использовать параметры времени жизни. В приведенном ниже примере анализируются некоторые параметры конфигурации из строки и создается структура, содержащая эти параметры. Функция parse_config также демонстрирует исключение времени жизни, что уменьшает необходимость явного определения параметров времени жизни. [ 91 ]

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,
}

// The '_ lifetime parameter, in this case, refers to the anonymous lifetime attached to the type
// of the argument `config`.
fn parse_config(config: &str) -> Config<'_> {
    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 включают использование универсальных функций . Универсальной функции присваиваются универсальные параметры , которые позволяют применять одну и ту же функцию к различным типам переменных. Эта возможность уменьшает дублирование кода. [ 92 ] и известен как параметрический полиморфизм .

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

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 создаются экземпляры конкретных типов, требуемых кодом; в данном случае сумма целых чисел и сумма чисел с плавающей запятой.

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

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

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

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

Объекты черт

[ редактировать ]

Черты Rust реализованы с использованием статической диспетчеризации , что означает, что тип всех значений известен во время компиляции; однако Rust также использует функцию, известную как объекты-характеристики , для выполнения динамической отправки (также известной как утиная типизация ). [ 98 ] Динамически отправляемые объекты свойств объявляются с использованием синтаксиса dyn Tr где Tr это черта. Объекты признаков имеют динамический размер, поэтому их необходимо поместить за указателем, например Box. [ 99 ] В следующем примере создается список объектов, каждый из которых можно распечатать с помощью 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 черта, это вызовет ошибку времени компиляции. [ 100 ]

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

[ редактировать ]

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

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

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

[ редактировать ]

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

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

Замыкания

[ редактировать ]

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

|<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 функции: [ 112 ]

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

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

Ниже показано, как можно передать замыкание в качестве входного параметра, используя метод 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 можно расширить с помощью макросов.

Декларативные макросы

[ редактировать ]

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

Процедурные макросы

[ редактировать ]

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

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

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

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

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

use serde::{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 не поддерживает переменные аргументы в функциях. Вместо этого он использует макросы . [ 120 ]

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 к Русту. [ 121 ]

Интерфейс с C и C++

[ редактировать ]

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

Экосистема

[ редактировать ]
Компиляция программы Rust с помощью Cargo

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

Компилятор

[ редактировать ]

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

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

Стандартная библиотека

[ редактировать ]

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

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

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

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

Ржавчина

[ редактировать ]

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

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

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

Система версий

[ редактировать ]

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

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

поддержка IDE

[ редактировать ]

rust-analyzer — это набор утилит, которые предоставляют интегрированным средам разработки (IDE) и текстовым редакторам информацию о проекте Rust через протокол языкового сервера . Это включает такие функции, как автодополнение и отображение ошибок компиляции во время редактирования. [ 138 ]

Производительность

[ редактировать ]

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

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

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

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

Принятие

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

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

Rust используется в нескольких проектах серверного программного обеспечения крупных веб-сервисов . OpenDNS , служба разрешения DNS , принадлежащая Cisco , использует Rust внутри себя. [ 155 ] [ 156 ] Amazon Web Services использует Rust в «компонентах, чувствительных к производительности» нескольких своих сервисов. В 2019 году AWS выпустила с открытым исходным кодом Firecracker — решение для виртуализации, написанное в основном на Rust. [ 157 ] Microsoft Azure IoT Edge, платформа, используемая для запуска сервисов Azure на устройствах Интернета вещей , имеет компоненты, реализованные на Rust. [ 158 ] Microsoft также использует Rust для запуска контейнерных модулей с помощью WebAssembly и Kubernetes . [ 159 ] Cloudflare , компания, предоставляющая сетевые услуги доставки контента , использовала Rust для создания нового веб-прокси под названием Pingora для повышения производительности и эффективности. [ 160 ] Менеджер пакетов npm начал использовать Rust для своей службы аутентификации в 2019 году. [ 161 ] [ 162 ] [ 163 ]

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

В веб-разработке Deno , безопасная среда выполнения для JavaScript и TypeScript , построена на базе V8 с использованием Rust и Tokio. [ 177 ] Другие заметные разработки в этой области включают Ruffle с открытым исходным кодом , эмулятор SWF , [ 178 ] и Polkadot , платформа блокчейна и криптовалют с открытым исходным кодом . [ 179 ]

Discord , компания-разработчик программного обеспечения для обмена мгновенными сообщениями , переписала части своей системы на Rust для повышения производительности в 2020 году. В том же году Dropbox объявила, что синхронизация файлов была переписана на Rust. Facebook ( Meta ) также использовал Rust для редизайна своей системы управления исходным кодом внутренних проектов. [ 16 ]

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

В академических исследованиях

[ редактировать ]

Rust изучался в академических исследованиях как на предмет свойств самого языка, так и на предмет полезности, которую язык обеспечивает для написания программного обеспечения, используемого для исследований. Его особенности, связанные с безопасностью [ 182 ] [ 143 ] и производительность [ 183 ] были осмотрены.

В журнальной статье, опубликованной в Proceedings of the International Astronomical Union , астрофизики Бланко-Куаресма и Болмонт повторно реализовали программы, отвечающие за моделирование многопланетных систем в Rust, и обнаружили, что это конкурентоспособный язык программирования по своей «скорости и точности». [ 15 ] Аналогичным образом, в статье, опубликованной в журнале Nature, рассказывается несколько историй о том, как биоинформатики использовали Rust из-за его производительности и безопасности. [ 131 ] Тем не менее, в обеих статьях уникальные концепции Rust, включая его систему владения, которую трудно изучить, названы одним из основных недостатков внедрения Rust.

Сообщество

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

Было отмечено, что Rust имеет инклюзивное сообщество и особенно приветствует людей из квир-сообщества , отчасти из-за своего кодекса поведения , в котором изложен ряд ожиданий, которым должны следовать члены сообщества Rust. В одной из статей MIT Technology Review сообщество Rust описывается как «необычайно дружелюбное» к новичкам. [ 16 ] [ 131 ]

Фонд ржавчины

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

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

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

Управленческие команды

[ редактировать ]

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

См. также

[ редактировать ]

Примечания

[ редактировать ]
  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. ^ В системах Unix это часто строки UTF-8 без внутреннего 0 байта. В Windows это строки UTF-16 без внутреннего 0 байта. В отличие от этих, str и String всегда действительны в формате UTF-8 и могут содержать внутренние нули.
  5. ^ То есть среди респондентов, которые проделали «обширную работу по разработке [с Rust] за последний год» (13,05%), у Rust был самый большой процент тех, кто также выразил интерес к «работе с [Rust] в следующем году» ( 84,66%). [ 180 ]

Источники книг

[ редактировать ]
  • Гьенгсет, Джон (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.81.0» . 05.09.2024 . Проверено 05 сентября 2024 г.
  2. ^ Перейти обратно: а б «Поддержка платформы» . Русская книга . Проверено 27 июня 2022 г.
  3. ^ «Язык программирования Rust» . Язык программирования Rust. 2022-10-19.
  4. ^ «Типы уникальности» . Ржавый блог . Проверено 8 октября 2016 г. Те из вас, кто знаком со стилем Elm, возможно, поймут, что обновленный Сообщения --explain черпают вдохновение из подхода Elm.
  5. ^ Перейти обратно: а б «Влияния — Справочник по ржавчине» . Справочник по ржавчине . Архивировано из оригинала 26 ноября 2023 г. Проверено 31 декабря 2023 г.
  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. ^ Перейти обратно: а б с д и Томпсон, Клайв (14 февраля 2023 г.). «Как Rust превратился из побочного проекта в самый любимый в мире язык программирования» . Обзор технологий Массачусетского технологического института . Проверено 23 февраля 2023 г.
  16. ^ Перейти обратно: а б Аврам, Авель (3 августа 2012 г.). «Интервью о Rust, языке системного программирования, разработанном Mozilla» . ИнфоВ. Архивировано из оригинала 24 июля 2013 г. Проверено 17 августа 2013 г.
  17. ^ «Ржавый логотип» . bugzilla.mozilla.org . Проверено 2 февраля 2024 г.
  18. ^ Хоар, Грейдон (29 марта 2012 г.). «[rust-dev] Выпущена версия Rust 0.2» . mail.mozilla.org . Архивировано из оригинала 06.11.2022 . Проверено 4 апреля 2024 г.
  19. ^ Хоар, Грейдон (12 июля 2012 г.). «[rust-dev] Выпущена версия Rust 0.3» . mail.mozilla.org . Архивировано из оригинала 24 августа 2022 г. Проверено 12 июня 2022 г.
  20. ^ Хоар, Грейдон (15 октября 2012 г.). «[rust-dev] Выпущена версия Rust 0.4» . mail.mozilla.org . Архивировано из оригинала 31 октября 2021 г. Проверено 31 октября 2021 г.
  21. ^ Бинсток, Эндрю (07 января 2014 г.). «Взлет и падение языков в 2013 году» . Журнал доктора Добба . Архивировано из оригинала 7 августа 2016 г. Проверено 20 ноября 2022 г.
  22. ^ Лардинуа, Фредерик (29 сентября 2017 г.). «Пришло время дать Firefox еще один шанс» . ТехКранч . Проверено 15 августа 2023 г.
  23. ^ Чимпану, Каталин (11 августа 2020 г.). «Mozilla увольняет 250 сотрудников и переориентируется на коммерческие продукты» . ЗДНет . Архивировано из оригинала 18 марта 2022 г. Проверено 2 декабря 2020 г.
  24. ^ Купер, Дэниел (11 августа 2020 г.). «Mozilla увольняет 250 сотрудников из-за пандемии» . Engadget . Архивировано из оригинала 13 декабря 2020 г. Проверено 2 декабря 2020 г.
  25. ^ Тунг, Лиам. «Язык программирования Rust: сокращение рабочих мест в Mozilla сильно ударило по нам, но вот как мы выживем» . ЗДНет. Архивировано из оригинала 21 апреля 2022 г. Проверено 21 апреля 2022 г.
  26. ^ «Закладываем фундамент для будущего Rust» . Ржавый блог . 18.08.2020. Архивировано из оригинала 2 декабря 2020 г. Проверено 2 декабря 2020 г.
  27. ^ "Привет, мир!" . Фонд ржавчины . 08.02.2020. Архивировано из оригинала 19 апреля 2022 г. Проверено 4 июня 2022 г.
  28. ^ «Mozilla приветствует Rust Foundation» . Блог Мозиллы . 09.02.2021. Архивировано из оригинала 08 февраля 2021 г. Проверено 9 февраля 2021 г.
  29. ^ Амадео, Рон (07 апреля 2021 г.). «Google сейчас пишет низкоуровневый код Android на Rust» . Арс Техника . Архивировано из оригинала 8 апреля 2021 г. Проверено 8 апреля 2021 г.
  30. ^ Андерсон, Тим (23 ноября 2021 г.). «Вся команда модераторов Rust уходит в отставку» . Регистр . Проверено 4 августа 2022 г.
  31. ^ «Обновление управления» . Блог изнутри Rust . Проверено 27 октября 2022 г.
  32. ^ Клэберн, Томас (17 апреля 2023 г.). «Rust Foundation приносит извинения за путаницу в политике в отношении товарных знаков» . Регистр . Проверено 7 мая 2023 г.
  33. ^ Доказано, Лиам (27 ноября 2019 г.). «Ребекка Рамбул назначена новым генеральным директором The Rust Foundation» . Регистр . Проверено 14 июля 2022 г. Оба являются языками с фигурными скобками и имеют синтаксис, подобный C, что делает их непугающими для программистов C.
  34. ^ Перейти обратно: а б с Вильяроло, Брэндон (10 февраля 2021 г.). «Язык программирования Rust теперь имеет свою независимую основу» . Техреспублика . Архивировано из оригинала 20 марта 2023 г. Проверено 14 июля 2022 г.
  35. ^ Клабник и Николс 2019 , с. 263.
  36. ^ Клабник и Николс 2019 , стр. 5–6.
  37. ^ Клабник и Николс 2023 , с. 32.
  38. ^ Клабник и Николс 2023 , стр. 32–33.
  39. ^ Клабник и Николс 2023 , стр. 49–50.
  40. ^ Клабник и Николс 2023 , стр. 34–36.
  41. ^ Клабник и Николс 2023 , стр. 6, 44, 47.
  42. ^ Клабник и Николс 2023 , стр. 50–52.
  43. ^ Клабник и Николс 2023 , с. 56.
  44. ^ Клабник и Николс 2023 , стр. 57–58.
  45. ^ Клабник и Николс 2023 , стр. 54–56.
  46. ^ Клабник и Николс 2019 , стр. 50–53.
  47. ^ Тайсон, Мэтью (3 марта 2022 г.). «Программирование на Rust для Java-разработчиков» . Инфомир . Проверено 14 июля 2022 г.
  48. ^ Клабник и Николс 2019 , стр. 104–109.
  49. ^ Клабник и Николс 2019 , стр. 24.
  50. ^ Клабник и Николс 2019 , стр. 36–38.
  51. ^ Клабник и Николс 2023 , стр. 36–38.
  52. ^ Клабник и Николс 2023 , с. 502.
  53. ^ «Глоссарий терминов Юникода» . Консорциум Юникод . Проверено 30 июля 2024 г.
  54. ^ Клабник и Николс 2019 , стр. 38–40.
  55. ^ Клабник и Николс 2019 , с. 83.
  56. ^ Клабник и Николс 2019 , с. 97.
  57. ^ Клабник и Николс 2019 , стр. 98–101.
  58. ^ Клабник и Николс 2019 , стр. 438–440.
  59. ^ Перейти обратно: а б Клабник и Николс 2019 , стр. 93.
  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. ^ «Литье — ржавчина на примере» . doc.rust-lang.org .
  80. ^ Клабник и Николс 2019 , стр. 59–61.
  81. ^ Перейти обратно: а б Клабник и Николс 2019 , стр. 63–68.
  82. ^ Клабник и Николс 2019 , стр. 74–75.
  83. ^ Перейти обратно: а б Баласубраманиан, Абхирам; Барановский, Марек С.; Бурцев Антон; Панда, Ауроджит; Ракамарич, Звонимир; Рыжик, Леонид (07.05.2017). «Системное программирование на Rust» . Материалы 16-го семинара по актуальным темам операционных систем . ХоОС '17. Нью-Йорк, штат Нью-Йорк, США: Ассоциация вычислительной техники. стр. 156–161. дои : 10.1145/3102980.3103006 . ISBN  978-1-4503-5068-6 . S2CID   24100599 . Архивировано из оригинала 11 июня 2022 г. Проверено 1 июня 2022 г.
  84. ^ Клабник и Николс 2023 , стр. 327–30.
  85. ^ Клабник и Николс 2019 , с. 194.
  86. ^ Клабник и Николс 2019 , стр. 75, 134.
  87. ^ Шамрелл-Харрингтон, Нелл. «Проверка заемных средств на ржавчину – глубокое погружение» . ИнфоQ . Проверено 25 июня 2022 г.
  88. ^ Клабник и Николс 2019 , стр. 194–195.
  89. ^ Клабник и Николс 2023 , стр. 208–12.
  90. ^ Клабник и Николс 2019 , стр. 201–203.
  91. ^ Клабник и Николс 2019 , стр. 171–172.
  92. ^ Клабник и Николс 2019 , стр. 171–172, 205.
  93. ^ Клабник и Николс 2019 , стр. 181, 182.
  94. ^ Ggenset 2021 , с. 25.
  95. ^ Клабник и Николс 2019 , стр. 182–184.
  96. ^ Клабник и Николс 2019 , стр. 281–283.
  97. ^ «Использование объектов-типов, допускающих значения разных типов — язык программирования Rust» . doc.rust-lang.org . Проверено 11 июля 2022 г.
  98. ^ Клабник и Николс 2019 , стр. 441–442.
  99. ^ Клабник и Николс 2019 , стр. 379–380.
  100. ^ Розенблатт, Сет (3 апреля 2013 г.). «Samsung присоединяется к Mozilla в поисках Rust» . CNET . Архивировано из оригинала 4 апреля 2013 г. Проверено 5 апреля 2013 г.
  101. ^ Браун, Нил (17 апреля 2013 г.). «Вкус ржавчины» . LWN.net . Архивировано из оригинала 26 апреля 2013 г. Проверено 25 апреля 2013 г.
  102. ^ «Гонки – Рустономикон» . doc.rust-lang.org . Архивировано из оригинала 10 июля 2017 г. Проверено 3 июля 2017 г.
  103. ^ «Часто задаваемые вопросы по языку Rust» . static.rust-lang.org . 2015. Архивировано из оригинала 20 апреля 2015 г. Проверено 24 апреля 2017 г.
  104. ^ Макнамара 2021 , с. 139, 376–379, 395.
  105. ^ «RAII – ржавчина на примере» . doc.rust-lang.org . Архивировано из оригинала 21 апреля 2019 г. Проверено 22 ноября 2020 г.
  106. ^ «Абстракция без накладных расходов: особенности Rust» . Ржавый блог . Архивировано из оригинала 23 сентября 2021 г. Проверено 19 октября 2021 г.
  107. ^ «Коробка, стопка и куча» . Ржавчина на примере . Проверено 13 июня 2022 г.
  108. ^ Клабник и Николс 2019 , стр. 70–75.
  109. ^ Клабник и Николс 2019 , с. 323.
  110. ^ «Замыкания — пример ржавчины» . doc.rust-lang.org .
  111. ^ Перейти обратно: а б «В качестве входных параметров — пример Rust» . doc.rust-lang.org .
  112. ^ «Время жизни — ржавчина на примере» . doc.rust-lang.org .
  113. ^ «Макросы на примере» . Справочник по ржавчине . Проверено 21 апреля 2023 г.
  114. ^ Клабник и Николс 2019 , стр. 446–448.
  115. ^ «Процедурные макросы» . Справочник по языку программирования Rust . Архивировано из оригинала 07.11.2020 . Проверено 23 марта 2021 г.
  116. ^ Клабник и Николс 2019 , стр. 449–455.
  117. ^ «Серде Дериве» . Документация Serde Derive . Архивировано из оригинала 17 апреля 2021 г. Проверено 23 марта 2021 г.
  118. ^ «extendr_api — Руст» . Документация по API Extendr . Архивировано из оригинала 25 мая 2021 г. Проверено 23 марта 2021 г.
  119. ^ «Вариадики» . Ржавчина на примере .
  120. ^ «2137-вариативный» . Книга Rust RFC .
  121. ^ «Безопасное взаимодействие Rust и C++ с CXX» . ИнфоQ . 06.12.2020. Архивировано из оригинала 22 января 2021 г. Проверено 03 января 2021 г.
  122. ^ «Макет текста – Справочник по Rust» . doc.rust-lang.org . Проверено 15 июля 2022 г.
  123. ^ Бланди, Орендорф и Тиндалл, 2021 , стр. 6–8.
  124. ^ Макнамара 2021 , стр. 411–412.
  125. ^ «Обзор компилятора» . Руководство по разработке компилятора Rust . Проверено 2 июня 2023 г.
  126. ^ «Генерация кода — Руководство по разработке компилятора Rust» . rust-dev-guide.rust-lang.org . Проверено 3 марта 2024 г.
  127. ^ "rust-lang/rustc_codegen_gcc" . Гитхаб . Язык программирования Rust. 02.03.2024 . Проверено 3 марта 2024 г.
  128. ^ "rust-lang/rustc_codegen_cranelift" . Гитхаб . Язык программирования Rust. 02.03.2024 . Проверено 3 марта 2024 г.
  129. ^ Ggenset 2021 , с. 213-215.
  130. ^ Перейти обратно: а б с Перкель, Джеффри М. (01 декабря 2020 г.). «Почему ученые обращаются к Rust» . Природа . 588 (7836): 185–186. Бибкод : 2020Natur.588..185P . дои : 10.1038/d41586-020-03382-2 . ПМИД   33262490 . S2CID   227251258 . Архивировано из оригинала 06 мая 2022 г. Проверено 15 мая 2022 г.
  131. ^ Симона, Серхио Де (18 апреля 2019 г.). «Rust 1.34 представляет альтернативные реестры для закрытых крейтов» . ИнфоQ . Проверено 14 июля 2022 г.
  132. ^ Клабник и Николс 2019 , стр. 511–512.
  133. ^ Clippy , Язык программирования Rust, 30 ноября 2023 г. , получено 30 ноября 2023 г.
  134. ^ «Клиппи Линтс» . Язык программирования Rust . Проверено 30 ноября 2023 г.
  135. ^ Klabnik & Nichols 2019 , Приложение G – Как создается ржавчина и «Ночная ржавчина»
  136. ^ Бланди, Орендорф и Тиндалл, 2021 , стр. 176–177.
  137. ^ Клабник и Николс 2023 , с. 623.
  138. ^ Макнамара 2021 , с. 11.
  139. ^ Попеску, Натали; Сюй, Цзыян; Апостолакис, Сотирис; Август, Дэвид И.; Леви, Амит (15 октября 2021 г.). «Безопаснее на любой скорости: автоматическое контекстно-зависимое повышение безопасности для Rust» . Труды ACM по языкам программирования . 5 (ООПСЛА). Раздел 2. doi : 10.1145/3485480 . S2CID   238212612 . п. 5: Мы наблюдаем большую разницу в издержках проверенного индексирования: 23,6% тестов сообщают о значительном снижении производительности от проверенного индексирования, но 64,5% сообщают о незначительном влиянии или его отсутствии, и, что удивительно, 11,8% сообщают об улучшении производительности... В конечном итоге , хотя неконтролируемое индексирование может повысить производительность, в большинстве случаев это не так.
  140. ^ Андерсон, Тим. «Может ли Руст спасти планету? Почему и почему бы и нет» . Регистр . Проверено 11 июля 2022 г.
  141. ^ Егулалп, Сердар (06 октября 2021 г.). «Что такое язык Rust? Безопасная, быстрая и простая разработка программного обеспечения» . Инфомир . Проверено 25 июня 2022 г.
  142. ^ Перейти обратно: а б Астраускас, Витаутас; Матея, Кристоф; Поли, Федерико; Мюллер, Питер; Саммерс, Александр Дж. (13 ноября 2020 г.). «Как программисты используют небезопасный ржавчину?» . Труды ACM по языкам программирования . 4 (OOPSLA): 1–27. дои : 10.1145/3428204 . hdl : 20.500.11850/465785 . ISSN   2475-1421 .
  143. ^ Макнамара 2021 , с. 19, 27.
  144. ^ Купри, Жоффруа (2015). «Nom, байт-ориентированная, потоковая передача, нулевое копирование, библиотека комбинаторов парсеров в Rust» . Семинары IEEE по безопасности и конфиденциальности , 2015 г. стр. 142–148. дои : 10.1109/SPW.2015.31 . ISBN  978-1-4799-9933-0 . S2CID   16608844 .
  145. ^ Макнамара 2021 , с. 20.
  146. ^ «Генерация кода — Справочник по Rust» . doc.rust-lang.org . Проверено 9 октября 2022 г.
  147. ^ «Насколько быстро ржавеет?» . Часто задаваемые вопросы по языку программирования Rust . Архивировано из оригинала 28 октября 2020 г. Проверено 11 апреля 2019 г.
  148. ^ Фаршин, Алиреза; Барбетт, Том; Рузбе, Амир; Магуайр-младший, Джеральд К.; Костич, Деян (2021). «PacketMill: к сети со скоростью 100 ГБ/с на каждое ядро». Материалы 26-й Международной конференции ACM по архитектурной поддержке языков программирования и операционных систем . стр. 1–17. дои : 10.1145/3445814.3446724 . ISBN  9781450383172 . S2CID   231949599 . Проверено 12 июля 2022 г. ... В то время как некоторые компиляторы (например, Rust) поддерживают переупорядочение структур [82], компиляторам C и C++ запрещено переупорядочивать структуры данных (например, структуру или класс) [74] ...
  149. ^ «Тип-макет» . Справочник по ржавчине . Проверено 14 июля 2022 г.
  150. ^ Лардинуа, Фредерик (3 апреля 2015 г.). «Mozilla и Samsung объединяются для разработки Servo, браузерного движка следующего поколения Mozilla для многоядерных процессоров» . ТехКранч . Архивировано из оригинала 10 сентября 2016 г. Проверено 25 июня 2017 г.
  151. ^ Кейзер, Грегг (31 октября 2016 г.). «Mozilla планирует омолодить Firefox в 2017 году» . Компьютерный мир . Проверено 13 мая 2023 г.
  152. ^ Клэберн, Томас (12 января 2023 г.). «Google полирует код Chromium слоем Rust» . Регистр . Проверено 17 июля 2024 г.
  153. ^ «Поддержка использования Rust в проекте Chromium» . Блог Google по онлайн-безопасности . Проверено 12 ноября 2023 г.
  154. ^ Шенкленд, Стивен (12 июля 2016 г.). «Firefox будет переработан, чтобы снова заинтересовать вас» . CNET . Проверено 14 июля 2022 г.
  155. ^ Группа исследования безопасности (04.10.2013). «ZeroMQ: помогает нам блокировать вредоносные домены в режиме реального времени» . Зонт Циско . Архивировано из оригинала 13 мая 2023 г. Проверено 13 мая 2023 г.
  156. ^ Чимпану, Каталин (15 октября 2019 г.). «AWS спонсирует проект Rust» . ЗДНЕТ . Проверено 17 июля 2024 г.
  157. ^ Николс, Шон (27 июня 2018 г.). «Следующий трюк Microsoft? Перенос данных из облака в Azure IoT Edge» . Регистр . Архивировано из оригинала 27 сентября 2019 г. Проверено 27 сентября 2019 г.
  158. ^ Тунг, Лиам. «Microsoft: почему мы использовали язык программирования Rust вместо Go для WebAssembly в приложении Kubernetes» . ЗДНет. Архивировано из оригинала 21 апреля 2022 г. Проверено 21 апреля 2022 г.
  159. ^ Клэберн, Томас (20 сентября 2022 г.). «Мы доверяем Rust: технический директор Microsoft Azure избегает C и C++» . Регистр . Проверено 7 июля 2024 г.
  160. ^ Симоне, Серджио Де. «NPM внедрила Rust для устранения узких мест в производительности» . ИнфоQ . Проверено 20 ноября 2023 г.
  161. ^ Лю, Шинг (2020), Лю, Шинг (ред.), «Добро пожаловать в мир Rust» , Практические проекты Rust: создание игр, физические вычисления и приложения машинного обучения , Беркли, Калифорния: Apress, стр. 1–8 , doi : 10.1007/978-1-4842-5599-5_1 , ISBN  978-1-4842-5599-5 , получено 29 ноября 2023 г.
  162. ^ Лю, Шинг (2021), Лю, Шинг (редактор), «Rust в мире Интернета» , «Практические веб-проекты Rust: создание облачных и веб-приложений» , Беркли, Калифорния: Apress, стр. 1–7, doi : 10.1007/978-1-4842-6589-5_1 , ISBN  978-1-4842-6589-5 , получено 29 ноября 2023 г.
  163. ^ Амадео, Рон (07 апреля 2021 г.). «Google сейчас пишет низкоуровневый код Android на Rust» . Арс Техника . Архивировано из оригинала 8 апреля 2021 г. Проверено 21 апреля 2022 г.
  164. ^ Дарккризт. «Google разрабатывает новый стек Bluetooth для Android, написанный на Rust» . Деде Линукс . Архивировано из оригинала 25 августа 2021 г. Проверено 31 августа 2024 г.
  165. ^ Андерсон, Тим (07 декабря 2021 г.). «Ржавое ядро ​​Linux становится ближе с новым патчем» . Регистр . Проверено 14 июля 2022 г.
  166. ^ «Первый взгляд на Rust в ядре 6.1 [LWN.net]» . lwn.net . Проверено 11 ноября 2023 г.
  167. ^ Клэберн, Томас (27 апреля 2023 г.). «Microsoft переписывает основные библиотеки Windows на Rust» . Регистр . Проверено 13 мая 2023 г.
  168. ^ Доказано, Лиам. «Маленькая, но мощная «Humanbiologics» компании 9Front создана для по-настоящему любопытных» . Регистр . Проверено 7 марта 2024 г.
  169. ^ Егулалп, Сердар. «Ос Redox от Rust может показать Linux несколько новых трюков» . Инфомир . Архивировано из оригинала 21 марта 2016 г. Проверено 21 марта 2016 г.
  170. ^ Андерсон, Тим (14 января 2021 г.). «Еще одна ОС в стиле Rust: Тесей присоединяется к Redox в поисках более безопасных и отказоустойчивых систем» . Регистр . Проверено 14 июля 2022 г.
  171. ^ Боос, Кевин; Лиянаге, Намита; Иджаз, Рамла; Чжун, Линь (2020). Тезей: эксперимент в структуре операционной системы и управлении состоянием . стр. 1–19. ISBN  978-1-939133-19-9 .
  172. ^ Чжан, ХаньДун (Алекс) (31 января 2023 г.). «Обзор 2022 года | Внедрение Rust в бизнес» . Журнал Ржавчина . Проверено 7 февраля 2023 г.
  173. ^ Сей, Марк (10 октября 2018 г.). «Новые возможности Fedora 29: Start теперь официально в Fedora» . Марксей, Еженедельные таблетки сисадмина . Архивировано из оригинала 13 апреля 2019 г. Проверено 13 мая 2019 г.
  174. ^ Провен, Лиам (12 июля 2022 г.). «Выпущен Oracle Linux 9 с некоторыми интересными дополнениями» . Регистр . Проверено 14 июля 2022 г.
  175. ^ Провен, Лиам (2 февраля 2023 г.). «System76 анонсирует функции, которые появятся в отечественном настольном компьютере COSMIC на базе Rust» . Регистр . Проверено 17 июля 2024 г.
  176. ^ Ху, Вивиан (12 июня 2020 г.). «Deno готов к производству» . ИнфоQ . Проверено 14 июля 2022 г.
  177. ^ Абрамс, Лоуренс (6 февраля 2021 г.). «Этот эмулятор Flash Player позволяет безопасно играть в старые игры» . Мигающий компьютер . Проверено 25 декабря 2021 г.
  178. ^ Хариф, Ольга (17 октября 2020 г.). «Убийца блокчейна Ethereum носит скромное имя Polkadot» . Блумберг ЛП . Проверено 14 июля 2021 г.
  179. ^ Перейти обратно: а б с «Опрос разработчиков Stack Overflow, 2023 г.» . Переполнение стека . Проверено 25 июня 2023 г.
  180. ^ Клэберн, Томас (23 июня 2022 г.). «Линус Торвальдс говорит, что Rust появится в ядре Linux» . Регистр . Проверено 15 июля 2022 г.
  181. ^ Юнг, Ральф; Журдан, Жак-Анри; Кребберс, Робберт; Дрейер, Дерек (27 декабря 2017 г.). «RustBelt: закрепление основ языка программирования Rust» . Труды ACM по языкам программирования . 2 (ПОПЛ): 1–34. дои : 10.1145/3158154 . hdl : 21.11116/0000-0003-34C6-3 . ISSN   2475-1421 .
  182. ^ Попеску, Натали; Сюй, Цзыян; Апостолакис, Сотирис; Август, Дэвид И.; Леви, Амит (20 октября 2021 г.). «Безопаснее на любой скорости: автоматическое контекстно-зависимое повышение безопасности для Rust» . Труды ACM по языкам программирования . 5 (OOPSLA): 1–23. дои : 10.1145/3485480 . ISSN   2475-1421 .
  183. ^ Клабник и Николс 2019 , с. 4.
  184. ^ "Начиная" . www.rust-lang.org . Архивировано из оригинала 01.11.2020 . Проверено 11 октября 2020 г.
  185. ^ Тунг, Лиам (08 февраля 2021 г.). «Язык программирования Rust сделал огромный шаг вперед» . ЗДНет . Проверено 14 июля 2022 г.
  186. ^ Крилл, Пол. «Язык Rust переходит на самостоятельную основу» . Инфомир . Архивировано из оригинала 10 апреля 2021 г. Проверено 10 апреля 2021 г.
  187. ^ Воган-Николс, Стивен Дж. (9 апреля 2021 г.). «Шейн Миллер из AWS возглавит недавно созданный Rust Foundation» . ЗДНет . Архивировано из оригинала 10 апреля 2021 г. Проверено 10 апреля 2021 г.
  188. ^ Воан-Николс, Стивен Дж. (17 ноября 2021 г.). «Rust Foundation назначает Ребекку Рамбул исполнительным директором» . ЗДНет . Архивировано из оригинала 18 ноября 2021 г. Проверено 18 ноября 2021 г.
  189. ^ «Управление» . Язык программирования Rust . Архивировано из оригинала 10 мая 2022 г. Проверено 18 июля 2024 г.
  190. ^ «Представляем Совет лидеров Rust» . Ржавый блог . Проверено 12 января 2024 г.

Дальнейшее чтение

[ редактировать ]
  • Блэнди, Джим; Орендорф, Джейсон; Тиндалл, Леонора Ф.С. (06 июля 2021 г.). Программирование на Rust: быстрая и безопасная разработка систем . О'Рейли Медиа. ISBN  978-1-4920-5259-3 .
[ редактировать ]
Arc.Ask3.Ru: конец переведенного документа.
Arc.Ask3.Ru
Номер скриншота №: b10da0dc181e52e40ea39e3e155996f6__1726348500
URL1:https://arc.ask3.ru/arc/aa/b1/f6/b10da0dc181e52e40ea39e3e155996f6.html
Заголовок, (Title) документа по адресу, URL1:
Rust (programming language) - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть. Любые претензии, иски не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, вы не можете использовать данный сайт и информация размещенную на нем (сайте/странице), немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, Денежную единицу (имеющую самостоятельную стоимость) можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)